AWS SDK配置文件缺少凭证信息。

8

错误:可能存在未处理的 Promise 拒绝 (ID: 0): 缺少配置中的凭据,如果使用 AWS_CONFIG_FILE,请设置 AWS_SDK_LOAD_CONFIG=1。

我在一个React Native(0.64.0)项目中使用“aws-sdk”:“^2.918.0”。我正在使用 node v14.17.0 运行程序,并在 Windows 10 版本 21H1 OS 构建 19043.985 上运行:

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');

AWS.config.update({
  region: 'us-east-1',
  maxRetries: 3,
  httpOptions: {timeout: 30000, connectTimeout: 5000},
});

// Create the DynamoDB service object
var ddb = new AWS.DynamoDB({
  apiVersion: '2012-08-10',
});

console.log('ddb: ', ddb);

~/.aws/config

[default]
region=us-east-1
output=json

[profile myName]
region = us-east-1
output = json

~/.aws/credentials

[default]
aws_access_key_id=XXX...
aws_secret_access_key=XXX...

[mateo\.lara]
aws_access_key_id=XXX...
aws_secret_access_key=XXX...

配置数据

在使用ddb查询数据库时,尽管我已经在AWS CLI(aws-cli/2.2.6 Python/3.8.8 Windows/10 exe/AMD64 prompt/off)中配置了我的凭证,但仍然出现CredentialsError错误。您知道问题可能是什么吗?如何解决?

-------------------------------------- 编辑 -------------------------------------

如@nishkaush建议的那样,我已尝试将AWS_SDK_LOAD_CONFIG=1添加到配置文件中,并尝试删除凭据文件并将aws_access_key_id和aws_secret_access_key添加到配置文件中,但均未成功。

以下为ddb日志输出:

ddb:  {"CALL_EVENTS_BUBBLE": [Function CALL_EVENTS_BUBBLE], "MONITOR_EVENTS_BUBBLE": [Function EVENTS_BUBBLE], "_clientId": 1, "_events": {"apiCall": [[Function CALL_EVENTS_BUBBLE]], "apiCallAttempt": [[Function EVENTS_BUBBLE]]}, "config": {"apiVersion": "2012-08-10", "apiVersions": {}, "clientSideMonitoring": 
false, "computeChecksums": true, "convertResponseTypes": true, "correctClockSkew": false, "credentialProvider": null, "credentials": null, "customUserAgent": null, "dynamoDbCrc32": true, "endpoint": "dynamodb.us-east-1.amazonaws.com", "endpointCacheSize": 1000, "endpointDiscoveryEnabled": undefined, "hostPrefixEnabled": true, "httpOptions": {"connectTimeout": 5000, "timeout": 30000}, "logger": null, "maxRedirects": 10, "maxRetries": 3, "paramValidation": true, "region": "us-east-1", "retryDelayOptions": {}, "s3BucketEndpoint": false, "s3DisableBodySigning": true, "s3ForcePathStyle": false, "s3UsEast1RegionalEndpoint": "legacy", 
"s3UseArnRegion": undefined, "signatureCache": true, "signatureVersion": "v4", "sslEnabled": true, "stsRegionalEndpoints": "legacy", "systemClockOffset": 0, "useAccelerateEndpoint": false}, "endpoint": {"host": "dynamodb.us-east-1.amazonaws.com", "hostname": "dynamodb.us-east-1.amazonaws.com", "href": "https://dynamodb.us-east-1.amazonaws.com/", "path": "/", "pathname": "/", "port": 443, "protocol": "https:"}, "isGlobalEndpoint": false}

1
我曾经遇到过类似的问题,您能否查看这个问题及其答案并发表评论,也许可以帮助您?https://dev59.com/yFEG5IYBdhLWcg3wZsk4 - Jatin Mehrotra
根据建议,我将DynamoDB表的IAM角色添加到~/.aws/credentials文件中的配置文件中,但错误仍然存在。 - Mateo Lara
1
你能否在终端中尝试运行以下命令,然后再尝试运行你的node.js代码 export AWS_SDK_LOAD_CONFIG=1,如果错误仍然存在,请尝试将你的密钥添加到你的代码中,如下所示:aws.config.update({ region: "eu-west-1", endpoint: "http://localhost:8080", accessKeyId: “xxxxxx”, secretAccessKey: “xxxxxx” }); - Jatin Mehrotra
5个回答

9
首先,感谢nishkaush和Jatin Mehrotra的帮助。最终,我解决问题的唯一方法是直接将'accessKeyId'和'secretAccessKey'添加到我的AWS.config.update中。这绝不是最终解决方案,您应避免直接将凭据放入代码中(出于安全原因)。请注意,如果您打算使用此解决方案,您应该通过.env文件设置您的凭据,并将其添加到gitignore以保护您的凭据。我本来想使用共享凭据文件配置我的凭据,但时间不够了,问题仍然存在。如果有帮助,请查看: 在Node.js中开始使用AWS 从共享凭据文件在Node.js中加载凭据 话虽如此,问题可能与我使用react native有关,无论如何,这就是解决方案:
AWS.config.update({
  maxRetries: 3,
  httpOptions: {timeout: 30000, connectTimeout: 5000},
  region: 'us-east-1',
  accessKeyId: 'XXXX...',
  secretAccessKey: 'XXXX...',
});

Android 中的超时功能正常工作吗? - usaid ather

2
在您的~/.aws/config文件中,您可以尝试设置以下内容:
..
..
AWS_SDK_LOAD_CONFIG=1

另外,您可以尝试删除~/.aws/credentials文件,并将aws_access_key_idaws_secret_access_key两者移动到~/.aws/config文件中,例如:

[default]
region=us-east-1
output=json
aws_access_key_id = XXX
aws_secret_access_key = XXX

感谢您的帮助,不幸的是,您提出的更改并没有解决问题:在配置文件中将AWS_SDK_LOAD_CONFIG=1添加到两个配置文件后,仍然出现相同的错误消息(CredentialsError)。 - Mateo Lara
1
你可以尝试删除 ~/.aws/credentials 文件,并将 aws_access_key_idaws_secret_access_key 都移动到 ~/.aws/config 文件中。我也在我的答案中添加了同样的信息。 - nishkaush

0

你也可以设置

s3.config.s3UseArnRegion = true;

如果您遇到与s3UseArnRegion未定义相关的错误,请检查以下条件


0
在我的情况下,错误是由于凭据不正确引起的。我的identityPoolID值由于解析错误而被错误地存储为undefined

-1

我曾经遇到同样的问题,我通过以下方式解决了它:

  1. 在文件~/.aws/credentials中添加credentials
[default]
aws_access_key_id = XXXXX
aws_secret_access_key = XXXXX

  1. 在文件~/.aws/config中添加AWS_SDK_LOAD_CONFIG
[default]
AWS_SDK_LOAD_CONFIG=1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接