AWS Lambda からの KMSAccessDeniedException エラーを解決するにはどうすればよいですか?
最終更新日: 2021 年 11 月 15 日
AWS Lambda 関数から KMSAccessDeniedException エラーが返されます。この問題をトラブルシューティングするにはどうすればよいですか?
簡単な説明
エラーメッセージに基づいて、AWS Identity and Access Management (IAM) アイデンティティの AWS Key Management Service (AWS KMS) 許可を更新します。
重要: AWS KMS キーと IAM ロールが別々の AWS アカウントに属している場合は、IAM ポリシーと KMS キーポリシーの両方を更新する必要があります。
AWS KMS キーとポリシー管理の詳細については、AWS managed KMS keys and customer managed keys を参照してください。
解決方法
注: AWS Command Line Interface (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
「KMS 例外: UnrecognizedClientExceptionKMS メッセージ」エラーを解決するには
通常、次のエラーは、関数の実行ロールが削除され、同じ名前を使用して異なるプリンシパルで再作成された場合に発生します。
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 KMS key settings. KMS Exception: UnrecognizedClientExceptionKMS Message: The security token included in the request is invalid.
このエラーを解決するには、次の操作を実行して、関数の実行ロールの AWS KMS の許可をリセットする必要があります。
注: Lambda 関数を作成および更新する IAM ユーザーには、KMS キーを使用するための許可が必要です。
1. 次の AWS CLI コマンドを実行して、関数の現在の実行ロールと KMS キーの Amazon リソースネーム (ARN) を取得します。
$ 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 を一時的な KMS キー ARN に置き換えてください。デフォルトのサービスキーを使用するには、kms-key-arn パラメータを "" に設定します。
$ aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn temporaryValue
その後、次のコマンドを実行して、関数の KMS キーを元の KMS キーの ARN に更新し直します。
重要: originalValue を元の KMS キーの ARN に置き換えてください
$ aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn originalValue
詳細については、Key policies in AWS KMS を参照してください。
「KMS 例外: AccessDeniedException KMS メッセージ」エラーを解決するには
次のエラーは、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" を KMS キー ARN に置き換えてください。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "your-KMS-key-arn"
}
]
}
手順については、ユースケースに基づいて、ユーザーへの許可の追加 (コンソール) または ロールの許可ポリシーの変更 (コンソール) を参照してください。
「実行するための権限が付与されていません」というエラーを解決するには
次のエラーは、IAM アイデンティティに 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 アイデンティティや関数の実行ロールに KMS の許可は必要ありません。
これらの種類のエラーを解決するには、IAM ユーザーまたはロールに以下のアクションを実行するために必要な許可が付与されていることを確認します。
手順については、ユースケースに基づいて、ユーザーへの許可の追加 (コンソール) または ロールの許可ポリシーの変更 (コンソール) を参照してください。
カスタマーマネージド KMS キーへのアクセスに必要な許可を付与する IAM ポリシーステートメントの例
重要: [Resource] (リソース) の値は "*" である必要があります。kms:ListAliases アクションは、低レベルの許可をサポートしていません。また、必ず "your-kms-key-arn" を KMS キーの ARN に置き換えてください。
"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": "*"
}
]