从 Lambda 向加密的 SQS 队列发送消息

问题描述

我有一个 AWS Lambda 函数,需要将消息发送到加密的 SQS 队列。有一次,我发现我的 AWS Lambda 函数可以将消息发送到这个加密的 SQS 队列。在我开始工作后,我对权限进行了一些调整,使它们更加具体。然后它突然停止工作,即使在我恢复到非常广泛的权限之后。

现在我总是收到以下错误:

KMS.AccessDeniedException: The ciphertext refers to a customer master key that does not exist,does not exist in this region,or you are not allowed to access.

我的 CMK 具有以下策略,并且只允许使用它:

    {
        "Sid": "Allow specific lambda to use this key","Effect": "Allow","Principal": {
            "Service": "lambda.amazonaws.com"
        },"Action": [
            "kms:Decrypt","kms:GenerateDataKey*"
        ],"Resource": "arn:aws:lambda:XXXXXX:function:XXXXXX"
    }

我编辑了资源,但我对 ARN 进行了三次检查,结果是正确的。

我的 Lambda 函数附加了以下策略:

    {
        "Action": "sqs:*","Resource": "*","Effect": "Allow"
    },{
        "Action": "kms:*",

这难道不足以让我的 Lambda 向这个 SQS 队列发送消息吗?就像我上面提到的那样,这比我试图限制我的 Lambda 上的策略更有效,然后即使在我将其改回之后它也停止工作。

我在这里错过了什么?我不确定我还能改变什么以及为什么它起作用然后它停止工作......


编辑

似乎有效但现在无效的权限:

CMK 政策

{
    "Sid": "Allow AWS Lambda to use this key","Principal": {
        "Service": "lambda.amazonaws.com"
    },"Action": [
        "kms:Decrypt","kms:GenerateDataKey*"
    ],"Resource": "*"
}

Lambda 政策

{
    "Action": "sqs:*","Effect": "Allow"
},{
    "Action": "kms:*","Effect": "Allow"
}

编辑 2

一定有一些我不明白的东西在起作用,因为这无法预测......

我对 CDK 进行了以下更改:

第一次改变:

IAM Statement Changes
┌───┬──────────┬────────┬─────────────────────┬──────────────────────────────────────────────────────────────────┬───────────┐
│   │ Resource │ Effect │ Action              │ Principal                                                        │ Condition │
├───┼──────────┼────────┼─────────────────────┼──────────────────────────────────────────────────────────────────┼───────────┤
│ + │ *        │ Allow  │ kms:GenerateDataKey │ AWS:${lambda---------------------------------------/ServiceRole} │           │
└───┴──────────┴────────┴─────────────────────┴──────────────────────────────────────────────────────────────────┴───────────┘

结果:我可以再次向 SQS 队列发送消息

第二个变化:

IAM Statement Changes
┌───┬──────────┬────────┬─────────────────────┬──────────────────────────────────────────────────────────────────┬───────────┐
│   │ Resource │ Effect │ Action              │ Principal                                                        │ Condition │
├───┼──────────┼────────┼─────────────────────┼──────────────────────────────────────────────────────────────────┼───────────┤
│ - │ *        │ Allow  │ kms:GenerateDataKey │ AWS:${lambda---------------------------------------/ServiceRole} │           │
├───┼──────────┼────────┼─────────────────────┼──────────────────────────────────────────────────────────────────┼───────────┤
│ + │ *        │ Allow  │ kms:*               │ AWS:${lambda---------------------------------------/ServiceRole} │           │
└───┴──────────┴────────┴─────────────────────┴──────────────────────────────────────────────────────────────────┴───────────┘

结果:我无法再向 SQS 队列发送消息?!?为什么?

第三次变化:

IAM Statement Changes
┌───┬──────────┬────────┬─────────────────────┬──────────────────────────────────────────────────────────────────┬───────────┐
│   │ Resource │ Effect │ Action              │ Principal                                                        │ Condition │
├───┼──────────┼────────┼─────────────────────┼──────────────────────────────────────────────────────────────────┼───────────┤
│ - │ *        │ Allow  │ kms:*               │ AWS:${lambda---------------------------------------/ServiceRole} │           │
├───┼──────────┼────────┼─────────────────────┼──────────────────────────────────────────────────────────────────┼───────────┤
│ + │ *        │ Allow  │ kms:GenerateDataKey │ AWS:${lambda---------------------------------------/ServiceRole} │           │
└───┴──────────┴────────┴─────────────────────┴──────────────────────────────────────────────────────────────────┴───────────┘

结果:我仍然无法再向 SQS 队列发送消息?!?这里发生了什么?这是与第一次更改相同的策略状态....

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...