dynamoDB'找不到请求的资源'访问跨AWS帐户

时间:2019-03-05 17:56:27

标签: node.js amazon-web-services aws-lambda amazon-dynamodb amazon-iam

假设我们有两个AWS帐户,帐户名称为 devo prod 。因此,在 prod 上,我有一个dynamoDB表,我想使用 devo 中存在的lambda函数进行访问。 现在,我在 prod 中创建了一个策略,该策略可以完全访问dynamoDB,并将该策略附加到生产 devo < / strong>作为受信任的帐户。 在 devo 中,我创建了一个角色,该角色具有对 lambda 的完全访问权限,并且还附加了一个内联策略,该策略允许使用{strong> prod < / strong>。 另外,我还可以使用AWS控制台通过 devo 帐户中的承担角色从role获取数据。

下面是role函数:

dynamoDB

这是我得到的错误:

lambda

谢谢

2 个答案:

答案 0 :(得分:0)

我认为您的代码在sts调用完成之前就在构建dynamodb客户端,因为适用于JavaScript的AWS开发工具包是异步的。我认为您可以通过添加长睡眠命令来测试它是否开始工作,以进行测试。确定问题所在后,AWS的此页面将帮助您更改代码以使其正常工作

https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/calling-services-asynchronously.html

答案 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();