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

aka*_*kai 5 amazon-web-services aws-cloudformation amazon-iam aws-sam

我想从外部 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"]
Run Code Online (Sandbox Code Playgroud)

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

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

kgi*_*kis 5

此错误是因为您没有将主体添加到策略中。您需要添加一个权限:

  permission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !GetAtt function.Arn
      Action: lambda:InvokeFunction
      Principal: 123456789012
Run Code Online (Sandbox Code Playgroud)

请阅读文档了解更多内容。