我们设法承担了一个角色,但它不会自动刷新访问权限,因此一段时间后我们会遇到超时错误。
我们发现没有关于如何刷新凭据的正确文档,所以我想知道是否有人可以提供如何正确设置的代码示例。
我们已经在 DynamoDBClient 构造函数选项中尝试使用
credentialDefaultProvider({ assumeRole })
,但它甚至没有调用它。
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
}
有用的链接:
担任角色时,凭证是临时的。如果您手动使用 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',
},
}),
});