0

2 つの AWS アカウント (アカウント A とアカウント B) があります。アカウント A には EC2 インスタンスがあり、そのインスタンスはアカウント B にある dynamodb にアイテムをプットしようとしています。

クロスアカウント アクセスなので、アカウント B に IAM ロールを作成してアカウント A が put_item を実行できるようにし、アカウント A に IAM ロールを作成してそのロールを引き受け、EC2 インスタンスに IAM ロールをアタッチしました。

プログラムを実行すると、引き受けロールを使用して同じアカウント内のテーブルにアイテムを配置しようとしているというエラー メッセージが表示されます。(私のコードでは、アカウント B のテーブル名を指定しただけです)

ロールを想定していても、インスタンスはテーブルがアカウント B にあることを認識していないようです。ここで何が欠けていますか?

また、AWS CLI を使用してアイテムを配置できることも確認しました (STS 呼び出しを実行した後)。

項目を配置する dynamodb arn を指定できる Java API はありますか?

エラーメッセージ:

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": "*" } ] 
}
4

0 に答える 0