在Cloudformation中创建策略从单独的AWS账户授予对s3存储桶的访问权限

时间:2018-02-15 16:00:17

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

我已阅读"在政策中指定主体" doc:https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-bucket-user-policy-specifying-principal-intro.html,我从那里推断出一些行为和其他SO(如aws lambda function getting access denied when getObject from s3)那些没有专门处理Cloudformation的问题。

当我尝试创建一个允许外部角色访问本地存储桶的策略时,我仍然对此错误感到困惑。来自Cloudformation的错误是:Policy document should not specify a principal.

情况细分

我有两个AWS账户。帐户A创建一个存储桶,我想授予帐户B对它的写入权限。

在帐户A Cloudformation中我创建了一个策略,授予对所述存储桶的帐户B角色访问权限。来自https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html的指南。帐户B存在该角色。

AccountBWriteToS3Policy: Type: 'AWS::IAM::Policy' Properties: PolicyName: AccountBWriteToS3Policy PolicyDocument: Version: 2012-10-17 Statement: - Principal: AWS: 'arn:aws:iam::123456789876:role/AccountBRole' Effect: Allow Action: - 's3:PutObject' - 's3:ListBucket' Resource: !Sub - '${bucketArn}/*' - bucketArn: !GetAtt - AccountABucket - Arn Roles: - AccountARole

但是,cloudformation无法执行,并返回错误 Policy document should not specify a principal.

我很难过。

任何人都可以解释此错误吗?

任何人都可以规定前进的道路吗?

这似乎是一个简单而常见的需求,涵盖在众多例子中。也许我应该在存储桶声明中指定策略,而不是创建一个帐户范围的策略?

1 个答案:

答案 0 :(得分:2)

您需要使用"信任政策"创建一个角色?遵循原则,然后是一个许可政策"允许对S3 Bucket进行读/写访问。

以下是我的Cloudformation的摘录。

  Role:
    Type: "AWS::IAM::Role"
    Properties:
      RoleName: !Sub '${RuleName}-Role'
      Path: "/"     
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal: !Sub 'arn:aws:iam::${AccountID}:user/*'
          Action: sts:AssumeRole      
  RolePolicies:
    Type: "AWS::IAM::ManagedPolicy"
    Properties:
      ManagedPolicyName: !Sub '${RuleName}-RolePolicies'
      Roles:
        - Ref: "Role"
      PolicyDocument:
        Version: "2012-10-17"
        Statement:       
        - Effect: Allow
          Action:
          - s3:Get*
          - s3:Put*
          - s3:List*
          - s3:AbortMultipartUpload       
          Resource:
          - !Ref Bucket

参考:Cross account tutorial