AWS SDK v3 代入客户角色
AWS SDK v3 Assume role for a client
我正在使用 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);
知道我做错了什么吗?也许 DDBClient 没有像它应该的那样假设它,但是有没有办法检查 DBClient 的假设角色?我在 documentation 中找到了一个名为 RoleInfo 的命名空间,但我不知道如何调用它。
请阅读DynamoDBClient参数对象的文档:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#constructor-property
凭证字段是小写的,而在 STS 结果中它们是大写的。
您的代码中还有更多错误,例如 Object.assign(credentials, region);
调用。 region
这里是一个 string
,所以通过将它分配给 credentials
你不会得到一个 属性 名为“region”的 region
变量的值,但是你会得到数字属性,每个属性都有 region
字符串的一个字符。
正确的初始化应该是:
const credentials = await getCredentialsFromSTS(region);
const dbClient = new DynamoDBClient({
region: region,
credentials: {
accessKeyId: credentials.AccessKeyId,
secretAccessKey: credentials.SecretAccessKey,
sessionToken: credentials.SessionToken,
}
});
我正在使用 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);
知道我做错了什么吗?也许 DDBClient 没有像它应该的那样假设它,但是有没有办法检查 DBClient 的假设角色?我在 documentation 中找到了一个名为 RoleInfo 的命名空间,但我不知道如何调用它。
请阅读DynamoDBClient参数对象的文档:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#constructor-property
凭证字段是小写的,而在 STS 结果中它们是大写的。
您的代码中还有更多错误,例如 Object.assign(credentials, region);
调用。 region
这里是一个 string
,所以通过将它分配给 credentials
你不会得到一个 属性 名为“region”的 region
变量的值,但是你会得到数字属性,每个属性都有 region
字符串的一个字符。
正确的初始化应该是:
const credentials = await getCredentialsFromSTS(region);
const dbClient = new DynamoDBClient({
region: region,
credentials: {
accessKeyId: credentials.AccessKeyId,
secretAccessKey: credentials.SecretAccessKey,
sessionToken: credentials.SessionToken,
}
});