Lambda Durable Functions の新機能「耐久実行データの暗号化」を試してみた

Lambda Durable Functions の新機能「耐久実行データの暗号化」を試してみた

AWS Lambda Durable Functions の耐久実行データ(durable execution data)をカスタマーマネージドキー(CMK)で暗号化できるようになりました。CMK の設定方法、キー無効化時のエラー挙動、IncludeExecutionData による参照制御、CloudTrail での監査を試しました。
2026.07.23

はじめに

2026年7月22日、AWS Lambda Durable Functions の耐久実行データをカスタマーマネージドキー(CMK)で暗号化できるようになりました。

https://aws.amazon.com/about-aws/whats-new/2026/07/durablefunctions-cmk/

Lambda Durable Functions の概要は、以下の記事を参照してください。

https://dev.classmethod.jp/articles/aws-lambda-durable-functions-awsreinvent/

今回のアップデートによる変更点をまとめます。

項目 従来(AWS 所有キー) 新機能(CMK)
暗号化方式 AWS 所有キーで自動暗号化 カスタマーマネージドキーを指定可能
キーの管理 AWS 側で完全管理 ユーザーがキーポリシー・ローテーション・無効化を制御
参照制御 常に全データ返却(制御不可) IncludeExecutionData パラメータで入出力データの返却を制御
キー無効化時 不可(AWS 管理) 全データアクセス不可(メタデータ含む、本検証時点)
CloudTrail 監査 KMS イベントなし GenerateDataKey / Decrypt イベント記録
追加費用 なし CMK 保管 $1/月 + API 料金(月 20,000 件まで無料)

以下、設定から監査までを順に検証します。

検証内容

検証環境

項目
リージョン ap-northeast-1(東京)
Lambda ランタイム nodejs24.x
関数名 durable-cmk-test
CMK alias/durable-cmk-test(対称暗号化、単一リージョン)
実行ロール durable-cmk-test-role
検証日 2026-07-23

CMK の作成とキーポリシー

耐久実行データの暗号化に使用する対称暗号化キーを作成しました。

aws kms create-key \
  --description "Durable Functions CMK test" \
  --key-usage ENCRYPT_DECRYPT \
  --key-spec SYMMETRIC_DEFAULT

aws kms create-alias \
  --alias-name alias/durable-cmk-test \
  --target-key-id EXAMPLE-KEY-ID

キーポリシーでは以下の 4 者に権限を付与します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "EnableRootAccountAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": "kms:*",
      "Resource": "*"
    },
    {
      "Sid": "AllowLambdaServicePrincipal",
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt",
        "kms:DescribeKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        }
      }
    },
    {
      "Sid": "AllowExecutionRoleDecrypt",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/durable-cmk-test-role"
      },
      "Action": "kms:Decrypt",
      "Resource": "*"
    },
    {
      "Sid": "AllowCallerDecrypt",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/durable-cmk-test-user"
      },
      "Action": "kms:Decrypt",
      "Resource": "*"
    }
  ]
}

各ステートメントの役割です。

  • EnableRootAccountAccess — ルートアカウント(アカウント内の IAM ポリシーによる権限委任を含む)にキーの全操作を許可します。キーがロックアウトされることを防ぐための一般的な設定です
  • AllowLambdaServicePrincipal — Lambda サービスプリンシパルに GenerateDataKey、Decrypt、DescribeKey を許可します。aws:SourceAccount 条件で自アカウントからのリクエストに限定しています
  • AllowExecutionRoleDecrypt — Lambda 関数の実行ロールに Decrypt を許可します。リプレイやチェックポイント読み取り時にデータキーを復号するために必要です
  • AllowCallerDecrypt — GetDurableExecution API の呼び出し元に Decrypt を許可します。IncludeExecutionData を有効にして実行データを取得する際に必要です

DurableConfig.KMSKeyArn の設定

公式ドキュメントに従い、update-function-configuration で既存の Durable Function に CMK を設定しました。--durable-config は DurableConfig オブジェクト全体を置き換えるため、既存の ExecutionTimeoutRetentionPeriodInDays もあわせて指定します。

aws lambda update-function-configuration \
  --function-name durable-cmk-test \
  --durable-config '{
    "KMSKeyArn":"arn:aws:kms:ap-northeast-1:123456789012:key/EXAMPLE-KEY-ID",
    "ExecutionTimeout":3600,
    "RetentionPeriodInDays":7
  }'

設定後の出力で DurableConfig に KMSKeyArn が追加されていることを確認できます。

update-function-configuration の出力
{
  "FunctionName": "durable-cmk-test",
  "State": "Active",
  "LastUpdateStatus": "Successful",
  "DurableConfig": {
    "KMSKeyArn": "arn:aws:kms:ap-northeast-1:123456789012:key/EXAMPLE-KEY-ID",
    "RetentionPeriodInDays": 7,
    "ExecutionTimeout": 3600
  }
}

CMK 付き耐久実行の動作確認

CMK 設定後にバージョンを発行し、非同期呼び出しで耐久実行を開始しました。

aws lambda publish-version --function-name durable-cmk-test
aws lambda invoke \
  --function-name durable-cmk-test:2 \
  --invocation-type Event \
  --cli-binary-format raw-in-base64-out \
  --payload '{"orderId":"order-12345"}' \
  response.json

耐久実行の完了後、list-durable-executions-by-function で耐久実行 ARN を取得します。

aws lambda list-durable-executions-by-function \
  --function-name durable-cmk-test:2 \
  --statuses SUCCEEDED

取得した ARN を使って get-durable-execution で結果を確認しました。

DURABLE_EXECUTION_ARN="arn:aws:lambda:ap-northeast-1:123456789012:function:durable-cmk-test:2/durable-execution/EXAMPLE-EXECUTION-NAME/EXAMPLE-EXECUTION-ID"

aws lambda get-durable-execution \
  --durable-execution-arn "$DURABLE_EXECUTION_ARN" \
  --include-execution-data

3 ステップと 10 秒の wait を含む耐久実行が正常に完了し、DurableConfig.KMSKeyArn が結果に含まれていることを確認できました。

get-durable-execution の出力
{
  "DurableExecutionArn": "arn:aws:lambda:ap-northeast-1:123456789012:function:durable-cmk-test:2/durable-execution/EXAMPLE-EXECUTION-NAME/EXAMPLE-EXECUTION-ID",
  "InputPayload": "{\"orderId\":\"order-12345\"}",
  "Result": "{\"orderId\":\"order-12345\",\"status\":\"completed\",\"steps\":[...]}",
  "Status": "SUCCEEDED",
  "StartTimestamp": "2026-07-23T10:13:58.463000+09:00",
  "EndTimestamp": "2026-07-23T10:14:10.524000+09:00",
  "Version": "2",
  "ExecutionDataIncluded": true,
  "DurableConfig": {
    "KMSKeyArn": "arn:aws:kms:ap-northeast-1:123456789012:key/EXAMPLE-KEY-ID",
    "RetentionPeriodInDays": 7,
    "ExecutionTimeout": 3600
  }
}

キー無効化時のエラー確認

CMK を無効化した場合に耐久実行データへのアクセスがどうなるかを確認しました。

aws kms disable-key --key-id EXAMPLE-KEY-ID

キー無効化後に get-durable-execution を実行すると、即座にエラーが返りました。

An error occurred (KMSDisabledException) when calling the GetDurableExecution operation:
Lambda was unable to access your execution data because the KMS key used is disabled.
Check the KMS key configured in the function's durable config.
KMS Exception: DisabledException
KMS Message: arn:aws:kms:ap-northeast-1:123456789012:key/EXAMPLE-KEY-ID is disabled.

--no-include-execution-data を指定してメタデータのみの取得を試みた場合も、同じ KMSDisabledException が発生します。ドキュメント上は IncludeExecutionData=false で KMS を呼ばないとされていますが、本検証時点では API 自体がエラーを返しました(今後サービス側の挙動が変わる可能性があります)。本検証では、キー無効化前に正常完了していた耐久実行のデータについても、無効化後は同様に KMSDisabledException となりアクセスできませんでした。

IncludeExecutionData の比較

キーを再有効化してから、--include-execution-data--no-include-execution-data で返却されるフィールドの差を確認しました。

get-durable-execution では、指定値によって返却内容が次のように変わります。

パラメータ 返却内容
--include-execution-data InputPayload, Result, ExecutionDataIncluded=true, メタデータ全て
--no-include-execution-data メタデータのみ(Status, 時刻, Version, DurableConfig)。InputPayload/Result なし。ExecutionDataIncluded=false
指定なし(CLI デフォルト) --include-execution-data と同じ動作(CLI デフォルトは true)

同様に get-durable-execution-history でも確認しました。

パラメータ Payload フィールド
--include-execution-data 各イベントの Payload に JSON 平文 + "Truncated": false
--no-include-execution-data Payload 非表示、"Truncated": true のみ

--no-include-execution-data を指定した場合、CloudTrail 上で呼び出し元ロールの Decrypt イベントは記録されませんでした(詳細は次節の表を参照)。

CloudTrail での KMS イベント確認

CMK を使用した耐久実行では、CloudTrail に以下の KMS イベントが記録されます。本検証で観測したパターンを示します(データキーキャッシュにより、耐久実行ごとに毎回発生するとは限りません)。

イベント 呼び出し元 タイミング
GenerateDataKey AWSService (lambda.amazonaws.com) 耐久実行開始時(データキー生成)
Decrypt AWSService (lambda.amazonaws.com) 耐久実行の処理時(データキーの復号)
Decrypt 実行ロール リプレイ/チェックポイント読み取り時
Decrypt 呼び出し元ロール GetDurableExecution(IncludeExecutionData=true)時
Decrypt (DisabledException) 呼び出し元ロール キー無効化後の GetDurableExecution 時

耐久実行データに対する GenerateDataKey および Decrypt イベントには、以下の encryptionContext が含まれています(キー設定時の DescribeKey イベントには含まれません)。

{
  "aws:lambda:FunctionArn": "arn:aws:lambda:ap-northeast-1:123456789012:function:durable-cmk-test"
}

実行ロールの Decrypt イベントには inScopeOf フィールドが含まれ、クレデンシャルの発行元関数がバージョン付き ARN で記録されます。どのバージョンの関数からの Decrypt リクエストであるかを追跡できます。

費用

CMK を利用する場合の費用です。

項目 料金
CMK 保管 $1/月/キー(時間按分、約 $0.00137/時間)
KMS API リクエスト 月 20,000 件まで無料、超過分 $0.03/10,000 件
Durable Functions CMK 機能 追加料金なし
本検証の実コスト $0.01 未満(API リクエスト計 10 件程度)

削除予定状態(PendingDeletion)のキーには保管料金が発生しません。料金の詳細は AWS KMS の料金ページ を参照してください。

まとめ

Lambda Durable Functions で、耐久実行データの暗号化にカスタマーマネージドキー(CMK)を利用できるようになりました。

CMK を利用することで、キー管理、アクセス制御、CloudTrail による KMS 操作の監査を、自組織の要件に合わせて行えます。機微な実行データを扱う場合や、暗号化キーの管理・監査要件がある場合に有用です。

一方で、キーの無効化やキーポリシーの変更は、耐久実行の実行やデータ参照へ影響します。本検証では、キー無効化時の IncludeExecutionData=false の挙動にドキュメントとの差異も見られました。

CMK の制御性と、キー管理が耐久実行データの可用性に与える影響を踏まえ、要件に応じて慎重に採用を検討してください。

この記事をシェアする

関連記事