Lambdaの呼び出し権限が不適切

イベントソースから関数を呼び出すためのアクションを許可してください。

説明

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

参考資料