説明
Lambda リソースポリシーで principal: "*" を使うと、許可対象が広がる可能性があります。実際のアクセスは付与した操作、条件、呼び出し経路、他の権限制御によって変わります。ワイルドカードだけですべての要求が許可されるとは断定できません。
AWS サービスとの連携では必要なサービスプリンシパルを指定し、対応する source_arn と source_account で実際のイベント送信元を制限してください。直接呼び出すアカウントやロールは、その呼び出し方法に合わせて別途制限する必要があります。
想定される影響
- 不要な呼び出しが許可されると、実行費用や後続処理の負荷が増える可能性があります。
- 入力検証が不十分だったり関数の権限が過剰だったりすると、意図しないデータ処理や変更につながるおそれがあります。
対処方法
- 呼び出しが必要なアカウント、ロール、サービスだけを許可し、操作も必要な範囲に限定してください。
- サービスからの呼び出しには対応する送信元条件を適用し、実際のリソースやアカウントと一致するか確認してください。
- 既存の関数ポリシーから不要な許可を削除し、正常なイベントと未承認の呼び出しを試験してください。新しいステートメントを追加するだけでは、既存の公開権限は削除されません。
例
既存の関数と 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 は関数を呼び出す権限であり、ポリシーステートメントを追加する管理操作とは異なります。