AWS SDK v3承担客户端角色



我正在使用AWS JS SDK v3编写Node JS应用程序。我正确地使用STS来承担角色并检索凭据。假设呼叫响应如下:

{
"$metadata": {
"httpStatusCode": 200,
"requestId": "xxx",
"attempts": 1,
"totalRetryDelay": 0
},
"Credentials": {
"AccessKeyId": "xxx",
"SecretAccessKey": "xxx",
"SessionToken": "xxx",
"Expiration": "2021-02-26T15:40:17.000Z"
},
"AssumedRoleUser": {
"AssumedRoleId": "xxx",
"Arn": "arn:aws:sts::xxx"
}
}

我正在获取凭据并将它们传递给DynamoDBClient构造函数(以及区域)。

import { DynamoDBClient, ListTablesCommand } from '@aws-sdk/client-dynamodb';

public getTablesList(region: string) {
const credentials = await getCredentialsFromSTS(region);
const clientParams = Object.assign(credentials, region); // This just merges two JSONs into one
const dbClient = new DynamoDBClient(clientParams);
const command = new ListTablesCommand({});
const response = await dbClient.send(command);
console.log(response);
}

我在响应中得到的是一个仅包含运行我的代码的帐户表的列表。我假设角色的帐户中的表不存在。也许我把这个角色想错了?我试着把这些证书打包成"证书"。关键,但这也没有帮助。

const clientParams = Object.assign({ Credentials: credentials }, region);

你知道我做错了什么吗?也许DBClient没有像它应该的那样假设它,但是有一种方法可以检查DBClient的假设角色吗?我在文档中发现了一个名为RoleInfo的命名空间,但我不知道如何调用它。

请阅读DynamoDBClient参数对象的文档:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#constructor-property

凭据字段是小写的,而在STS结果中它们是大写的。

在您的代码中也有更多的错误,例如Object.assign(credentials, region);调用。region在这里是一个string,所以通过将它分配到credentials,你不会得到一个名为"区域"的属性;使用region变量的值,但您将获得数字属性,每个属性具有region字符串的一个字符。

正确的初始化应该是:

const credentials = await getCredentialsFromSTS(region);
const dbClient = new DynamoDBClient({
region: region,
credentials: {
accessKeyId: credentials.AccessKeyId,
secretAccessKey: credentials.SecretAccessKey,
sessionToken: credentials.SessionToken,
}
});

最新更新