У меня есть две учетные записи 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": "*" } ]
}