2017-06-06 37 views
0

我准备了一个云模板,该模板创建AWS::IAM::Rolearn:aws:iam::aws:policy/AmazonS3FullAccess策略。如何在云模板中为存储桶编写策略

模板成功运行后,我执行一个python脚本来创建两个前缀为foobar-bucket1foobar-bucket2的存储桶。

目前,这是我的模板上面部分的外观:

Resources: 
    MyRole: 
    Type: AWS::IAM::Role 
    Properties: 
     AssumeRolePolicyDocument: 
     Version: '2012-10-17' 
     Statement: 
     - Effect: Allow 
      Principal: 
      Service: 
      - ssm.amazonaws.com 
      - ec2.amazonaws.com 
      Action: sts:AssumeRole 
     ManagedPolicyArns: 
     - arn:aws:iam::aws:policy/AmazonS3FullAccess 
     Path: "/" 

问题

我想知道是否有必要通过云模板创建的IAM::RoleAmazonS3FullAccess为了创造两个桶?

是否有可能对我来说,给角色ONLY权限创建桶,然后FULLS3许可在桶ONLY前缀foobar-bucket1foobar-bucket2

回答

0

只要存储桶名称是动态的,就不能在您的cloudformation模板中使用正确的名称在其中创建策略。

在实用性递减顺序:

选项1:您的cloudformation模板内创建桶,然后同样的模板内创建相应的IAM角色(见下面的示例)。

AWSTemplateFormatVersion: '2010-09-09' 
Resources: 
    foobarBucket1: 
    Type: AWS::S3::Bucket 
    foobarBucket2: 
    Type: AWS::S3::Bucket 
    LambdaRole: 
    Type: AWS::IAM::Role 
    Properties: 
     AssumeRolePolicyDocument: 
     Version: '2012-10-17' 
     Statement: 
     - Effect: Allow 
      Principal: 
      Service: 
      - lambda.amazonaws.com 
      Action: 
      - sts:AssumeRole 
     Path: "/" 
     Policies: 
     - PolicyName: LambdaRolePolicy 
      PolicyDocument: 
      Version: '2012-10-17' 
      Statement: 
      - Effect: Allow 
       Action: 
       - s3:DeleteObject 
       - s3:GetObject 
       - s3:PutObject 
       Resource: !Join ['', ['arn:aws:s3:::', !Ref foobarBucket1 ]] 
      - Effect: Allow 
       Action: 
       - s3:DeleteObject 
       - s3:GetObject 
       - s3:PutObject 
       Resource: !Join ['', ['arn:aws:s3:::', !Ref foobarBucket2 ]] 

选项2:另一种可能性可能是您将固定前缀合并到策略中,因此部分限制了访问权限。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Action": [ 
       "s3:DeleteObject", 
       "s3:GetObject", 
       "s3:PutObject" 
      ], 
      "Resource": "arn:aws:s3:::foobarbucket1-*", 
      "Effect": "Allow" 
     } 
    ] 
} 

选项3:使用存储桶名称作为cloudformation参数并使用新创建的名称更新现有模板。

+0

我喜欢选项2最好。如果我选择这个选项,我应该从我的模板中删除' - arn:aws:iam :: aws:policy/AmazonS3FullAccess',而不是将它替换为您发布的选项2的片段。 – Anthony

+0

另外,对于选项2 ,首先我需要创建桶的角色呢? – Anthony

+0

是的,您应该使用自定义策略来替换托管策略,该策略可以引用您的名称前缀。在创建角色/策略时,存储桶不一定存在。 –

相关问题