这是我的场景:
- 有两个 aws 账户 -
A
和B
。 - 我有一个 KMS key
K
,用于保护账户A
和区域us-east-1
中的 SQS 队列。 - 我在账户
B
和区域us-west-2
中有一个 SNS 主题。 - 帐户
A
中的我的 SQS 队列已订阅帐户B
中的主题。 - 我的 KMS key 的资源策略当前允许 SNS 主题执行加密/解密。我正在为我的应用程序使用 AWS CDK。以下是设置这些权限的代码行:
encryptionMasterKey.addToResourcePolicy(new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: ["kms:Create*",
"kms:Describe*",
"kms:Enable*",
"kms:List*",
"kms:Put*",
"kms:Update*",
"kms:Revoke*",
"kms:Disable*",
"kms:Get*",
"kms:Delete*",
"kms:ScheduleKeyDeletion",
"kms:CancelKeyDeletion",
"kms:GenerateDataKey",
"kms:TagResource",
"kms:UntagResource"],
resources: ["*"],
principals: [new iam.AccountPrincipal("<account B id>")]
}));
现在,这是我的观察:
- 如果我不加密 SQS 队列,我的 SNS 主题就能够将消息传递到我的队列。
- 但是,如果我使用 KMS key
K
在队列上启用 SSE 加密,SNS 主题将失败并显示KMS.AccessDeniedException
。
出于业务原因,我需要能够加密我的队列。如何允许我的 SNS 主题访问 KMS key ?
最佳答案
除了 AWS 账户主体之外,您还需要有一个策略来授予 Amazon SNS 服务主体使用 KMS key 的权限。
{
"Sid": "Allow access for SNS Service Principal",
"Effect": "Allow",
"Principal": {
"Service": "sns.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey*",
"kms:Decrypt"
],
"Resource": "*"
}
您还可以找到有关 setup here 的更详细的帖子.
关于amazon-web-services - 我可以从不同的 AWS 区域的不同账户解密 KMS key 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69890535/