

# Lambda 耐久関数のセキュリティとアクセス許可
<a name="durable-security"></a>

Lambda 耐久関数には、チェックポイントオペレーションを管理するための特定の IAM アクセス許可が必要です。関数に必要なアクセス許可のみを付与することで、最小特権の原則に従います。

## 実行ロールのアクセス許可
<a name="durable-execution-role"></a>

耐久関数の実行ロールには、チェックポイントを作成し、実行状態を取得するためのアクセス許可が必要です。次のポリシーは、必要な最低限のアクセス許可を示しています。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:CheckpointDurableExecution",
                "lambda:GetDurableExecutionState"
            ],
            "Resource": "arn:aws:lambda:region:account-id:function:function-name:*"
        }
    ]
}
```

コンソールを使用して耐久関数を作成すると、Lambda はこれらのアクセス許可を実行ロールに自動的に追加します。AWS CLI または AWS CloudFormation を使用して関数を作成する場合は、これらのアクセス許可を実行ロールに追加します。

**最小特権の原則**  
ワイルドカードを使用する代わりに、`Resource` 要素を特定の関数 ARN にスコープします。これにより、実行ロールは、それらを必要とする関数のみのチェックポイントオペレーションに制限されます。

**例: 複数の関数のスコープ付きアクセス許可**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:CheckpointDurableExecution",
                "lambda:GetDurableExecutionState"
            ],
            "Resource": [
                "arn:aws:lambda:us-east-1:123456789012:function:orderProcessor:*",
                "arn:aws:lambda:us-east-1:123456789012:function:paymentHandler:*"
            ]
        }
    ]
}
```

または、耐久性のある実行の必要なアクセス許可と Amazon CloudWatch Logs の基本的な Lambda 実行アクセス許可を含む AWS マネージドポリシー `AWSLambdaBasicDurableExecutionRolePolicy` を使用することもできます。

## 状態の暗号化
<a name="durable-state-encryption"></a>

Lambda 耐久関数は、AWS 所有キーを使用して保管中の暗号化を無料で自動的に有効にします。各関数の実行は、他の実行がアクセスできない分離された状態を維持します。カスタマーマネージドキー (CMK) はサポートされていません。

チェックポイントデータには以下が含まれます。
+ ステップの結果と戻り値
+ 実行の進行状況とタイムライン
+ 待機状態情報

Lambda がチェックポイントデータを読み取りまたは書き込みするときに、すべてのデータは TLS を使用して転送中に暗号化されます。

### カスタムシリアライザーとデシリアライザーによるカスタム暗号化
<a name="durable-custom-encryption"></a>

重要なセキュリティ要件については、カスタムシリアライザーと耐久性のある SDK を使用するデシリアライザー (SerDer) を使用して、独自の暗号化および復号メカニズムを実装できます。このアプローチにより、チェックポイントデータの保護に使用される暗号化キーとアルゴリズムを完全に制御できます。

**重要**  
カスタム暗号化を使用すると、Lambda コンソールや API レスポンスで操作結果を確認できなくなります。チェックポイントデータは実行履歴に暗号化されて表示され、復号化なしでは検査できません。

関数の実行ロールには、カスタム SerDer 実装で使用される AWS KMS キーの `kms:Encrypt`と `kms:Decrypt` アクセス許可が必要です。

## CloudTrail ロギング
<a name="durable-cloudtrail-logging"></a>

Lambda は、チェックポイントオペレーションを AWS CloudTrail のデータイベントとしてログに記録します。CloudTrail を使用して、チェックポイントが作成された際の監査、実行状態の変更の追跡、耐久性のある実行データへのアクセスのモニタリングを行うことができます。

チェックポイントオペレーションは、以下のイベント名で CloudTrail ログに表示されます。
+ `CheckpointDurableExecution` – ステップが完了し、チェックポイントが作成されるとログに記録されます
+ `GetDurableExecutionState` – Lambda がリプレイ中に実行状態を取得するとログに記録されます

耐久関数のデータイベントログ記録を有効にするには、Lambda データイベントをログに記録するように CloudTrail 証跡を設定します。詳細については、「CloudTrail ユーザーガイド」の「[Logging data events](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html)」を参照してください。

**例: チェックポイントオペレーションの CloudTrail ログエントリ**

```
{
    "eventVersion": "1.08",
    "eventTime": "2024-11-16T10:30:45Z",
    "eventName": "CheckpointDurableExecution",
    "eventSource": "lambda.amazonaws.com",
    "requestParameters": {
        "functionName": "myDurableFunction",
        "executionId": "exec-abc123",
        "stepId": "step-1"
    },
    "responseElements": null,
    "eventType": "AwsApiCall"
}
```

## クロスアカウントに関する考慮事項
<a name="durable-cross-account-access"></a>

AWS アカウント間で耐久関数を呼び出す場合、呼び出し元のアカウントには `lambda:InvokeFunction` アクセス許可が必要ですが、チェックポイントオペレーションは常に関数のアカウントで実行ロールを使用します。呼び出し元のアカウントは、チェックポイントデータまたは実行状態に直接アクセスできません。

この分離により、外部アカウントから呼び出された場合でも、チェックポイントデータは関数のアカウント内で安全に保たれます。

## 継承された Lambda セキュリティ機能
<a name="durable-inherited-security"></a>

耐久関数は、VPC 接続、環境変数暗号化、デッドレターキュー、予約された同時実行、関数 URL、コード署名、コンプライアンス証明書 (SOC、PCI DSS、HIPAA など) など、Lambda からすべてのセキュリティ、ガバナンス、コンプライアンス機能を継承します。

Lambda セキュリティ機能の詳細については、「Lambda デベロッパーガイド」の「[AWS Lambda のセキュリティ](https://docs.aws.amazon.com/lambda/latest/dg/lambda-security.html)」を参照してください。耐久関数に関する追加のセキュリティ上の考慮事項は、このガイドに記載されているチェックポイントのアクセス許可のみです。