当前位置: 首页 > 知识库问答 >
问题:

为什么aws lambda收到“AccessDeniedExceptionKMS”错误消息?

曹凯泽
2023-03-14

我刚刚将lambda(使用gitlab runner中的Terraform)部署到一个新的aws帐户。此管道将lambda部署到另一个(dev/test)帐户而没有问题,但是当我尝试部署到我的prod帐户时,我得到以下错误:

我在反复强调这句话,“密文指的是一个客户主密钥,它不存在,在这个地区不存在,或者不允许您访问。”

我已经确认,env vars的加密配置设置为使用默认的aws/lambda密钥而不是客户主密钥。这似乎与客户主密钥错误的语言相矛盾...?

lambda承担的角色确实有一项政策,其中包括两个公里行动:

        "Sid": "AWSKeyManagementService",

        "Action": [

            "kms:Decrypt",

            "kms:DescribeKey"

        ]

通过消除过程,我想知道问题是否在于kms密钥上基于资源的政策方面的不足。查看aws managed下的kms密钥,我发现aws/lambda密钥具有以下密钥策略:

{
    "Version": "2012-10-17",
    "Id": "auto-awslambda",
    "Statement": [
        {
            "Sid": "Allow access through AWS Lambda for all principals in the account that are authorized to use AWS Lambda",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:CreateGrant",
                "kms:DescribeKey"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com",
                    "kms:CallerAccount": "REDACTED"#<-- Account where lambda deployed
                }
            }
        },
        {
            "Sid": "Allow direct access to key metadata to the account",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::REDACTED:root"#<-- Account where lambda deployed
            },
            "Action": [
                "kms:Describe*",
                "kms:Get*",
                "kms:List*",
                "kms:RevokeGrant"
            ],
            "Resource": "*"
        }
    ]
}

这就很让人费解了。任何指针赞赏!

共有1个答案

左丘兴生
2023-03-14

只需删除lambda,然后重新运行管道以重新部署它,就可以解决这个问题。我所能得出的结论是,在第一次部署中有些东西被破坏了。

 类似资料:
  • 问题内容: ABstractMethodError的可能原因是什么? 线程“ pool-1-thread-1”中的异常java.lang.AbstractMethodError: 问题答案: 简单的答案是这样的:一些代码试图调用一个声明的方法。抽象方法没有主体,无法执行。由于您提供的信息很少,因此我无法真正详细说明如何发生这种情况,因为编译器通常会遇到此问题- 如此处所述,这意味着该类必须在运行时

  • 我编写了一个扩展并使用TYPO3 8.7 extbase。当我清除所有缓存时,我的扩展仅在第一次页面访问时工作,第二次页面访问会收到以下错误消息: 无法创建类“Pit\PitExt\Domain\Model\Settings”的空实例,因为它未实现TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface。 问题在哪里?第一次访问它实现了接口,第二次没

  • 异常消息 上下文名称空间元素“component scan”及其解析器类[org.springframework.Context.annotation.ComponentScanBeanDefinitionParser]仅在JDK 1.5及更高版本上可用 Java版本

  • 问题内容: 我正在遵循一个教程来尝试学习如何使用BeautifulSoup。我正在尝试从下载的HTML页面上的URL中删除名称。至此,我的工作非常顺利。 但是当我进入下一部分时 我得到这个错误 问题答案: 这是IDLE和BeautifulSoup对象(子类)之间的错误交互。见问题1757057;已经有一段时间了。 解决方法是先将对象转换为纯unicode值:

  • 问题内容: 如果声明类型为byte或short的变量并尝试对其进行算术运算,则会收到错误“类型不匹配:无法将int转换为short”(或相应的“类型不匹配:不能将int转换为byte”)。 在此示例中,编译错误在第三行。 问题答案: 尽管算术运算符被定义为可以对任何数字类型进行运算,但是根据Java语言规范(5.6.2 Binary Numeric Promotion),字节和short类型的操作

  • 问题内容: 我最近尝试使用sftp访问我的linux机器,在那里我实现了自己的简单外壳。并且我设置了除root用户以外的其他用户默认使用我的shell(通过编辑/ etc / passwd文件)。然后问题出现了,一旦我尝试通过sftp访问,我将收到一条消息:“接收的消息太长:”,我搜索了解决方案,一种解决方案是将该用户的默认shell改回普通的bash shell。我试过了,而且奏效了,问题在于,