无法在 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 凭证的主要内容,如果未能解决你的问题,请参考以下文章

如何在AWS Almbda中设置环境变量或使用即时客户端库

无法使用 NodeJS 中的 request 和 express 模块在浏览器中设置 cookie

Aws::Errors::MissingCredentialsError(无法在没有设置凭证的情况下签署请求)- Beanstalk,通过 IAM 角色实现安全

无法访问 Amazon SQS - InvalidClientTokenId

在 AWS 中设置 Datapipeline 流

如何在 spark-shell 中设置 aws 访问密钥和 aws 密钥