如何解决来自 AWS Lambda 的“KMSAccessDeniedException”错误?
我的 AWS Lambda 函数返回“KMSAccessDeniedException”错误。
简短描述
根据错误消息更新 AWS Identity and Access Management(IAM)身份的 AWS Key Management Service(AWS KMS)权限。
重要提示:如果 AWS KMS 密钥和 IAM 角色属于不同的 AWS 账户,则必须更新 IAM 策略和 AWS KMS 密钥策略。
有关 AWS KMS 密钥和策略管理的更多信息,请参阅 AWS KMS 密钥。
解决方案
注意:如果您在运行 AWS Command Line Interface (AWS CLI) 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
解决“KMS Exception: UnrecognizedClientExceptionKMS Message”错误
以下错误通常在以下情况下发生:当删除 Lambda 函数的执行角色,然后再使用相同名称和不同委托人重新创建时
Calling the invoke API action failed with this message: Lambda was unable to decrypt the environment variables because KMS access was denied. Please check the function's AWS KMS key settings. KMS Exception: UnrecognizedClientExceptionKMS Message: The security token included in the request is invalid.
要解决该错误,您必须通过执行以下操作为函数的执行角色重置 AWS KMS 授权:
**注意:**创建和更新 Lambda 函数的 IAM 用户必须获得使用 AWS KMS 密钥的权限。
1. 通过运行以下 AWS CLI 命令获取函数当前执行角色的 Amazon Resource Name(ARN)和 AWS KMS 密钥:
**注意:**将 yourFunctionName 替换为函数的名称。
$ aws lambda get-function-configuration --function-name yourFunctionName
2. 通过执行以下操作之一重置 AWS KMS 授权:
通过运行以下 update-function-configuration 命令将函数的执行角色更新为不同的临时值:
**重要提示:**请将 temporaryValue 替换为临时执行角色 ARN。
$ aws lambda update-function-configuration --function-name yourFunctionName --role temporaryValue
然后,通过运行以下命令将函数的执行角色更新回原始执行角色:
**重要提示:**请将 originalValue 替换为原始执行角色 ARN。
$ aws lambda update-function-configuration --function-name yourFunctionName --role originalValue
-或者-
通过运行以下 update-function-configuration 命令将函数的 AWS KMS 密钥更新为不同的临时值:
**重要提示:**请将 temporaryValue 替换为临时 AWS KMS 密钥 ARN。要使用默认服务密钥,请将 kms-key-arn 参数设为 ""。
$ aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn temporaryValue
然后,通过运行以下命令将函数的 AWS KMS 密钥更新回原始 AWS KMS 密钥的 ARN:
**重要提示:**请将 originalValue 替换为原始 AWS KMS 密钥 ARN。
$ aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn originalValue
有关更多信息,请参阅 AWS KMS 中的密钥策略。
解决“KMS Exception: AccessDeniedException KMS Message”错误
以下错误指示 IAM 身份没有执行 kms:Decrypt API 操作所需的权限:
Lambda was unable to decrypt your environment variables because the KMS access was denied. Please check your KMS permissions. KMS Exception: AccessDeniedException KMS 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.
要解决该错误,请向 IAM 用户或角色添加以下策略语句:
**重要提示:**请将 "your-KMS-key-arn" 替换为 AWS KMS 密钥 ARN。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "your-KMS-key-arn" } ] }
有关说明,请根据您的使用案例参阅向用户添加权限(控制台)或修改角色权限策略(控制台)。
解决“You are not authorized to perform”(您没有执行权限)错误
以下错误指示 IAM 身份没有访问 AWS KMS 密钥所需的任何一项权限:
You are not authorized to perform: kms:Encrypt.
You are not authorized to perform: kms:CreateGrant.
User: user-arn is not authorized to perform: kms:ListAliases on resource: * with an explicit deny.
**注意:**如果使用默认密钥策略,则 IAM 身份或函数的执行角色无需 AWS KMS 权限。
要解决这些类型的错误,请验证您的 IAM 用户或角色是否具有执行以下 AWS KMS API 操作所需的权限:
有关说明,请根据您的使用案例参阅向用户添加权限(控制台)或修改角色权限策略(控制台)。
用于授予访问客户托管 AWS KMS 密钥所需权限的示例 IAM 策略语句
**重要提示:**Resource 值必须为 "*"。kms:ListAliases 操作不支持低级别权限。另外,请确保将 "your-kms-key-arn" 替换为 AWS KMS 密钥 ARN。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:CreateGrant" ], "Resource": "your-kms-key-arn" }, { "Sid": "statement2", "Effect": "Allow", "Action": "kms:ListAliases", "Resource": "*" } ] }
解决“Access to KMS is not allowed”(不允许访问 KMS)错误
以下错误表明 IAM 实体无权获取 AWS Secrets Manager 密钥:
Access to KMS is not allowed (Service: AWSSecretsManager; Status Code: 400; Error Code: AccessDeniedException; Request ID: 123a4bcd-56e7-89fg-hij0-1kl2m3456n78)
确保您的 IAM 用户或角色拥有执行以下 AWS KMS API 操作所需的权限:
有关更多信息,请参阅如何解决访问加密的 AWS Secrets Manager 密钥时遇到的问题?
相关信息
相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 10 个月前
- AWS 官方已更新 9 个月前