Чтобы проверить эту ситуацию, я сделал следующее:
В учетной записи A:
- Создан пользователь-1
- Создан ключ KMS
- Предоставил мне разрешение на использование ключа, но не User-1
- Создал очередь в Account-A, активировал SSE и выбрал новый ключ
- Предоставил User-1 the
AmazonSQSFullAccess
политика разрешений
Затем я выполнил команду от имени пользователя-1 для отправки сообщения в очередь:
aws sqs send-message --queue-url https://sqs.ap-southeast-2.amazonaws.com/123456789012/my-queue --message-body foo --profile user-1
Ответ был:
Произошла ошибка (KMS.AccessDeniedException) при вызове операции SendMessage: Пользователь: arn: aws: iam :: 123456789012: пользователь / пользователь-1 не авторизован для выполнения: kms: GenerateDataKey на ресурсе: arn: aws: kms: ap-southeast-2: 123456789012: ключ / xxx (Служба: AWSKMS; Код состояния: 400; Код ошибки: AccessDeniedException; Идентификатор запроса: xxx)
Таким образом, это показывает, что пользователю должно быть предоставлено разрешениеиспользовать KMS при отправке сообщения в очередь, по-видимому, на kms:GenerateDataKey
.Я предполагаю, что каждое сообщение шифруется отдельно с помощью уникального ключа, который генерируется KMS.
Затем я предоставил разрешение Пользователю-1 на использование ключа KMS, и команда успешно выполнена.Таким образом, он работает внутри той же учетной записи .
Затем в учетной записи-2:
- Создан пользователем-2
- Предоставлено
AmazonSQSFullAccess
permissions
Когда я снова запустил команду с учетными данными пользователя-2, я получил:
Произошла ошибка (AccessDenied) при вызове операции SendMessage: Доступ кресурс https://ap -southeast-2.queue.amazonaws.com / запрещен.
Ожидается, что пользователь-2 находится в другой учетной записи (Account-2).
Затем я пошел в очередь SQS в учетной записи 1 и добавил разрешение для пользователя 2, предоставив ARN пользователя 2.
Я снова выполнил команду и получил знакомое:
Произошла ошибка (KMS.AccessDeniedException) при вызове операции SendMessage: null (Служба: AWSKMS; Код состояния: 400; Код ошибки: AccessDeniedException; Идентификатор запроса: xxx)
Обратите внимание, что в сообщении упоминается ASKMS
.
Затем я обновил ключ KMS, чтобы разрешить arn:aws:iam::<Account-2>:root
как Внешняя учетная запись .
Это все равно не помогло.Оказалось, что я должен был добавить некоторые разрешения типа kms:*
для User-2.(Слишком много разрешений, но я становился ленивым!)
Это, затем сработало.
Затем я удалил разрешение KMS Внешняя учетная запись , и оно все еще работало.
Итак, кажется, что:
- Пользователю-2 в учетной записи-2 необходимы разрешения для вызова SQS и KMS
- Очередь SQS в учетной записи-1 требует разрешения для разрешенияПользователь-2 для использования очереди
Вы можете спросить их, действительно ли они , действительно хотят использовать ключ KMS!:)