无法在 nodejs 中设置 AWS 凭证
Posted
技术标签:
【中文标题】无法在 nodejs 中设置 AWS 凭证【英文标题】:Cant set AWS credentials in nodejs 【发布时间】:2016-09-02 23:07:55 【问题描述】:我正在使用 NodeJS 开发一个云项目。
我必须运行 EC2 实例,所以已经完成了 npm install aws-sdk
。
我认为我们现在必须在运行应用程序之前添加我们的凭据?
我无法使用 aws 文件夹,因此我创建了一个文件夹并将凭据添加到 credentials.txt
文件中。
C:\Users\jessig\aws
我不断收到此错误:
[TimeoutError: Missing credentials in config]
message: 'Missing credentials in config',
code: 'CredentialsError',
我尝试在环境变量中设置访问密钥和密钥,但仍然得到相同的错误..
不知道为什么我找不到\.aws\credentials
(Windows) 文件夹..
有人可以帮忙吗?
【问题讨论】:
您可以添加一些您尝试过的示例代码吗? 【参考方案1】:正如 Frederick 提到的,硬编码不是 AWS 推荐的标准,这不是您希望在生产环境中执行的操作。但是,出于测试目的和学习目的,它可能是最简单的方法。
由于您的请求是针对 AWS EC2 的,因此这里有一个小示例可以帮助您入门。
要获取 Node.js 可用的所有方法的列表,请参考此 AWS documentation。
var AWS = require('aws-sdk');
AWS.config = new AWS.Config();
AWS.config.accessKeyId = "accessKey";
AWS.config.secretAccessKey = "secretKey";
AWS.config.region = "us-east-1";
var ec2 = new AWS.EC2();
var params =
InstanceIds: [ /* required */
'i-4387dgkms3',
/* more items */
],
Force: true
;
ec2.stopInstances(params, function(err, data)
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
);
【讨论】:
谢谢。我认为与在 AWS 文档中找到不需要 5 个其他先决条件设置的单个工作示例相比,我更有机会猜测语法。 请注意,现在不推荐使用AWS.config.accessKeyId=
或 AWS.config.secretAccessKey=
很高兴知道替代方法是什么。
这太不直观了。我坚持使用已弃用的方法。【参考方案2】:
我使用了以下编程方式,结合流行的 npm 配置模块(它允许不同的配置文件用于开发和生产等):
const config = require('config');
const AWS = require('aws-sdk');
const accessKeyId = config.get('AWS.accessKeyId');
const secretAccessKey = config.get('AWS.secretAccessKey');
const region = config.get('AWS.region');
AWS.config.update(
accessKeyId,
secretAccessKey,
region
);
还有 json 配置文件,例如development.json,看起来像:
"AWS":
"accessKeyId": "TODO",
"secretAccessKey": "TODO",
"region": "TODO"
【讨论】:
【参考方案3】:有multiple ways配置sdk与node js配合使用
有几种方法可以加载凭据。他们在这里,按顺序 推荐:
从 Amazon EC2 的 IAM 角色加载(如果在 EC2 上运行), 从共享凭证文件 (~/.aws/credentials) 加载, 从环境变量加载, 从磁盘上的 JSON 文件加载, 在您的应用程序中硬编码
虽然不推荐硬编码。
如果你想使用共享凭证文件,在 windows 上可以
C:\Users\jessig\.aws\credentials
(注意 aws 之前的 .
)。你的文件应该是这样的
[default]
aws_access_key_id = your_access_key
aws_secret_access_key = your_secret_key
【讨论】:
如果我使用 codestar 会怎样?我无法使用磁盘上的文件 @Frederic,我在 Mac 上。~/.aws/
imgur.com/j4FlAin没有文件夹
@bibscy 表示你还没有配置 aws cli 工具
@FredericHenri (base) bogdanmac:~ iliebogdanbarbulescu$ brew install awscli Warning: awscli 2.0.46 is already installed and up-to-date To reinstall 2.0.46, run `brew reinstall awscli` (base) bogdanmac:~ iliebogdanbarbulescu$
,但仍然没有~/.aws/
目录
@bibscy 不是安装而是配置,检查docs.aws.amazon.com/cli/latest/userguide/…【参考方案4】:
AWS 凭证可以在运行的容器中设置为 ENVIRONMENT VAR。 您可以直接添加以下两个 ENVIRONMENT VAR:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
或在 NODE 中以编程方式将这些 ENVIRONMENT VAR 设置为
var AWS = require('aws-sdk')
AWS.config = new AWS.Config();
process.env.AWS_ACCESS_KEY_ID = "AKIA************L55A"
process.env.AWS_SECRET_ACCESS_KEY = "Ef*******+C5LrtOroSj**********yNE"
AWS.config.region = "us-east-2"
https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-environment.html
【讨论】:
以上是关于无法在 nodejs 中设置 AWS 凭证的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 NodeJS 中的 request 和 express 模块在浏览器中设置 cookie
Aws::Errors::MissingCredentialsError(无法在没有设置凭证的情况下签署请求)- Beanstalk,通过 IAM 角色实现安全