我有一个事件总线,并创建了一个事件规则,将事件转发到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"]
kms:Decrypt
,因为它所需做的仅是加密消息并将其放入队列中,这对我来说毫无意义。但是,在我的测试中,拥有kms:Decrypt
确实非常重要。 - Nicaws:SourceArn
总是失败的,因此如果您遇到问题,请尝试从KMS密钥策略中删除条件块。 - Nic