説明
S3などのイベントソースがLambda関数を実行するには、lambda:InvokeFunction権限が必要です。lambda:GetFunctionなど、別の用途のアクションでは関数の呼び出しを許可できません。
想定される影響
呼び出し権限が適切でないと、イベント連携が失敗するおそれがあります。
対処方法
通常の関数呼び出しには、AWS::Lambda::PermissionでAction: lambda:InvokeFunctionを使い、Principal、SourceArn、SourceAccountを意図した呼び出し元の範囲に制限してください。イベント接続も別途設定し、確認してください。
例
同じS3呼び出し元について、アクションだけを変更する抜粋です。function、bucket、イベント設定は別途用意してください。
変更前
yaml
Resources:
s3Permission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !GetAtt function.Arn
Action: lambda:GetFunction
Principal: s3.amazonaws.com
SourceAccount: !Ref 'AWS::AccountId'
SourceArn: !GetAtt bucket.Arn
変更後
yaml
Resources:
s3Permission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !GetAtt function.Arn
Action: lambda:InvokeFunction
Principal: s3.amazonaws.com
SourceAccount: !Ref 'AWS::AccountId'
SourceArn: !GetAtt bucket.Arn