View a markdown version of this page

Lambda 耐久関数のセキュリティとアクセス許可 - AWS Lambda

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:GetDurableExecutionlambda:GetDurableExecutionHistorylambda: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:SendDurableExecutionCallbackSuccesslambda:SendDurableExecutionCallbackFailurelambda: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:Encryptkms: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 アクセス許可のみです。