NodeJS AWS DynamoDB V3 如何刷新假定的角色权限

问题描述 投票:0回答:2

我们设法承担了一个角色,但它不会自动刷新访问权限,因此一段时间后我们会遇到超时错误。

我们发现没有关于如何刷新凭据的正确文档,所以我想知道是否有人可以提供如何正确设置的代码示例。

我们已经在 DynamoDBClient 构造函数选项中尝试使用

credentialDefaultProvider({ assumeRole })
,但它甚至没有调用它。

node.js amazon-web-services amazon-dynamodb refresh credentials
2个回答
0
投票

AWS Secure Token Service 是您承担角色并使用其凭证的朋友。

// this example uses Typescript
import { AssumeRoleCommand, Credentials, STSClient } from '@aws-sdk/client-sts'


// get / refresh Credentials
const stsClient = new STSClient({ region: <YOUR_REGION> })

const data = await stsClient.send(
    new AssumeRoleCommand({
        RoleArn: <ROLE_ARN>,
        RoleSessionName: <SOME_SESSION_NAME>,
        DurationSeconds: <DURATION_IN_SECONDS>
    }),
)
// now use the Credentials
// data.Credentials

您还可以在提出请求之前检查凭证是否仍然有效:

if(new Date() > new Date(data.Expiration)){
    // refresh Credentials 
}

有用的链接:


0
投票

担任角色时,凭证是临时的。如果您手动使用 STS 并获取凭据,您还必须手动管理何时再次调用 STS 以获取新凭据。

否则,你会得到这个错误:

ExpiredTokenException: The security token included in the request is expired

有一种内置方法可以完成此任务,并让 AWS 开发工具包来完成这项工作。这是一个创建

DynamoDBClient
的简短示例,其中
AwsCredentialIdentityProvider
称为
fromTemporaryCredentials()

import { fromTemporaryCredentials } from '@aws-sdk/credential-providers';

const client: DynamoDBClient = new DynamoDBClient({
  credentials: fromTemporaryCredentials({
    params: {
      RoleArn: 'arn:aws:iam::1234567890:role/RoleB',
    },
  }),
});

来源:https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromtemporarycredentials

© www.soinside.com 2019 - 2024. All rights reserved.