我正在尝试查看如何使用lambda发布到加密的SNS主题。
该主题由KMS管理,并且密钥与lambda(和该主题)位于同一堆栈中,例如
const snssqskey = new kms.Key(this, 'SQSSNSKey', {
enableKeyRotation: true,
description: "sqssnskey"
});
我已经通过Web ui和
设置了加密const mainTopic = new sns.Topic(this, 'mainTopic');,
{
masterKey: snssqskey,
});
没有加密,一切都很好,但是有了它,我得到一个auth错误,该错误指出lambda无法访问密钥(即使所有密钥都在同一堆栈/ region中)。 SQS队列可以使用以下命令高兴地订阅它:
encryption: sqs.QueueEncryption.KMS_MANAGED,
encryptionMasterKey: snssqskey
因此密钥等有效。但是,最近尝试了各种政策:
const snspubpolicy = new iam.PolicyStatement({
resources: [snssqskey.keyArn],
actions: ['kms:Decrypt', 'kms:Encrypt', 'kms:GenerateDataKey*', 'kms:ReEncrypt*'],
effect: iam.Effect.ALLOW,
})
TestSendLambda.addToRolePolicy(snspubpolicy);
(尝试了[*]的资源)。我根本无法让lambda超过它拒绝的快速速度,原因是lambda无法访问该密钥,并显示以下错误:
KMSAccessDenied:密文指的是该区域不存在,不存在或者不允许您访问的客户主密钥。
TIA
答案 0 :(得分:1)
最简单的答案是添加
snssqskey.grantEncryptDecrypt(myLambda);