CC.*_*CC. 1 amazon-s3 amazon-sqs amazon-web-services amazon-kms aws-cdk
我有一个使用 CDK 开发的架构,其中包含 S3 存储桶和事件通知,该通知将针对每个上传到 S3 的文件向 SQS 发送一条消息。
效果很好。
现在我正在尝试激活加密,并且我有以下内容:
所以我假设缺少一些权限,但我不知道如何修复它。
我是否需要向 SQS 添加缺少的权限才能从 S3 读取数据?或者 S3 是否有权将消息发送到加密的 SQS?
TL;DR S3 通知不适用于sqs.QueueEncryption.KMS_MANAGED. 使用客户管理的密钥来加密队列。
AWS 知识库:为什么 \xe2\x80\x99t Amazon S3 事件通知传送到使用服务器端加密的 Amazon SQS 队列?:
\n\n\n无法修改默认的 AWS 托管 KMS 密钥。您必须使用客户管理的密钥...并向 KMS 密钥添加权限以允许访问指定的服务主体。
\n
这是一个最小的工作示例:
\n// S3 Notifications to a Encrypted Queue\nexport class S3SqsStack extends cdk.Stack {\n constructor(scope: Construct, id: string, props: cdk.StackProps) {\n super(scope, id, props);\n\n const bucket = new s3.Bucket(this, \'MyBucket\', {\n encryption: s3.BucketEncryption.S3_MANAGED,\n });\n\n // https://aws.amazon.com/premiumsupport/knowledge-center/sqs-s3-event-notification-sse/\n const key = new kms.Key(this, \'MyCustomerKey\', {\n policy: new iam.PolicyDocument({\n statements: [\n new iam.PolicyStatement({\n actions: [\'kms:GenerateDataKey\', \'kms:Decrypt\'],\n resources: [\'*\'], // avoid circularity by not limiting the resource\n principals: [new iam.ServicePrincipal(\'s3.amazonaws.com\')],\n }),\n ],\n }),\n });\n\n const queue = new sqs.Queue(this, \'MyQueue\', {\n encryption: sqs.QueueEncryption.KMS,\n encryptionMasterKey: key,\n });\n\n bucket.addEventNotification(s3.EventType.OBJECT_CREATED, new s3n.SqsDestination(queue));\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1372 次 |
| 最近记录: |