首页 > 解决方案 > AWS Lambda 的 KMS 解密权限

问题描述

我无法解决,文档也不是很有帮助。

我有一个需要使用 KMS 解密值的 lambda。我正在使用 sam 来部署我的 lambda。最初我尝试添加策略声明

            - Effect: Allow
              Action:
                - kms:Decrypt
              Resource:
                - 'arn:aws:kms:us-west-2:<account>:key/<key>' 

但这不起作用,因为(据我了解)我需要告诉 KMS 该资源允许执行此操作。我试图通过创建一个 IAM 角色来解决此问题,我可以将其附加到一个 lambda 资源,该资源是 AWSLambdaBasicExecutionRole,并带有我的密钥策略。

创建我的新角色后,尝试添加关键用户时它不会显示在 KMS 中,尽管其他角色会显示。我在以 IAM 用户身份登录控制台时创建了角色,但我的角色有一个包含根账户 ID 的 arn。

如果 sam/cloudformation 将我的资源 arn 添加到 KMS 密钥策略中,aws sam 对 KMS 没有任何了解,我宁愿通过 iam 中的角色来完成。

编辑:运行时我得到的错误是

{"errorType":"AccessDeniedException","errorMessage":"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.","code":"AccessDeniedException","message":"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."

我使用的值keyaskey-id在 KMS 控制台中被称为。

标签: aws-lambdaaws-kms

解决方案


  1. 检查 lambda 函数是否在 Key 所在的同一区域运行。
  2. 你能检查一下策略的语法吗?它应该类似于下面的示例:
      Policies:
        - KMSDecryptPolicy:
            KeyId: 'arn:aws:kms:us-west-2:<account>:key/<key>'
  1. 检查您机器中的 SAM CLI 版本:)

推荐阅读