包含资源的 AWS Cloudformation IAM 策略

Vin*_*nny 5 amazon-web-services aws-cloudformation

我想要做的是创建一个 IAM 策略,该策略仅允许访问某个 S3 存储桶,并且我想将该 S3 存储桶作为参数传递。

根据 AWS 的文档,IAM 策略 CloudFormation 模板如下所示:

"RolePolicies": {
     "Type": "AWS::IAM::Policy",
     "Properties": {
        "PolicyName": "root",
        "PolicyDocument": {
           "Version" : "2012-10-17",
           "Statement": [ {
              "Effect": "Allow",
              "Action": "*",
              "Resource": "*"
           } ]
        },
Run Code Online (Sandbox Code Playgroud)

问题是,如何使“Resource”成为参数?该参数应该是 S3 存储桶的 arn(例如 arn:aws:s3:::s3-bucket-name)。我是简单地输入一个字符串类型参数并输入整个 arn 还是类似于 AWS::S3::Bucket 类型?不管怎样,我不确定在“资源”之后要输入什么。

谢谢!

Mic*_* Z. 4

您可以将RefFn::JoinFn::Sub 一起使用

例如:

"Parameters" : {
    "BucketName" : {
        "Type" : "String",
        "Description" : "S3 Bucket name."
    }
}
Run Code Online (Sandbox Code Playgroud)

使用RefFn::Join

    ...
        "Resource": { "Fn::Join" : [ "", [ "arn:aws:s3:::", { "Ref" : "BucketName"} ] ] }
    ...
Run Code Online (Sandbox Code Playgroud)

使用Fn::Sub

    ...
        "Resource": { "Fn::Sub": [ "arn:aws:s3:::${BucketName}" ] }
    ...
Run Code Online (Sandbox Code Playgroud)

有关模板参数的更多信息请参见此处