任何CDK示例如何允许lambda发布到加密的SNS主题?

时间:2020-01-02 17:48:56

标签: aws-cdk

我正在尝试查看如何使用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

1 个答案:

答案 0 :(得分:1)

最简单的答案是添加 snssqskey.grantEncryptDecrypt(myLambda);