AWS Lambda からの「KMSAccessDeniedException」エラーを解決するにはどうすればよいですか?

所要時間3分
0

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 keys」を参照してください。

解決方法

注: AWS Command Line Interface (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

「KMS Exception: UnrecognizedClientExceptionKMS Message」(KMS 例外: UnrecognizedClientExceptionKMS メッセージ) エラーを解決するには

通常、次のエラーは、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 コマンドを実行して、関数の現在の実行ロールと AWS KMS キーの Amazon リソースネーム (ARN) を取得します。

注: 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 例外: 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" を 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 へのアクセスは許可されていません) エラーを解決するには

次のエラーは、AWS Secrets Manager シークレットを取得するための許可が IAM エンティティにないことを示しています。

Access to KMS is not allowed (Service: AWSSecretsManager; Status Code: 400; Error Code: AccessDeniedException; Request ID: 123a4bcd-56e7-89fg-hij0-1kl2m3456n78)

次の AWS KMS API アクションを実行するために必要な許可が IAM ユーザーまたはロールにあることを確認してください。

詳細については、「暗号化された AWS Secrets Manager シークレットへのアクセス時に発生する問題を解決するにはどうすればよいですか?」を参照してください。


関連情報

AWS Lambda からの HTTP 502 および HTTP 500 ステータスコード (サーバー側) エラーを解決する方法を教えてください

Lambda 関数が失敗する場合のトラブルシューティング方法を教えてください

AWS公式
AWS公式更新しました 2年前
コメントはありません