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 Exception: UnrecognizedClientExceptionKMS Message: The security token included in the request is invalid."
このエラーを解決するには、関数の実行ロールで AWS KMS 許可をリセットする必要があります。
注: Lambda 関数を作成および更新する IAM ユーザーには、AWS KMS キーを使用するためのアクセス許可が必要です。
- 次の get-function-configuration コマンドを実行し、関数の現在の実行ロールの Amazon リソースネーム (ARN) と AWS KMS キーを取得します。
aws lambda get-function-configuration --function-name your-function-name
注: your-function-name を関数名に置き換えてください。
- 次の update-function-configuration コマンドを実行し、関数の実行ロールを別の一時的な値に更新します。
aws lambda update-function-configuration --function-name yourFunctionName --role temporary-value
注: temporary-value を一時的な実行ロールの ARN に置き換えてください。
- 次の update-function-configuration コマンドを実行し、関数の実行ロールを元の実行ロールに更新します。
aws lambda update-function-configuration --function-name yourFunctionName --role originalValue
注: originalValue を元の実行ロールの 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 コンソールを使用して 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 アクションを実行するのに必要なアクセス許可があることを確認します。
IAM ユーザーまたはロールに前述のアクセス許可がない場合は、IAM コンソールを使用してアクセス許可を追加します。
カスタマーマネージド 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 アクションを実行するために必要なアクセス許可があることを確認してください。
IAM ユーザーまたはロールに前述のアクセス許可がない場合は、IAM コンソールを使用してアクセス許可を追加します。
詳細については、「暗号化された Secrets Manager シークレットを取得しようとすると発生する、AWS KMS キーアクセスエラーを解決する方法を教えてください」を参照してください。
関連情報
AWS Lambda からの HTTP 502 および HTTP 500 ステータスコード (サーバー側) エラーを解決する方法を教えてください。
Lambda 関数が失敗する場合のトラブルシューティング方法を教えてください。