2017-06-06 57 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

是的,您應該使用自定義策略來替換託管策略,該策略可以引用您的名稱前綴。在創建角色/策略時,存儲桶不一定存在。 –

相關問題