2017-02-15 99 views
0

我試圖創建一個IAM Policy來限制對選定的S3存儲桶的訪問。有一些默認S3 Bucket ARNs,必須總是是存在的,允許模板運營商添加額外Bucket ARNs列表授予訪問,通過Parameter如何將「Always Always」值添加到CommaDelimitedList

在我的模板中,BucketARNsParameter允許運營商指定長度不受限制的ARN列表。

BucketARNs: 
    Type: CommaDelimitedList 
    Description: 'Add the ARN of S3 Buckets that the Get* and List* 
     access to. When specifying a Bucket 2 values should be supplied one for the 
     bucket and for objects within that bucket, for example: arn:aws:s3:::MyContentBucket,arn:aws:s3:::MyContentBucket/* . 
     This defaults to all buckets.' 
    Default: arn:aws:s3:::*, arn:aws:s3:::*/* 

使用該Parameter看起來像

PolicyDocument: 
    Version: '2012-10-17' 
    Statement: 
    - Effect: Allow 
    Action: 
    - s3:Get* 
    - s3:List* 
    Resource: 
     !Ref BucketARNs 

我想要做的就是確保,例如該政策文件

arn:aws:s3:::MyMustHaveBucket, 
arn:aws:s3:::MyMustHaveBucket/* 

ARNS是總是出現在列表BucketARNsParameter中的Default可以由操作員刪除 - 是否將唯一的解決方案添加爲Default值,並在ParameterDescription警告用戶中添加信息以不刪除所需的ARN?它可能很容易被破壞。

有誰知道確保我總是有這些可用的方法嗎?考慮通過Parameter指定的BucketARN列表是可變的嗎?

理想情況下,我想一個列表連接功能

回答

1

兩個選項:

  1. 您可以在使用AllowedPatternString參數以及Default值確保提供的默認值始終包含在提供的參數中,然後使用Fn::Split將參數解析爲數組模板:

    Parameters: 
        BucketARNs: 
        Type: String 
        Default: arn:aws:s3:::*, arn:aws:s3:::*/* 
        AllowedPattern: arn:aws:s3:::\*, arn:aws:s3:::\*\/\*.* 
    Resources: 
        Dummy: 
        Type: AWS::CloudFormation::WaitConditionHandle 
    Outputs: 
        Result: 
        Value: !Join [',', !Split [',', !Ref BucketARNs]] 
    
  2. 您可以沿着使用Fn::SplitFn::SubFn::Join到您的固定值追加到用戶提供的參數:

    Parameters: 
        BucketARNs: 
        Type: CommaDelimitedList 
    Resources: 
        Dummy: 
        Type: AWS::CloudFormation::WaitConditionHandle 
    Outputs: 
        Result: 
        Value: !Join [',', !Split [',', !Sub [ 
         "arn:aws:s3:::*,arn:aws:s3:::*/*,${Buckets}", 
         {Buckets: !Join [',', !Ref BucketARNs]} 
        ]]] 
    

最後在上面的例子中!Join只在堆棧輸出中輸出數組時,在實際屬性輸入模板中使用參數時不需要它們。

+0

我真的很喜歡這個。我認爲你的解決方案也適用於這個問題: http://stackoverflow.com/questions/32082228/add-a-parameterized-list-of-security-groups-to-another-security-groups-ingress?rq = 1 – georgealton

0

使用Fn ::攜手同參數來串聯常數