【问题标题】:IAM Role via CloudFormation Error in Principle原则上通过 CloudFormation 错误的 IAM 角色
【发布时间】:2020-08-18 16:58:14
【问题描述】:

我正在尝试通过 cloudformation 为现有的 IAM 用户创建一个 IAM 角色作为主体和一个现有的 dynamodb 表。我已经通过 yamllint 进行了验证,yaml 格式正确,但 cloudformation 抱怨文件格式错误。

以下是我的 cloudformation 模板:

    AWSTemplateFormatVersion: 2010-09-09
    Parameters:
      vTableName:
        Type: String
        Description: the tablename
        Default: arn:aws:dynamodb:ap-southeast-2:1234567:table/test-table
      vUserName:
        Type: String
        Description: New account username
        Default: mytestuser
    Resources:
      DynamoRoleForTest:
        Type: 'AWS::IAM::Role'
        Properties:
          AssumeRolePolicyDocument:
            Statement:
            - Effect: Allow
              Principal:
                AWS:
                - !Sub 'arn:aws:iam::${AWS::AccountId}:user/${vUserName}'  
              Action:
              - sts:AssumeRole    
          Path: /
          Policies:
            - PolicyName: DynamoPolicy
              PolicyDocument:
                Version: 2012-10-17
                Statement:
                  - Effect: Allow
                  - Action:
                      - dynamodb:BatchGet*
                      - dynamodb:DescribeStream
                      - dynamodb:DescribeTable
                      - dynamodb:Get*
                      - dynamodb:Query
                      - dynamodb:Scan                                    
                    Resource: !Ref vTableName

以下是我在尝试创建此模板时收到的错误:

策略中的语法错误。 (服务:AmazonIdentityManagement;状态代码:400;错误代码:MalformedPolicyDocument;请求 ID:237dd218-a2a2-4194-9063-104f8022cb80)

感谢您的建议。

【问题讨论】:

    标签: amazon-web-services yaml amazon-cloudformation amazon-iam


    【解决方案1】:

    您的Action 中有不需要的-

    - Action:
    

    因此,您的模板应该是(删除-):

        AWSTemplateFormatVersion: 2010-09-09
        Parameters:
          vTableName:
            Type: String
            Description: the tablename
            Default: arn:aws:dynamodb:ap-southeast-2:1234567:table/test-table
          vUserName:
            Type: String
            Description: New account username
            Default: mytestuser
        Resources:
          DynamoRoleForTest:
            Type: 'AWS::IAM::Role'
            Properties:
              AssumeRolePolicyDocument:
                Statement:
                - Effect: Allow
                  Principal:
                    AWS:
                    - !Sub 'arn:aws:iam::${AWS::AccountId}:user/${vUserName}'  
                  Action:
                  - sts:AssumeRole    
              Path: /
              Policies:
                - PolicyName: DynamoPolicy
                  PolicyDocument:
                    Version: 2012-10-17
                    Statement:
                      - Effect: Allow
                        Action:
                          - dynamodb:BatchGet*
                          - dynamodb:DescribeStream
                          - dynamodb:DescribeTable
                          - dynamodb:Get*
                          - dynamodb:Query
                          - dynamodb:Scan                                    
                        Resource: !Ref vTableName
    
    

    Principle 很好,假设它存在。

    【讨论】:

    • 非常感谢。是的,现在它可以工作了。是否有任何工具或 linter 可以检查 cloudformation 模板中的这些语法错误?谢谢
    • @FahdMirza 没问题。有this one之类的一些工具,但是我个人没有用过。因此,如果它可以检测到错误,请不要这样做。
    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 2017-06-17
    • 2019-01-13
    • 2017-06-18
    • 2020-10-23
    • 2021-12-05
    • 2019-11-24
    • 2020-02-27
    相关资源
    最近更新 更多