具有资源的AWS Cloudformation IAM策略

时间:2018-04-09 18:04:26

标签: amazon-web-services amazon-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": "*"
           } ]
        },

问题是,你如何制作"资源"一个参数?参数应该是S3存储桶的arn(例如:arn:aws:s3 ::: s3-bucket-name)。我会简单地输入一个字符串类型参数并输出整个arn,还是像AWS :: S3 :: Bucket类型?无论哪种方式,我都不确定在"资源"之后输入什么。

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以将RefFn::JoinFn::Sub

一起使用

例如:

"Parameters" : {
    "BucketName" : {
        "Type" : "String",
        "Description" : "S3 Bucket name."
    }
}

使用参考 Fn ::加入

    ...
        "Resource": { "Fn::Join" : [ "", [ "arn:aws:s3:::", { "Ref" : "BucketName"} ] ] }
    ...

使用 Fn :: Sub

    ...
        "Resource": { "Fn::Sub": [ "arn:aws:s3:::${BucketName}" ] }
    ...

有关模板参数here

的详细信息

答案 1 :(得分:0)

聚会晚一点。

如果您的存储桶在参考资料中被声明,则如下所示:

class Person {
  var id: String? = null
  var name: String? = null
} 
fun Person.clone(): Person {
  val person = Person()
  person.id = id
  person.name = name
  return person 
}

...然后您可以使用Fn :: GetAtt:

轻松引用它的ARN
...
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: my-bucket-name
...