我有两个 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": "*" } ]
}