AWS Lambda 関数から、「KMS Exception」、「You are not authorized to perform」、または「Access to KMS is not allowed」というエラーが返されます。
解決策
エラーメッセージに応じて、AWS Identity and Access Management (IAM) ID の AWS Key Management Service (AWS KMS) に対するアクセス許可を更新します。AWS KMS キーと IAM ロールが異なる AWS アカウントに属している場合は、IAM ポリシーと AWS KMS キーポリシーの両方を更新する必要があります。
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「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 アクセスが拒否されたため、Lambda は環境変数を復号化できませんでした。関数の AWS KMS キー設定を確認してください)KMS Exception: UnrecognizedClientExceptionKMS Message: The security token included in the request is invalid (リクエストに含まれるセキュリティトークンが無効です)」
このエラーを解決するには、関数の実行ロールで AWS KMS 許可をリセットする必要があります。
注: Lambda 関数を作成および更新する IAM ユーザーには、AWS KMS キーを使用するためのアクセス許可が必要です。
- 関数の現在の実行ロールの Amazon リソースネーム (ARN) と AWS KMS キーを取得するには、次の get-function-configuration コマンドを実行します。
aws lambda get-function-configuration --function-name your-function-name
注: yourFunctionName は、実際の関数名に置き換えます。
- 次のいずれかを実行して AWS KMS アクセス許可をリセットします。
次の update-function-configuration コマンドを実行し、関数の実行ロールを別の一時的な値に更新します。
aws lambda update-function-configuration --function-name yourFunctionName --role temporaryValue
注: temporaryValue は、一時的実行ロールの ARN に置き換えます。
関数の実行ロールを元の実行ロールに更新するには、次の update-function-configuration コマンドを実行します。
aws lambda update-function-configuration --function-name yourFunctionName --role originalValue
注: originalValue は、元の実行ロールの ARN に置き換えます。
または、
次の update-function-configuration コマンドを実行し、関数の AWS KMS キーを別の一時的な値に更新します。
aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn temporaryValue
注: temporaryValue は、一時的 AWS KMS キーの ARN に置き換えます。デフォルトのサービスキーを使用するには、kms-key-arn パラメータを "" に設定します。
関数の AWS KMS キーを元の AWS KMS キーの ARN に戻すには、次の update-function-configuration コマンドを実行します。
aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn originalValue
注: originalValue は、元の AWS KMS キーの ARNに置き換えます。
「KMS Exception: AccessDeniedException KMS Message」エラーを解決する
次のエラーは、IAM ID に 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 ユーザーまたはロールに次のポリシーステートメントを追加します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "your-KMS-key-arn"
}
]
}
注: your-KMS-key-arn は、実際の AWS KMS キーの ARN に置き換えます。
手順については、「ユーザーにアクセス許可を追加する (コンソール)」を参照してください。
「You are not authorized to perform」エラーを解決する
次のエラーは、IAM ID に 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 ID または関数の実行ロールに AWS KMS アクセス許可は必要ありません。
この種類のエラーを解決するには、IAM ユーザーまたはロールに、次の AWS KMS API アクションを実行するのに必要なアクセス許可があることを確認します。
手順については、「ユーザーにアクセス許可を追加する (コンソール)」を参照してください。
カスタマーマネージド AWS KMS キーへのアクセスに必要なアクセス許可を付与する IAM ポリシーステートメントの例
{
"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": "*"
}
]
}
注: Resource の値は "*" である必要があります。kms:ListAliases アクションは低レベルのアクセス許可をサポートしていません。your-kms-key-arn は、実際の AWS KMS キーの ARN に置き換えます。
「Access to KMS is not allowed」エラーを解決する
次のエラーは、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 アクションを実行するのに必要なアクセス許可があることを確認します。
詳細については、「暗号化された Secrets Manager シークレットを取得しようとすると発生する、AWS KMS キーアクセスエラーを解決する方法を教えてください」を参照してください。
関連情報
AWS Lambda が返す HTTP 502 および HTTP 500 ステータスコード (サーバー側) エラーを解決する方法を教えてください
Lambda 関数のエラーをトラブルシューティングする方法を教えてください