AWS: перенаправить событие моста событий в зашифрованный SQS (управляемый ключ Amazon)

#amazon-web-services #amazon-sqs #aws-event-bridge

#amazon-веб-сервисы #amazon-sqs #aws-event-bridge

Вопрос:

У меня есть шина событий, и я создал правило событий, которое перенаправляет события в очередь SQS. Теперь я включил шифрование для своей очереди, используя ключ, управляемый Amazon по умолчанию (псевдоним / aws / sqs).

После включения шифрования события больше не пересылаются. Исследуя документы AWS, я смог найти только информацию об использовании CMK для шифрования, но никакой информации об управляемом ключе Amazon.

Я предполагаю, что это проблема с разрешением, но не уверен. Это мое правило событий и политика доступа

   queueCreateInvoiceEvent:
    Type: AWS::Events::Rule
    DependsOn: [myQueue]
    Properties:
      Description: Forward INVOICE_CREATED event to SQS queue
      EventBusName: ${self:custom.eventBus.name}
      EventPattern: { "detail-type": ["INVOICE_CREATED"] }
      Name: ${self:service.name}-${self:provider.stage}-buffer-invoice-created-event
      State: ENABLED
      Targets:
        - Id: myQueue
          Arn:
            Fn::GetAtt: [myQueue, Arn]


  createReceiptQueueAccessPolicy:
    Type: AWS::SQS::QueuePolicy
    DependsOn: [queueCreateInvoiceEvent, myQueue]
    Properties:
      Queues:
        - { Ref: createReceiptQueue }
      PolicyDocument:
        Id: EventBridgeSqsAccessPolicy
        Version: "2012-10-17"
        Statement:
          - Sid: Allow-User-SendMessage
            Effect: Allow
            Principal:
              Service: "events.amazonaws.com"
            Action:
              - sqs:SendMessage
            Resource:
              - Fn::GetAtt: ["myQueue", "Arn"]
            Condition:
              ArnEquals:
                aws:SourceArn:
                  - Fn::GetAtt: ["queueCreateInvoiceEvent", "Arn"]
  

Ответ №1:

Согласно странице устранения неполадок EventBridge, ваша политика ключа KMS должна разрешать EventBridge доступ к ключу:

 {
    "Sid": "Allow EventBridge to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": "events.amazonaws.com"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
    ],
    "Resource": "*"
}
  

Комментарии:

1. Для меня не имеет смысла, зачем EventBridge нужен kms:Decrypt , когда все, что ему нужно сделать, это зашифровать сообщение и поместить его в очередь. Но да, в моем тестировании наличие kms:Decrypt действительно важно здесь.

2. Я также заметил, что попытка тестирования aws:SourceArn с использованием блока условий всегда приводила к сбою, поэтому, если у вас возникли проблемы, попробуйте удалить блоки условий из политики ключей KMS.

Ответ №2:

Добавление к тому, что было сказано выше, но с немного более подробной информацией. С сегодняшнего дня (2022-03-04) вам необходимо иметь следующее, чтобы разрешить EventBridge отправлять в зашифрованную очередь SQS. Из документов AWS https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html#sqs-what-permissions-for-sse

Несколько сервисов AWS действуют как источники событий, которые могут отправлять события в очереди Amazon SQS. Чтобы разрешить этим источникам событий работать с зашифрованными очередями, необходимо создать управляемый клиентом ключ KMS и добавить разрешения в политику ключей для службы, чтобы использовать требуемые методы API AWS KMS.

  1. Управляемый клиентом ключ KMS с политикой, разрешающей events.amazonaws.com определенные действия.
  2. Затем очередь SQS должна использовать этот идентификатор ключа KMS для шифрования.

Вот две необходимые части облачной информации.

 # KMS key is required to allow eventbridge to send to encrypted sqs queue
# https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html#sqs-what-permissions-for-sse
KmsKey:
  Type: AWS::KMS::Key
  Properties:
    Description: my-key-name
    KeyPolicy:
      Version: "2012-10-17"
      Statement:
        - Sid: Allow EventBridge access
          Effect: Allow
          Principal:
            Service: events.amazonaws.com
          Action:
            - kms:GenerateDataKey
            - kms:Decrypt
          Resource: '*'

        - Sid: Allow access for Key Administrators
          Effect: Allow
          Principal:
            AWS:
              - !Sub arn:aws:iam::${AWS::AccountId}:role/my-role-name
              - !Sub arn:aws:iam::${AWS::AccountId}:root
          Action:
            - kms:*
          Resource: '*'

EventRuleQueue:
  Type: AWS::SQS::Queue
  Properties:
    QueueName: my-queue-name
    KmsMasterKeyId: !Ref KmsKey
    KmsDataKeyReusePeriodSeconds: 43200 # 12 hours to reduce cost