Динамодб Кросс-аккаунт put_item - PullRequest
0 голосов
/ 22 октября 2019

У меня есть две учетные записи AWS (учетная запись A и учетная запись B). Учетная запись A имеет экземпляр EC2, и этот экземпляр хочет поместить элемент на динамическую базу данных, расположенную в учетной записи B.

Поскольку это доступ с нескольких учетных записей, я создал роль IAM в учетной записи B, чтобы разрешить учетную запись Aсделать put_item, роль IAM в учетной записи A для принятия этой роли и присоединения роли IAM к экземпляру EC2

Когда я запускаю свою программу, я получаю сообщение об ошибке, в котором говорится, что я пытаюсь использовать роль предположенияположить элемент в таблицу, которая в той же учетной записи. (в моем коде я только что разделил имя таблицы учетной записи B)

Кажется, что экземпляр не понимает, что таблица находится на учетной записи B, даже если у меня есть настройка предположения. Что мне здесь не хватает?

Я также проверил, что могу поместить элемент с помощью AWS CLI (после выполнения вызова STS).

Есть ли какой-нибудь Java API, который я могу указать, какой DynamodBarn, на который я хочу поместить элемент?

Сообщение об ошибке:

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