Динамическая политика разрешений для доступа к очереди 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}"
    }
  ]
}
Другие вопросы по тегам