在 AWS 中访问跨账户资源时。有两种方法 - 1.角色作为代理 2.基于资源的访问。DynamoDb 不支持跨账户访问的基于资源的访问。因此,我们必须将角色作为代理选项,并在我们的代码中承担角色。但问题是,当我们担任角色时,我们会获得临时的安全凭证,最多持续 1 小时。这意味着在我的代码中,我必须每 1 小时或当我收到资源访问异常时更新代入角色访问权限并获取新凭据这似乎有问题当我的 dynamodbclient 在多个线程之间共享时。有没有办法在跨账户dynamodb上永久访问,而无需续订会话。
表所在的账户)中创建的 IAM 用户的凭证(访问密钥和私有密钥)初始化您的 DynamoDB 客户端。
虽然这是我偶然发现的一个旧线程。但 STS 启动了更长的角色会话,您可以在其中代入一个角色(在您的情况下可能是跨账户的)长达 12 小时。我希望这应该解决你的问题。
有一种优雅的方法可以承担跨账户角色并续订它:
import {AssumeRoleCommandInput} from '@aws-sdk/client-sts'
import {fromTemporaryCredentials} from '@aws-sdk/credential-providers'
const assumeRoleParams: AssumeRoleCommandInput = {
RoleArn: process.env.CROSS_ACCOUNT_ROLE_ARN!,
RoleSessionName: `assume-role-to-call-main-account`
}
...
this.client = new SNSClient/SQSClient...( {
credentials: fromTemporaryCredentials({ params: assumeRoleParams })
} )
该解决方案在文章 - 从 Lambda 调用 AWS 服务跨账户(使用 AWS CDK 和 AWS 开发工具包 v3)中有详细描述