#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.
- Управляемый клиентом ключ KMS с политикой, разрешающей
events.amazonaws.com
определенные действия. - Затем очередь 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