到 KMS_MANAGED 加密 SQS 队列(在 CDK 中)的 S3 事件通知不起作用
Posted
技术标签:
【中文标题】到 KMS_MANAGED 加密 SQS 队列(在 CDK 中)的 S3 事件通知不起作用【英文标题】:S3 Event notification to KMS_MANAGED encrypted SQS queue (in CDK) not working 【发布时间】:2022-01-14 03:55:04 【问题描述】:我有一个使用 CDK 开发的架构,带有一个 S3 存储桶和一个事件通知,它将为每个上传到 S3 的文件向 SQS 发送一条消息。
效果很好。
现在我正在尝试激活加密,我有以下内容:
对于 S3 -> 我已使用 S3_MANAGED 密钥激活加密,一切正常 对于 SQS -> 我已使用 KMS_MANAGED 密钥激活加密,并且没有没有消息发送到 SQS。所以我假设缺少一些权限,但我不知道如何修复它。
是否需要向 SQS 添加缺少的权限才能从 S3 读取?还是允许 S3 向加密的 SQS 发送消息?
【问题讨论】:
【参考方案1】:TL;DR S3 通知不适用于sqs.QueueEncryption.KMS_MANAGED
。使用客户管理的密钥加密队列。
AWS Knowledge Base: Why aren’t Amazon S3 event notifications delivered to an Amazon SQS queue that uses server-side encryption?:
无法修改默认的 AWS 托管 KMS 密钥。您必须使用客户管理的密钥...并向 KMS 密钥添加权限以允许访问指定的服务主体。
这是一个最小的工作示例:
// S3 Notifications to a Encrypted Queue
export class S3SqsStack extends cdk.Stack
constructor(scope: Construct, id: string, props: cdk.StackProps)
super(scope, id, props);
const bucket = new s3.Bucket(this, 'MyBucket',
encryption: s3.BucketEncryption.S3_MANAGED,
);
// https://aws.amazon.com/premiumsupport/knowledge-center/sqs-s3-event-notification-sse/
const key = new kms.Key(this, 'MyCustomerKey',
policy: new iam.PolicyDocument(
statements: [
new iam.PolicyStatement(
actions: ['kms:GenerateDataKey', 'kms:Decrypt'],
resources: ['*'], // avoid circularity by not limiting the resource
principals: [new iam.ServicePrincipal('s3.amazonaws.com')],
),
],
),
);
const queue = new sqs.Queue(this, 'MyQueue',
encryption: sqs.QueueEncryption.KMS,
encryptionMasterKey: key,
);
bucket.addEventNotification(s3.EventType.OBJECT_CREATED, new s3n.SqsDestination(queue));
【讨论】:
以上是关于到 KMS_MANAGED 加密 SQS 队列(在 CDK 中)的 S3 事件通知不起作用的主要内容,如果未能解决你的问题,请参考以下文章