假设我们有两个AWS帐户,帐户名称为 devo 和 prod 。因此,在 prod 上,我有一个dynamoDB
表,我想使用 devo 中存在的lambda
函数进行访问。
现在,我在 prod 中创建了一个策略,该策略可以完全访问dynamoDB
,并将该策略附加到生产 devo < / strong>作为受信任的帐户。
在 devo 中,我创建了一个角色,该角色具有对 lambda 的完全访问权限,并且还附加了一个内联策略,该策略允许使用{strong> prod < / strong>。
另外,我还可以使用AWS控制台通过 devo 帐户中的承担角色从role
获取数据。
下面是role
函数:
dynamoDB
这是我得到的错误:
lambda
谢谢
答案 0 :(得分:0)
我认为您的代码在sts调用完成之前就在构建dynamodb客户端,因为适用于JavaScript的AWS开发工具包是异步的。我认为您可以通过添加长睡眠命令来测试它是否开始工作,以进行测试。确定问题所在后,AWS的此页面将帮助您更改代码以使其正常工作
答案 1 :(得分:0)
Lambda 不承担提供给 lambda 的所有代入角色访问权限。 需要特别要求 lambda 承担特定角色。
这是一个简单的 java 实现,用于假设 IAM 具有访问 DynamoDB 所需的权限
final AWSSecurityTokenService stsClient =
AWSSecurityTokenServiceClientBuilder.standard()
.withRegion(REGION)
.withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
.build();
final AssumeRoleResult assumeRoleResult = stsClient.assumeRole(
new AssumeRoleRequest()
.withRoleArn("<DynamoDBRoleArn>")
.withRoleSessionName("DummyLambdaRoleSessionName"));
final BasicSessionCredentials sessionCredentials = new BasicSessionCredentials(
assumeRoleResult.getCredentials().getAccessKeyId(),
assumeRoleResult.getCredentials().getSecretAccessKey(),
assumeRoleResult.getCredentials().getSessionToken());
return AmazonDynamoDBClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(sessionCredentials))
.withRegion(REGION)
.build();