如何在 Cloudformation 中编写基于资源的策略

How to write Resource-based policy in Cloudformation

我想从外部 AWS 账户调用 Lambda,我设法通过在控制台的基于资源的策略选项卡中创建策略语句来实现(Lambda > 配置 > 权限 > 基于资源的策略) .虽然,我找不到在我的 CloudFormation 模板中编写这样的策略的方法。这是我写的:

InvokePolicy:
    Type: AWS::IAM::Policy
    Properties:
      PolicyName: 'InvokeLambdaFromGateway'
      Roles: 
        - !Sub "arn:aws:iam::${AWS::AccountId}:role/NameOfLambda"
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Sid: InvokeLambdaExternally
            Effect: Allow
            Resource:
              - !Ref NameOfLambda
            Action:
              - lambda:InvokeFunction
            Principal:
              AWS: ["arn:aws:iam::AccountIUseToInvokeTheLambda:root"]

但是我得到这个错误:IAM Resource Policy statement shouldnt have Principal or NotPrincipal

如何使用主体定义将该策略附加到我的 Lambda?

此错误是因为您没有将委托人添加到策略中。您需要添加权限:

  permission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !GetAtt function.Arn
      Action: lambda:InvokeFunction
      Principal: 123456789012

documentation 阅读更多内容。