Amazon web services AWS CFT模板IAM策略

Amazon web services AWS CFT模板IAM策略,amazon-web-services,amazon-s3,amazon-cloudformation,Amazon Web Services,Amazon S3,Amazon Cloudformation,我正在使用CFT创建一个IAM策略,该策略只允许访问一个S3存储桶(也在同一CFT中创建)。以下是CFT的问题所在部分 { "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "BucketCreation":{ "Type": "AWS::S3::Bucket", "Properties": { "BucketNam

我正在使用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语句创建了一个IAM策略
“resource”:“arn:aws:s3:::bucketname”
这只提供bucket访问,而不提供对象级访问。我需要的是资源部分看起来像这样的
“资源”:“arn:aws:s3:::bucketname/*”
。这在CFT中可能吗?

是的,您可以,请参见

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

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

更新:
多亏了@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:很抱歉,我没被淹没。我对它很失望,如果有人能修复它,那会很有帮助。

好的,我想你没有把我的问题答对。我问我们如何通过CFT做到这一点?您提供的链接说明了“*”在IAM策略中的作用。这不是我的问题。我的问题在CFT
的“资源”中很简单:“Fn::GetAtt”:[“BucketCreation”,“Arn”]
这一行将获取bucket的Arn,即
Arn:aws:s3:::bucketname
但是我想要
Arn:aws:s3:::bucketname/*
如何通过CFT获取它?比如说,我们应该这样给出“资源”:“Fn::GetAtt”:[“BucketCreation”,“Arn”]/*还是其他方式?[P.S.我在这里使用的方法是出于示例目的,它不起作用]更新的答案。