AWS KMS の復号化エラー「InvalidCiphertextException」をどのように解決できますか?

最終更新日: 2021 年 2 月 15 日

AWS Lambda 暗号化ヘルパーを使用して環境変数の復号を試みたところ、「InvalidCiphertextException」というエラーを受け取りました。AWS Identity and Access Management (IAM) および AWS Key Management Service (AWS KMS) のアクセス権限はすべて正しいです。

簡単な説明

AWS KMS API アクションエラー InvalidCiphertextException は、Lambda が環境変数の暗号化の方法を更新したため、復号リクエストが失敗したことを示します。Lambda は関数名を暗号化コンテキストとして渡し、AWS KMS への暗号化呼び出しを行います。この変更の前に作成された復号関数については、復号のためのコードを更新し、暗号化コンテキストとして Lambda 関数名を渡す必要があります。

解決方法

暗号化コンテキストを使用して特定の SDK の AWS KMS への復号呼び出しでコードを取得するには、次の手順を実行します。

  1. Lambda コンソールを開き、[Functions] (関数) を選択します。
  2. [Function name] (関数名) で、Lambda 関数を選択します。
  3. [Environment variable] (環境変数) で [Edit] (編集) を選択し、[Add environment variable] (環境変数の追加) を選択します。
  4. [Key] (キー) と [Value] (値) を入力し、[Encryption configuration] (暗号化の設定) を展開します。
  5. [Enable helpers for encryption in transit] (転送時の暗号化に使用するヘルパーの有効化) を選択し、[Encrypt] (暗号化) を選択します。
  6. [Decrypt secret snippet] (シークレットスニペットを復号) を展開し、次のようなスニペットをコピーして貼り付けます。
DECRYPTED = boto3.client('kms').decrypt(
    CiphertextBlob=b64decode(ENCRYPTED),
    EncryptionContext={'LambdaFunctionName': os.environ['AWS_LAMBDA_FUNCTION_NAME']}
)['Plaintext'].decode('utf-8')

このコードスニペットを使用して、暗号化ヘルパーで暗号化された新しい環境変数を復号します。

古い環境変数を再暗号化して、新しい環境変数で動作するようにしてください。

詳細については、「AWS Lambda 環境変数の使用」をご参照ください。