ワイルドカードプリンシパルを使用する Lambda 権限

Lambda リソースポリシーの呼び出し元とサービス要求の送信元を必要な対象に制限してください。

説明

Lambda リソースポリシーで principal: "*" を使うと、許可対象が広がる可能性があります。実際のアクセスは付与した操作、条件、呼び出し経路、他の権限制御によって変わります。ワイルドカードだけですべての要求が許可されるとは断定できません。

AWS サービスとの連携では必要なサービスプリンシパルを指定し、対応する source_arn と source_account で実際のイベント送信元を制限してください。直接呼び出すアカウントやロールは、その呼び出し方法に合わせて別途制限する必要があります。

想定される影響

  • 不要な呼び出しが許可されると、実行費用や後続処理の負荷が増える可能性があります。
  • 入力検証が不十分だったり関数の権限が過剰だったりすると、意図しないデータ処理や変更につながるおそれがあります。

対処方法

  1. 呼び出しが必要なアカウント、ロール、サービスだけを許可し、操作も必要な範囲に限定してください。
  2. サービスからの呼び出しには対応する送信元条件を適用し、実際のリソースやアカウントと一致するか確認してください。
  3. 既存の関数ポリシーから不要な許可を削除し、正常なイベントと未承認の呼び出しを試験してください。新しいステートメントを追加するだけでは、既存の公開権限は削除されません。

例

既存の関数と Dev エイリアスに S3 の呼び出し権限を設定する例です。バケット名と所有アカウントを実際の値に置き換え、S3 イベント通知は別途構成してください。既存のステートメントを変更する場合は、使用中のモジュールの動作を確認し、以前の許可を削除・置換してください。

変更前

yaml
- name: Lambda 권한 설정
  community.aws.lambda_policy:
    state: present
    function_name: functionName
    alias: Dev
    statement_id: lambda-s3-myBucket-create-data-log
    action: lambda:InvokeFunction
    principal: "*"
    source_arn: arn:aws:s3:::example-trigger-bucket
    source_account: "123456789012"

プリンシパルはワイルドカードですが、送信元 ARN とアカウントの条件があります。条件を満たさない任意の要求まで許可する例ではありません。

変更後

yaml
- name: Lambda 권한 설정
  community.aws.lambda_policy:
    state: present
    function_name: functionName
    alias: Dev
    statement_id: lambda-s3-myBucket-create-data-log
    action: lambda:InvokeFunction
    principal: s3.amazonaws.com
    source_arn: arn:aws:s3:::example-trigger-bucket
    source_account: "123456789012"

同じバケットと所有アカウントの条件を維持し、呼び出し元を S3 に限定します。lambda:InvokeFunction は関数を呼び出す権限であり、ポリシーステートメントを追加する管理操作とは異なります。

参考資料