Межсчетовой доступ к AWS SQS с включенным шифрованием на стороне сервера - PullRequest
0 голосов
/ 08 июня 2018

Контекст: существует API, который находится в учетной записи AWS 2, принимает URL SQS в качестве одного из своих входных данных и публикует выходные данные для него.Владелец учетной записи 1 хочет использовать этот API со своей собственной очередью SQS.

У учетной записи 1 есть очередь SQS с включенной SSE-KMS.Владелец учетной записи 1 хочет, чтобы конкретный пользователь IAM в учетной записи 2 мог публиковать в этой очереди SQS.Единственный способ добиться этого, который я знаю, если это:

  1. Добавить идентификатор внешней учетной записи 2 в настройки ключа KMS учетной записи 1
  2. Добавить политику для пользователя IAM учетной записи 2, чтобы разрешитьдоступ к данному ключу KMS

Проблема этого подхода заключается в том, что обеим учетным записям необходимо выполнить действие.Существует ли более простой способ достижения того же результата, когда только владелец аккаунта 1 должен что-то делать и не беспокоить владельца аккаунта 2?

РЕДАКТИРОВАТЬ 1: Когда мы пытаемся выполнить интеграцию безс включенным шифрованием на SQS все работает нормально.Вот как мы знаем, что это проблема KMS, а не политика SQS.Как только мы включаем шифрование SQS, оно начинает отказывать из-за AccessDeniedException

1 Ответ

0 голосов
/ 08 июня 2018

Чтобы проверить эту ситуацию, я сделал следующее:

В учетной записи 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!:)

...