AWS CFT模板IAM策略

时间:2018-09-20 10:35:54

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

我正在使用CFT创建一个IAM策略,该策略仅允许单独访问一个S3存储桶(这也是在同一CFT本身中创建的)。这是CFT问题所在的部分

    {
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "BucketCreation":{
            "Type": "AWS::S3::Bucket",
            "Properties": {
               "BucketName":"samplebucket",
              }
            },
        "IAMPolicy":{
          "Type": "AWS::IAM::Policy",
          "Properties": {
            "PolicyName": "ListS3BucketsPolicy",
            "PolicyDocument": {
                "Statement": [{
                    "Effect": "Allow",
                    "Action": [
                        "s3:*"
                    ],
                    "Resource": "Fn::GetAtt" : [ "BucketCreation" , "Arn" ]
                }]
             }
          }
       } 
    } 
  }

现在,上面的cft使用资源语句"Resource": "arn:aws:s3:::bucketname"创建了一个IAM策略,这仅提供了存储桶访问权限,而没有对象级访问权限。我需要的是资源部分,看起来像这样"Resource": "arn:aws:s3:::bucketname/*"。在CFT中有可能吗?

2 个答案:

答案 0 :(得分:1)

是的,请参见here

  

您可以使用通配符作为资源ARN的一部分。您可以使用   任何ARN段(各部分中的通配符(*和?)   用冒号分隔)。星号(*)表示以下各项的任意组合:   零个或多个字符,问号(?)代表任何单个字符   字符。您可以使用多个*或?每个段中的字符,但   通配符不能跨越段。

     

此ARN使用ARN的相对ID部分中的通配符*来   识别示例存储桶中的所有对象。

更新: 为了简化/*,请像intrinsic functions那样查看Join

答案 1 :(得分:0)

感谢@titogeo。我找到了解决方法。在这里

    {
     "AWSTemplateFormatVersion": "2010-09-09",
     "Resources": {
        "BucketCreation":{
           "Type": "AWS::S3::Bucket",
           "Properties": {
              "BucketName":"samplebucket"
             }
          },
        "IAMPolicy":{
          "Type": "AWS::IAM::Policy",
          "Properties": {
             "PolicyName": "ListS3BucketsPolicy",
             "PolicyDocument": {
                 "Statement": [{
                     "Effect": "Allow",
                     "Action": [
                         "s3:*"
                      ],
                  "Resource":{ 
                      "Fn::Join":["",[
                                       {
                                         "Fn::GetAtt" : [ "BucketCreation" , "Arn" ]
                                        },
                                       "/*"
                                      ]
                                  ]
                             }
                        }]
                     }
                 }
             } 
         }

     }

P.S:对不起,我的意愿很差。我对此感到沮丧,如果有人可以修复它,那将是有帮助的。