首页 > 解决方案 > Dynamodb 跨账户 put_item

问题描述

我有两个 AWS 账户(账户 A 和账户 B)。账户 A 有一个 EC2 实例,该实例想要对位于账户 B 中的 dynamodb 执行放置项。

由于是跨账户访问,我在账户 B 上创建了一个 IAM 角色以允许账户 A 执行 put_item,在账户 A 上创建一个 IAM 角色来承担该角色,并将 IAM 角色附加到 EC2 实例上

当我运行我的程序时,我收到一条错误消息,指出我正在尝试使用承担角色将项目放入同一帐户中的表中。(在我的代码中,我只是指定了 Account B 表名)

即使我设置了假设角色,该实例似乎也没有意识到该表在帐户 B 上。我在这里想念什么?

我还验证了我可以使用 AWS CLI 放置项目(在执行 STS 调用之后)。

是否有任何 Java API 可以指定我要将项目放入哪个 dynamodb arn?

错误信息:

User: arn:aws:sts::ACCOUNT_A:assumed-role/Assume-role/INSTANCE_ID is not authorized to perform: dynamodb:PutItem on resource: arn:aws:dynamodb:us-east-1:ACCOUNT_A:table/TABLE_NAME (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: AccessDeniedException)

账户 A 的政策:

{ 
"Version": "2012-10-17", 
"Statement": [ { 
"Effect": "Allow", 
"Action": [ "sts:AssumeRole", "sts:GetFederationToken" ], 
"Resource": "arn:aws:iam::AccountA:role/PutItem" }, 

{ "Effect": "Allow", 
"Action": [ "sts:DecodeAuthorizationMessage", "sts:GetAccessKeyInfo", "sts:GetCallerIdentity" ], 
"Resource": "*" } ]
 }

账户 B 政策:

{ 
"Version": "2012-10-17", 
"Statement": [ { 
"Sid": "VisualEditor0", 
"Effect": "Allow", 
"Action": [ "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:UpdateTable" ], 
"Resource": "arn:aws:dynamodb:region:accB:table/table name" },

{ 
"Sid": "VisualEditor1", 
"Effect": "Allow", 
"Action": "dynamodb:*", 
"Resource": "*" } ] 
}

标签: amazon-web-servicesamazon-ec2amazon-dynamodbamazon-iamaws-sdk-java-2.0

解决方案


推荐阅读