

# AWS Lambda の耐久性のある実行のデータを暗号化する
<a name="durable-encryption"></a>

[AWS Lambda の耐久性のある関数](durable-functions.md)を使用すると、チェックポイントを使用して完了した作業を再生することで、最大 1 年間実行する耐障害性のある複数ステップのアプリケーションを構築できます。

Lambda は、耐久性のある実行の保管中のデータを常に暗号化します。さらに、ローテーション制御、監査の可視性、またはコンプライアンスの目的で関数で独自の AWS KMS カスタマーマネージドキーを設定できます。カスタマーマネージドキーでは、ユーザーが認可したプリンシパルのみが実行データを読み取ることができます。

## 暗号化の仕組み
<a name="durable-encryption-how-it-works"></a>

Lambda の耐久性のある実行は、それが開始したのと同じ KMS キーが存続期間にわたって使用されます。関数のキーを変更または削除した場合、変更後に開始される実行のみに影響します。キーが使用できない場合の耐久性のある実行の動作については、「[カスタマーマネージドキーが使用できない場合](#durable-encryption-key-unavailable)」を参照してください。

カスタマーマネージドキーには、標準の AWS KMS 料金が発生します。料金の詳細については、「[AWS Key Management Service の料金](https://aws.amazon.com/kms/pricing/)」を参照してください。

## 暗号化されるもの
<a name="durable-encryption-what-is-encrypted"></a>

耐久性のある関数でカスタマーマネージドキーを設定すると、Lambda はそのキーを使用して、次の耐久性のある実行の保管中のデータを暗号化します。
+ 各 `Invoke` リクエストで渡す入力ペイロード。
+ `CheckpointDurableExecution` API によって保持されるチェックポイントデータ (ステップ結果、ステップエラー、連鎖呼び出し入力など)。
+ 実行結果とエラー。
+ `SendDurableExecutionCallbackSuccess` と `SendDurableExecutionCallbackFailure` をから送信したコールバック結果とエラー。

**関数レベルと耐久性のある実行のキーは相互に関係ありません。**  
[環境変数](configuration-envvars-encryption.md)、[.zip デプロイパッケージ](encrypt-zip-package.md)、[SnapStart](snapstart-security.md) スナップショットを暗号化する関数レベルの `KMSKeyArn`は、耐久性のある実行データを暗号化する `DurableConfig` の `KMSKeyArn` とは別のものです。一方を設定しても、もう一方が設定されるわけではありません。両方に同じ KMS キーを使用することも、異なる KMS キーを使用することもできます。

## カスタマーマネージドキーの暗号化をセットアップする
<a name="durable-encryption-setup"></a>

耐久性のある関数のカスタマーマネージドキー暗号化の設定は、3 ステップのプロセスです。以下の手順を順に実行します。

### カスタマーマネージドキーを作成する
<a name="durable-encryption-create-key"></a>

耐久性のある関数は、関数と同じ AWS リージョンで対称暗号化 KMS キーをサポートします。クロスリージョンキーはサポートされていません。カスタマーマネージド型の対称キーを作成するには、「**AWS Key Management Service デベロッパーガイド」の[対称暗号化 KMS キーを作成する](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)手順に従います。

### アクセス許可
<a name="durable-encryption-permissions"></a>

AWS KMS アクセス許可は、KMS キーのキーポリシーを介して付与します。

カスタマーマネージドキーを設定するには、関数を作成または更新するプリンシパルに対する AWS KMS アクセス許可が必要です。耐久性のある関数を呼び出す場合、呼び出し元に対する AWS KMS アクセス許可は必要ありません。Lambda はサービスプリンシパルで暗号化を実行します。

#### キーポリシー
<a name="durable-encryption-key-policy"></a>

[キーポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)は、カスタマーマネージドキーへのアクセスを制御します。すべてのカスタマーマネージドキーには、厳密に 1 つのキーポリシーが必要です。キーポリシーでは、`Resource: "*"` はポリシーがアタッチされている KMS キーのみを参照します。アカウントのすべての KMS キーは参照しません。

耐久性のある関数のキーポリシーは、サービスおよび関数 ARN の範囲に応じて、必要な AWS KMS アクションのみを各プリンシパルに付与します。以下のセクションでは、ステートメント、条件、および完全な例について説明します。

**必要なポリシーステートメント**  
ポリシーは、次の機能を付与します。
+ **IAM ユーザーのアクセス許可を有効にする** キーを管理するための無条件アクセスをアカウントルートに付与します。範囲を設定するとキーのローテーション、更新、削除ができなくなるため、このステートメントは条件を使用しません。
+ **このキーを耐久性のある関数に使用することを Lambda に許可します**。Lambda サービスプリンシパル `kms:GenerateDataKey` と `kms:Decrypt` を付与します。
+ **耐久性のある実行のデータを復号することを関数実行ロールに許可します**。状態を読み取って実行を進める実行ロール `kms:Decrypt` を付与します。
+ **このキーを記述することを関数作成者に許可します**。キーが対称であること、および `CreateFunction` または `UpdateFunctionConfiguration` 中にキーが対象であることを Lambda が検証できるように `kms:DescribeKey` を付与します。
+ **このキーを特定の関数に対して検証することを関数作成者に許可します**。`CreateFunction` または `UpdateFunctionConfiguration` 中に Lambda が関数の暗号化コンテキストで主要なアクセス許可とアクセスを検証できるように `kms:GenerateDataKey` と `kms:Decrypt` を付与します。これにより、関数が作成または更新される前に、この特定の関数の呼び出しをキーポリシーが受け入れることが保証されます。
+ **耐久性のある実行のオペレーションを許可します**。`IncludeExecutionData=true`、`GetDurableExecutionState`、`StopDurableExecution`、およびコールバック API での `GetDurableExecution`、`GetDurableExecutionHistory` への呼び出しをオペレーター `kms:Decrypt` に付与します。

ベストプラクティスとして、実行ロール、関数作成者、耐久性のある実行のオペレーターに個別のプリンシパルを使用して、必要な機能だけをそれぞれの ID に付与します。

**推奨される IAM ポリシー条件**  
ポリシーは、以下の条件を使用してアクセスの範囲を絞り込みます。
+ [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service) は、キーの使用を Lambda 経由でルーティングされるリクエストに制限します。これを実行ロール、関数作成者、オペレーターステートメントに適用すると、これらのエンティティは AWS KMS からキーを直接使用できなくなります。
+ [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) と [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) は、[サービス間の混乱した代理問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)から保護します。AWS KMS を呼び出すとき、Lambda は独自のサービス認証情報を使用して、これらの値を転送します。この条件は、Lambda サービスプリンシパルステートメントにのみ適用されます。実行ロール、関数作成者、オペレーターステートメントは、発信元の転送アクセスセッション認証情報 (これらのヘッダーは含まれません) で AWS KMS を呼び出します。
+ [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context) はキーを特定の関数に制限します。耐久性のある実行のデータに対するすべての AWS KMS 呼び出しにおいて、Lambda は、これを暗号化コンテキストに追加します。

次の例は、上記のステートメントと条件を組み合わせています。

**Example 耐久性のある関数のキーポリシー**  

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:root" },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow Lambda to use this key for durable functions",
            "Effect": "Allow",
            "Principal": { "Service": "lambda.amazonaws.com" },
            "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333",
                    "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction",
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
                }
            }
        },
        {
            "Sid": "Allow the function execution role to decrypt durable execution data",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/myDurableFunctionRole" },
            "Action": "kms:Decrypt",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
                }
            }
        },
        {
            "Sid": "Allow the function author to describe this key",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/FunctionAuthor" },
            "Action": "kms:DescribeKey",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com"
                }
            }
        },
        {
            "Sid": "Allow the function author to validate this key for a specific function",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/FunctionAuthor" },
            "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
                }
            }
        },
        {
            "Sid": "Allow durable execution operators",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/DurableExecutionOperator" },
            "Action": "kms:Decrypt",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
                }
            }
        }
    ]
}
```

AWS KMS キーポリシーの詳細については、「AWS Key Management Service デベロッパーガイド**」の「[How to change a key policy](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to)」を参照してください。

### 耐久性のある関数でカスタマーマネージドキーを設定する
<a name="durable-encryption-configure"></a>

`DurableConfig` オブジェクトの `KMSKeyArn` フィールドを使用して、耐久性のある実行のデータのカスタマーマネージドキーを設定します。これは、関数を作成するときに [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html) で設定し、[UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html) で既存の耐久性のある関数で更新します。

------
#### [ Lambda console ]

**既存の耐久性のある関数のカスタマーマネージドキーを設定するには**

1. Lambda コンソールの [[関数]](https://console.aws.amazon.com/lambda/home#/functions) ページを開きます。

1. 耐久性のある関数を選択します。

1. **[設定]** を選択して、左のナビゲーションバーから **[永続実行]** を選択します。

1. **[編集]** を選択します。

1. **[暗号化]** で、**[カスタマーマネージドキーを使用]** を選択し、リストから KMS キーを選択します。

1. **[保存]** を選択します。

------
#### [ AWS CLI ]

**関数の作成時にカスタマーマネージドキーを設定するするには**

次の [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html) の例では、`--durable-config` オプションでカスタマーマネージドキー ARN、および耐久性のある実行のタイムアウトと保持期間を指定します。

```
aws lambda create-function \
  --function-name myDurableFunction \
  --runtime nodejs24.x \
  --handler index.handler \
  --role arn:aws:iam::111122223333:role/myDurableFunctionRole \
  --zip-file fileb://{{function.zip}} \
  --durable-config '{"KMSKeyArn":"{{arn:aws:kms:us-east-1:111122223333:key/key-id}}","ExecutionTimeout":3600,"RetentionPeriodInDays":30}'
```

**既存の耐久性のある関数のカスタマーマネージドキーを設定するには**

[update-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-configuration.html) コマンドを使用します。`--durable-config` はオブジェクト全体を置き換えるため、保持するすべての `DurableConfig` フィールドを含めます。

```
aws lambda update-function-configuration \
  --function-name myDurableFunction \
  --durable-config '{"KMSKeyArn":"{{arn:aws:kms:us-east-1:111122223333:key/key-id}}","ExecutionTimeout":3600,"RetentionPeriodInDays":30}'
```

**耐久性のある関数からカスタマーマネージドキーを削除するには**

`--durable-config` から `KMSKeyArn` を省略します。既存の実行では、開始に使用されたカスタマーマネージドキーが引き続き使用されます。新しい実行では、デフォルトの暗号化が使用されます。

```
aws lambda update-function-configuration \
  --function-name myDurableFunction \
  --durable-config '{"ExecutionTimeout":3600,"RetentionPeriodInDays":30}'
```

------
#### [ AWS CloudFormation ]

`AWS::Lambda::Function` リソースで、`DurableConfig` の`KMSKeyArn` プロパティを設定します。

```
Resources:
  MyDurableFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: myDurableFunction
      Runtime: nodejs24.x
      Handler: index.handler
      Role: !GetAtt MyDurableFunctionRole.Arn
      Code:
        ZipFile: |
          // Your durable function code
      DurableConfig:
        KMSKeyArn: "arn:aws:kms:us-east-1:111122223333:key/key-id"
        ExecutionTimeout: 3600
        RetentionPeriodInDays: 30
```

------

**重要**  
それぞれの耐久性のある実行では、起動時に関数で設定されたカスタマーマネージドキーを使用します。キーの変更または削除は、変更後に開始される実行にのみ影響します。進行中の実行は、完了または失敗するまで、開始に使用したキーを引き続き使用します。

## 耐久性のある実行のデータを読み取る
<a name="durable-encryption-reading-data"></a>

2 つの読み取り API が耐久性のある実行のデータを返します。
+ `GetDurableExecution` は、単一の実行の現在の状態 (入力ペイロード、最新のチェックポイントデータ、結果またはエラー情報など) を返します。
+ `GetDurableExecutionHistory` は、実行によって出力されたイベントの順序付けられたリストを返します。このリストは、チェックポイントの入力と結果、連鎖呼び出しの入力と結果、最終結果が表示されます。

どちらの API も `IncludeExecutionData` リクエストパラメータを受け入れます。`IncludeExecutionData` が `true` の場合、Lambda は発信元の認証情報を使用してカスタマーマネージドキーで `kms:Decrypt` を呼び出します。その後、Lambda は復号された実行データをレスポンスで返します。発信元の ID は、カスタマーマネージドキーに `kms:Decrypt` を持っている必要があります。

`IncludeExecutionData` が `false` の場合、Lambda は AWS KMS の呼び出しや実行データの復号を行わず、レスポンスが `ExecutionDataIncluded` を `false` に設定します。レスポンスには引き続き `DurableConfig` が含まれます。これは実行が使用したカスタマーマネージドキー ARN をエコーします。`IncludeExecutionData` はデフォルトで `false` に設定されるので、メタデータのみを必要とする発信元には AWS KMS アクセス許可は必要ありません。

**例: `IncludeExecutionData=false` を含む `GetDurableExecution` レスポンス**

```
{
    "DurableExecutionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction:execution:exec-abc123",
    "DurableExecutionName": "exec-abc123",
    "FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction",
    "StartTimestamp": 1733256000,
    "Status": "RUNNING",
    "ExecutionDataIncluded": false,
    "DurableConfig": {
        "ExecutionTimeout": 3600,
        "KMSKeyArn": "arn:aws:kms:us-east-1:111122223333:key/key-id",
        "RetentionPeriodInDays": 30
    }
}
```

## 連鎖呼び出し
<a name="durable-encryption-chained-invokes"></a>

耐久性のある関数が連鎖呼び出しを使用して別の耐久性のある関数を呼び出す場合、Lambda は子実行を独立した耐久性のある実行として扱います。この実行には、独自の実行 ID、独自のチェックポイントストリーム、独自のカスタマーマネージドキーがあります。親のカスタマーマネージドキー設定は子のデータには影響せず、子のカスタマーマネージドキー設定は親のデータに影響しません。

**アクセス許可**  
Lambda サービスプリンシパルは、子関数のカスタマーマネージドキーに `kms:GenerateDataKey` と `kms:Decrypt` が必要です。親関数と子関数が別々のカスタマーマネージドキーを使用する場合は、各キーに対するサービスプリンシパルアクセスを個別に付与します。親関数の実行ロールには、子のカスタマーマネージドキーに対するアクセス許可は必要ありません。

**どのキーがどの実行を暗号化したかを特定する**  
`GetDurableExecution` と `ListDurableExecutionsByFunction` は両方とも、各実行を暗号化したカスタマーマネージドキー ARN を返します。これらの API を使用して、親または子の実行が開始したときに有効だったキーを確認します。

## データキーキャッシュ
<a name="durable-encryption-data-key-caching"></a>

AWS KMS のコール量を削減し、サービスの中断時の可用性を改善するために、Lambda はカスタマーマネージドキーから生成されたデータキーを最大 15 分間キャッシュします。キャッシュがウォームの間、Lambda は実行内のオペレーション間とキャッシュウィンドウ中に開始した実行間で同じデータキーを再利用します。

**Cost**  
Lambda はチェックポイントあたり 1 回ではなく、キャッシュウィンドウあたり最大 1 回 `GenerateDataKey` を呼び出すため、実行あたりの AWS KMS コストが低く抑えられます。リクエストレートが高いと、キャッシュされた各データキーを共有する実行の数が増えるため、実行あたりのコストがさらに低下します。請求は、Lambda が実際に行う AWS KMS コールに対して行われます。個々のチェックポイントや読み取りに対する請求は行われません。

**静的安定性**  
データキーは最大 15 分間キャッシュされたままになります。キーの変更は、次回のキャッシュ更新時に有効になります。サービスが長時間中断しても、Lambda はキャッシュから引き続きサービスを提供し、実行中の実行を維持します。

**CloudTrail**  
データキーキャッシュは、CloudTrail の `GenerateDataKey` イベントが実行やチェックポイントよりも少ないことを意味します。イベントの例については、「[耐久性のある関数の KMS キーをモニタリングする](#durable-encryption-monitoring)」を参照してください。

## カスタマーマネージドキーが使用できない場合
<a name="durable-encryption-key-unavailable"></a>

実行が開始されたカスタマーマネージドキーが無効になっている場合、そのキーの削除がスケジュールされている場合、キーのアクセスがキーポリシーで取り消されている場合、実行をさらに進めることはできません。次のチェックポイントで、Lambda は再試行不可能な AWS KMS エラーで実行に失敗します。キーへのアクセスを復元しても、実行は自動的に再開されません。新しい実行を開始する必要があります。

キーが使用できない場合、ペイロードの読み取りと書き込みを行う API も失敗します。次のいずれかの例外が返されます。
+ `KMSAccessDeniedException`: KMS キーへのアクセスが拒否されたため、Lambda は耐久性のある実行のデータを復号できませんでした。
+ `KMSDisabledException`: KMS キーが無効化されているため、Lambda は耐久性のある実行のデータを復号できませんでした。
+ `KMSInvalidStateException`: KMS キーの状態が `Decrypt` に対して無効なため、Lambda は耐久性のある実行のデータを復号できませんでした。
+ `KMSNotFoundException`: KMS キーが見つからなかったため、Lambda は耐久性のある実行のデータを復号できませんでした。

KMS キーへのアクセスを復元すると、これらの読み取り API は既に失敗した実行に対して成功します。失敗した実行は失敗したままです。新しい実行を開始する必要があります。

KMS キーが使用できないときに実行メタデータを検査するには、`IncludeExecutionData=false` で `GetDurableExecution` を呼び出します。これにより、AWS KMS を呼び出すことなく、実行のステータス、タイムスタンプ、`DurableConfig` (KMS キー ARN を含む) が返されます。

Lambda はデータキーをキャッシュするため、キーを無効にしても、その影響が直ちに生じることはありません。詳細については、「[データキーキャッシュ](#durable-encryption-data-key-caching)」を参照してください。

**重要**  
実行中または保持中の実行が依存する KMS キーを削除すると、それらの実行とその履歴は完全に破棄されます。

## 耐久性のある関数の KMS キーをモニタリングする
<a name="durable-encryption-monitoring"></a>

耐久性のある関数でカスタマーマネージドキーを使用する場合、[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) を使用して、Lambda がユーザーに代わって行う AWS KMS コールを追跡できます。AWS KMS イベントの検索に関する一般的なガイダンスについては、「[Searching AWS KMS API activity](https://docs.aws.amazon.com/kms/latest/developerguide/logging-using-cloudtrail.html#searching-kms-ct)」を参照してください。

意図した通りに Lambda がキーを使用していることを確認するには、各イベントで以下のフィールドを探します。
+ `eventName`: `GenerateDataKey`、`Decrypt`、または `DescribeKey`
+ `eventSource`: `kms.amazonaws.com`
+ `userIdentity.invokedBy`: `lambda.amazonaws.com`
+ `requestParameters.encryptionContext.aws:lambda:FunctionArn`: 耐久性のある関数の ARN

次の例は、耐久性のある関数でカスタマーマネージドキーを設定する `CreateFunction` または `UpdateFunctionConfiguration` コールからの CloudTrail イベントです。Lambda は、キーを検証するために 3 つのAWS KMS コール (実際の `DescribeKey`、ドライラン `GenerateDataKey`、`Decrypt`) を発行します。

------
#### [ GenerateDataKey ]

`DurableConfig` で `KMSKeyArn` を設定または変更すると、Lambda がこの関数の暗号化コンテキストのデータキーを取得することがキーポリシーで許可されることを検証するために、Lambda はカスタマーマネージドキーに対してドライラン `GenerateDataKey` を発行します。ドライランは暗号化作業を実行しませんが、完全な CloudTrail イベントを記録します。次に、ドライラン `GenerateDataKey` オペレーションを記録するイベントの例を示します。

```
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:example",
        "arn": "arn:aws:sts::111122223333:assumed-role/FunctionAuthor/example",
        "accountId": "111122223333",
        "accessKeyId": "ASIA123456789EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA123456789EXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/FunctionAuthor",
                "accountId": "111122223333",
                "userName": "FunctionAuthor"
            },
            "attributes": {
                "creationDate": "2026-01-15T16:54:42Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "lambda.amazonaws.com"
    },
    "eventTime": "2026-01-15T16:55:00Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "lambda.amazonaws.com",
    "userAgent": "lambda.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "encryptionContext": {
            "aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
        },
        "dryRun": true,
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/key-id",
        "keySpec": "AES_256"
    },
    "responseElements": null,
    "additionalEventData": {
        "keyMaterialId": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0EXAMPLE"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/key-id"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------
#### [ Decrypt ]

`DurableConfig` で `KMSKeyArn` を設定または変更すると、Lambda がこの関数の暗号化コンテキストのデータを復号することがキーポリシーで許可されることを検証するために、Lambda はカスタマーマネージドキーに対してドライラン `Decrypt` も発行します。ドライランは `IGNORE_CIPHERTEXT` を使用するため、実際の暗号文は必要ありません。次に、ドライラン `Decrypt` オペレーションを記録するイベントの例を示します。

```
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:example",
        "arn": "arn:aws:sts::111122223333:assumed-role/FunctionAuthor/example",
        "accountId": "111122223333",
        "accessKeyId": "ASIA123456789EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA123456789EXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/FunctionAuthor",
                "accountId": "111122223333",
                "userName": "FunctionAuthor"
            },
            "attributes": {
                "creationDate": "2026-01-15T16:54:42Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "lambda.amazonaws.com"
    },
    "eventTime": "2026-01-15T16:55:00Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "lambda.amazonaws.com",
    "userAgent": "lambda.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "encryptionContext": {
            "aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
        },
        "dryRun": true,
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/key-id",
        "dryRunModifiers": ["IGNORE_CIPHERTEXT"],
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "responseElements": null,
    "additionalEventData": {
        "keyMaterialId": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0EXAMPLE"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/key-id"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------
#### [ DescribeKey ]

`DurableConfig` で `KMSKeyArn` を設定または変更すると、Lambda は `DescribeKey` を呼び出して、変更を受け入れる前にキーが対称で有効であることを確認します。`GenerateDataKey` プローブや `Decrypt` プローブとは異なり、これはドライランではなく、実際の呼び出しです。次に、`DescribeKey` オペレーションを記録するイベントの例を示します。

```
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:example",
        "arn": "arn:aws:sts::111122223333:assumed-role/FunctionAuthor/example",
        "accountId": "111122223333",
        "accessKeyId": "ASIA123456789EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA123456789EXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/FunctionAuthor",
                "accountId": "111122223333",
                "userName": "FunctionAuthor"
            },
            "attributes": {
                "creationDate": "2026-01-15T16:54:42Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "lambda.amazonaws.com"
    },
    "eventTime": "2026-01-15T16:55:00Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "DescribeKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "lambda.amazonaws.com",
    "userAgent": "lambda.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/key-id"
    },
    "responseElements": null,
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/key-id"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------

## 関連する暗号化トピック
<a name="durable-encryption-related"></a>
+ [AWS Lambda での保管時のデータ暗号化‬](security-encryption-at-rest.md)
+ [Lambda 環境変数の保護](configuration-envvars-encryption.md)
+ [Lambda .zip デプロイパッケージの暗号化](encrypt-zip-package.md)
+ [Lambda SnapStart のセキュリティモデル](snapstart-security.md)
+ [Lambda の耐久性のある関数の設定](durable-configuration.md)