Amazon web services 从KMS加密SNS中的lambda函数发布

Amazon web services 从KMS加密SNS中的lambda函数发布,amazon-web-services,aws-lambda,boto3,amazon-sns,Amazon Web Services,Aws Lambda,Boto3,Amazon Sns,我试图将Python3.8lambda函数发布到KMS加密的SNS主题中。 我的lambda的代码是: import os import boto3 sns = boto3.client('sns') def handler(event, context): message = 'Hello world' response = sns.publish( TopicArn='<My topic ARN>', Message=mes

我试图将Python3.8lambda函数发布到KMS加密的SNS主题中。 我的lambda的代码是:

import os
import boto3

sns = boto3.client('sns')


def handler(event, context):
    message = 'Hello world'

    response = sns.publish(
        TopicArn='<My topic ARN>',
        Message=message,
    )
导入操作系统
进口boto3
sns=boto3.客户端(“sns”)
def处理程序(事件、上下文):
message='Hello world'
响应=sns.publish(
TopicArn=“”,
消息=消息,
)
如果SNS没有加密,代码就可以正常工作

。。。但当我通过以下选项加密SNS主题时:

执行lambda时,我得到以下错误:

{ “errorMessage”:“调用发布操作时发生错误(KmsNotFind):无效的密钥ID aws/sns(服务:AWSKMS;状态代码:400;错误代码:NotFoundException;请求ID:d81234100-9cb4-4af2-0032-c4a568a955f4)”, “errorType”:“KMSNotFoundException”, “stackTrace”:[ “文件\”/var/task/lambda.py\”,第10行,在handler\n boto3.client('sns').publish(\n)中, “File\”/var/runtime/botocore/client.py\”,第316行,在\u api\u调用中\n返回self.\u make\u api\u调用(操作名称,kwargs)\n”, “文件\“/var/runtime/botocore/client.py\”,第626行,在\u make\u api\u调用\n raise error\u类(解析的\u响应,操作\u名称)\n” ] }


我的代码中缺少了什么?

AWS支持人员善意地指出,我在lambda执行角色中缺少KMS权限

Lambda函数执行角色必须具有以下内容才能在SNS加密主题中发布:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:GenerateDataKey",
      "kms:Decrypt"
    ],
    "Resource": "<the-key-with-which-the-topic-is-encrypted>"
  }
}
{
“版本”:“2012-10-17”,
“声明”:{
“效果”:“允许”,
“行动”:[
“kms:GenerateDakey”,
“kms:解密”
],
“资源”:”
}
}

您在整个脚本中的那部分代码发布在哪里?您好@marcin2x4,我没有完全理解您的问题,代码与问题中的代码相同,但只需更改角色策略(因此此JSON不应在python中,而应在AWS策略定义中)