amazon-web-services - 如何在 Cloudformation 中编写基于资源的策略

标签 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"]

但我收到此错误:IAM 资源策略语句不应包含“Principal”或“NotPrincipal”

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

最佳答案

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

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

documentation 中了解更多信息。

关于amazon-web-services - 如何在 Cloudformation 中编写基于资源的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70188645/

相关文章:

amazon-web-services - Unmarshal AWS IAM Document But Conditional string 或 []string in Doc

amazon-web-services - 为什么亚马逊 EC2 中文件夹内的子目录数量与 Ubuntu 不同

json - 如何将 AWS Cloudformation 的 YAML 连接格式写入 Terraform 格式?

amazon-web-services - 配置无服务器框架不上传到S3?

amazon-web-services - 如何从 Jenkins 部署具有 AWS 角色的 CDK?

amazon-web-services - AWS::Lambda::Function,JS 文件作为源

amazon-web-services - CloudFormation - 从存储库获取模板

amazon-web-services - 如何在 AWS 中获取 EC2 实例的 arn

amazon-web-services - 安全组与角色的使用

amazon-web-services - 在AWS中创建一个只读IAM用户