Динамическая политика разрешений для доступа к очереди sqs на основе имени
Я хочу создать динамическую политику разрешений с заменой атрибутов, которая разрешает доступ к соответствующей очереди клиента (указана как часть имени очереди SQS)
Например: имя очереди SQS: индивидуальная-очередь-${insert-attribute-by-customer-name}
Я создал роль IAM для предоставления доступа в политике доступа sqs с именем: generic-sqs-access-role-dynamic-attributes
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"sqs:DeleteMessage",
"sqs:ReceiveMessage",
"sqs:SendMessage",
"sqs:GetQueueAttributes"
],
"Resource": [
"arn:aws:sqs:us-west-2:accountID:general-queue-abc",
"arn:aws:sqs:eu-west-2:accountID:individual-queue-${insert-attribute-by-customer-name}"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "sqs:ListQueues",
"Resource": "*"
}
]
}
моя политика доступа к sqs:
{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__owner_statement",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::accountID:root"
},
"Action": "SQS:*",
"Resource": "arn:aws:sqs:eu-west-2:accountID:individual-queue-${insert-attribute-by-customer-name}"
},
{
"Sid": "__sender_statement",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::accountID:role/generic-sqs-access-role-dynamic-attributes" // the role with permission policy as stated above
},
"Action": "SQS:SendMessage",
"Resource": "arn:aws:sqs:eu-west-2:accountID:individual-queue-${insert-attribute-by-customer-name}"
},
{
"Sid": "__receiver_statement",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::accountID:role/generic-sqs-access-role-dynamic-attributes"
},
"Action": [
"SQS:ChangeMessageVisibility",
"SQS:DeleteMessage",
"SQS:ReceiveMessage"
],
"Resource": "arn:aws:sqs:eu-west-2:accountID:individual-queue-${insert-attribute-by-customer-name}"
}
]
}
Но когда я взял на себя роль и протестировал с помощью cloud9, динамическая политика не работает. Те, кто может взять на себя роль
generic-sqs-access-role-dynamic-attributes
имеют доступ ко всем очередям (как к общим, так и к индивидуальным очередям с добавленными к ним именами клиентов)
Я ожидал, что динамические атрибуты в политике ролей IAM смогут ограничивать на основе имени очереди, которое заменит имя клиента.
т.е. клиент-а может получить доступ только к arn:aws:sqs:eu-west-2:accountID:индивидуальная-очередь-клиент-а
customer-b может получить доступ только к arn:aws:sqs:eu-west-2:accountID:individual-queue-customer-b
но они не могут получить доступ к очереди друг друга
Я пробовал с условиями, но не повезло.
Что здесь пошло не так? Это проблема моей политики IAM или политики доступа SQS?
Благодарность
1 ответ
у меня так работает
2 разные политики IAM, отличающиеся от указанной выше политики IAM — 1 с ресурсом только общей очереди, 1 очередь для конкретного клиента
В политике доступа SQS я добавил подстановку атрибутов в отдельной очереди.
{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__owner_statement",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::accountID:root"
},
"Action": "SQS:*",
"Resource": "arn:aws:sqs:eu-west-2:accountID:individual-queue-${insert-attribute-by-customer-name}"
},
{
"Sid": "__sender_statement",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::accountID:role/general-access-role"
},
"Action": "SQS:SendMessage",
"Resource": "arn:aws:sqs:eu-west-2:accountID:individual-queue-${insert-attribute-by-customer-name}"
},
{
"Sid": "__receiver_statement",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::accountID:role/general-access-role"
},
"Action": [
"SQS:ChangeMessageVisibility",
"SQS:DeleteMessage",
"SQS:ReceiveMessage"
],
"Resource": "arn:aws:sqs:eu-west-2:accountID:individual-queue-${insert-attribute-by-customer-name}"
}
]
}