Lambda 耐久関数のセキュリティとアクセス許可
AWS Lambda において、耐久性のある実行を実行し管理するには、耐久性のある関数に特定の IAM アクセス許可が必要です。各プリンシパルに必要なアクセス許可のみを付与することで、最小特権の原則に従います。
耐久性のある関数の IAM アクセス許可
ほとんどの耐久性のある実行 API アクションでは、関数 ARN ではなく耐久性のある実行 ARN に対しリクエストの許可を検証します。耐久性のある実行は関数バージョンのサブリソースであり、その ARN により、関数 ARN が拡張されます。
arn:aws:lambda:region:account-id:function:function-name:qualifier/durable-execution/execution-name/execution-id
耐久性のある実行 ARN の修飾子は、常に $LATEST またはバージョン番号です。
ポリシーの Resource 要素で非修飾関数 ARN を指定している場合、非修飾関数 ARN が耐久性のある実行 ARN と一致せず、リクエストが拒否されます。アクセスが許可されるようにするには、関数 ARN に修飾子パターンを追加します。
arn:aws:lambda:us-east-1:123456789012:function:my-function:*– すべてのバージョンの耐久性のある実行に一致します。arn:aws:lambda:us-east-1:123456789012:function:my-function:1/durable-execution/*– バージョン 1 の耐久性のある実行にのみ一致します。
ほとんどのポリシーでデプロイごとにバージョン番号が変わる可能性があるため、:* フォームを使用します。
エイリアスは、耐久性のある実行のアクセス許可には適用されません
エイリアスを使用しても耐久関数の呼び出しは可能です。しかし、結果的な実行の ARN には解決済みのバージョン番号が含まれています。
実行ロールのアクセス許可
耐久関数の実行ロールには、チェックポイントを作成し、実行状態を取得するためのアクセス許可が必要です。次のポリシーは、必要な最低限のアクセス許可を示しています。
{ "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 を使用して関数を作成する場合は、これらのアクセス許可を実行ロールに追加します。
Lambda が実行ロールを継承するには、ロールの信頼ポリシーで、Lambda サービスプリンシパル (lambda.amazonaws.com) が信頼できるサービスとして指定されている必要があります。次の例は、ロールを継承するアクセス許可を Lambda に付与する信頼ポリシーを示します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
最小特権の原則
ワイルドカードを使用する代わりに、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 を使用することもできます。
耐久性のある実行を管理するためのアクセス許可
Lambda では、耐久性のある実行 ARN に対し、lambda:GetDurableExecution、lambda:GetDurableExecutionHistory、lambda:StopDurableExecution アクションの許可を検証します。
関数の耐久性のある実行を一覧表示するには、lambda:ListDurableExecutionsByFunction を使用します。Lambda では、リクエスト元の関数 ARN に対し、このアクション許可を検証します。ARN マッチングには、以下のルールが適用されます。
非修飾関数 ARN を付与するポリシーでは、非修飾関数名を使用するリクエストのみ一致と見なされます。
修飾 ARN を付与するポリシーでは、修飾関数名を使用するリクエストのみ一致と見なされます。
詳細については、「ポリシーのリソースセクションで関数を参照する」を参照してください。
関数名のいずれかの形式によるリクエストを一致させるには、次のポリシーに示すように、非修飾関数 ARN と修飾関数 ARN の両方を記述します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageDurableExecutions", "Effect": "Allow", "Action": [ "lambda:GetDurableExecution", "lambda:GetDurableExecutionHistory", "lambda:StopDurableExecution" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:*" }, { "Sid": "ListDurableExecutions", "Effect": "Allow", "Action": "lambda:ListDurableExecutionsByFunction", "Resource": [ "arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction", "arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:*" ] } ] }
コールバックを送信するためのアクセス許可
コールバック結果を送信する外部システムには、lambda:SendDurableExecutionCallbackSuccess、lambda:SendDurableExecutionCallbackFailure、lambda:SendDurableExecutionCallbackHeartbeat のアクションを使用します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "SendCallbacks", "Effect": "Allow", "Action": [ "lambda:SendDurableExecutionCallbackSuccess", "lambda:SendDurableExecutionCallbackFailure", "lambda:SendDurableExecutionCallbackHeartbeat" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:*" } ] }
Lambda では、コールバックを作成した耐久性のある実行の ARN に対し、コールバックリクエストの許可を検証します。
状態の暗号化
Lambda の耐久性のある関数は、実行の保管中のデータを暗号化します。各関数の実行は、他の実行がアクセスできない分離された状態を維持します。カスタマーマネージドキーを設定して、耐久性のある実行のデータを暗号化できます。詳細については、「AWS Lambda の耐久性のある実行のデータを暗号化する」を参照してください。
チェックポイントデータには以下が含まれます。
ステップの結果とエラー
連鎖呼び出し入力
耐久性のある実行の暗号化された保管時のデータの完全なリストについては、「暗号化されるもの」を参照してください。
Lambda がチェックポイントデータを読み取りまたは書き込みするときに、すべてのデータは TLS を使用して転送中に暗号化されます。
カスタムシリアライザーとデシリアライザーによるカスタム暗号化
重要なセキュリティ要件については、カスタムシリアライザーと耐久性のある SDK を使用するデシリアライザー (SerDer) を使用して、独自の暗号化および復号メカニズムを実装できます。このアプローチにより、チェックポイントデータの保護に使用される暗号化キーとアルゴリズムを完全に制御できます。
重要
カスタム暗号化を使用すると、Lambda コンソールや API レスポンスで操作結果を確認できなくなります。チェックポイントデータは実行履歴に暗号化されて表示され、復号化なしでは検査できません。
関数の実行ロールには、カスタム SerDer 実装で使用される AWS KMS キーの kms:Encryptと kms:Decrypt アクセス許可が必要です。
CloudTrail ロギング
Lambda は、チェックポイントオペレーションを AWS CloudTrail のデータイベントとしてログに記録します。CloudTrail を使用して、チェックポイントが作成された際の監査、実行状態の変更の追跡、耐久性のある実行データへのアクセスのモニタリングを行うことができます。
チェックポイントオペレーションは、以下のイベント名で CloudTrail ログに表示されます。
CheckpointDurableExecution– ステップが完了し、チェックポイントが作成されるとログに記録されますGetDurableExecutionState– Lambda がリプレイ中に実行状態を取得するとログに記録されます
耐久関数のデータイベントログ記録を有効にするには、Lambda データイベントをログに記録するように CloudTrail 証跡を設定します。詳細については、「CloudTrail ユーザーガイド」の「Logging data events」を参照してください。
例: チェックポイントオペレーションの 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" }
クロスアカウントに関する考慮事項
AWS アカウント間で耐久関数を呼び出す場合、呼び出し元のアカウントには lambda:InvokeFunction アクセス許可が必要ですが、チェックポイントオペレーションは常に関数のアカウントで実行ロールを使用します。呼び出し元のアカウントは、チェックポイントデータまたは実行状態に直接アクセスできません。
この分離により、外部アカウントから呼び出された場合でも、チェックポイントデータは関数のアカウント内で安全に保たれます。
継承された Lambda セキュリティ機能
耐久関数では、すべてのセキュリティ、ガバナンス、コンプライアンス機能が Lambda から継承されます。これには、VPC 接続、環境変数の暗号化、デッドレターキュー、予約済み同時実行数、関数 URL、コード署名、コンプライアンス認定 (SOC、PCI DSS、HIPAA など) が含まれます。
Lambda セキュリティ機能の詳細については、「Lambda デベロッパーガイド」の「AWS Lambda のセキュリティ」を参照してください。耐久関数に関する追加のセキュリティ上の考慮事項は、このガイドに記載されている IAM アクセス許可のみです。