説明
Lambda リソースポリシーの action は許可する操作を指定します。S3 などのサービスによる通常の関数呼び出しには lambda:InvokeFunction が必要です。別の目的の操作を指定すると、必要な呼び出し権限を与えられなかったり、不要な操作を許可したりする場合があります。
他の action が常に誤りというわけではありません。関数 URL など実際のアクセス方式に必要な権限を確認してください。
想定される影響
- イベントソースから関数を呼び出せず、処理が遅れたり失敗したりする場合があります。
- 必要以上に広い操作や主体を許可すると、関数へのアクセス範囲が広がるおそれがあります。
対処方法
- 通常の関数呼び出しには action: lambda:InvokeFunction を使い、その方式に必要な操作だけを許可してください。
- principal を必要な呼び出し元に限定し、AWS サービスからの要求は対応する source_arn と source_account の条件で制限してください。ポリシーとイベントソースの設定を合わせて確認し、実際の呼び出しを試してください。
例
関数と Dev エイリアスがすでに存在する例です。バケット名とアカウント ID を実際の値に置き換え、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:CreateFunction
principal: s3.amazonaws.com
source_arn: arn:aws:s3:::example-bucket
source_account: "123456789012"
変更後
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-bucket
source_account: "123456789012"
補足:
- 変更前: lambda:CreateFunction は、S3 が既存の関数を呼び出すための許可ではありません。
- 変更後: lambda:InvokeFunction で指定したバケットとアカウントからの S3 呼び出しを許可します。実際のイベント接続も必要です。