带资源的 AWS Cloudformation IAM 策略
AWS Cloudformation IAM Policy with Resource
我想做的是创建一个仅允许访问特定 S3 存储桶的 IAM 策略,我想将该 S3 存储桶作为参数传递。
根据 AWS 的文档,这是 IAM 策略 CloudFormation 模板的样子:
"RolePolicies": {
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyName": "root",
"PolicyDocument": {
"Version" : "2012-10-17",
"Statement": [ {
"Effect": "Allow",
"Action": "*",
"Resource": "*"
} ]
},
问题是,如何让"Resource"成为参数?该参数应该是 S3 存储桶的 arn(例如 arn:aws:s3:::s3-bucket-name)。我会简单地输入一个字符串类型参数并输入整个 arn 还是类似于 AWS::S3::Bucket 类型?无论哪种方式,我都不确定在 "Resource".
之后输入什么
谢谢!
您可以使用Ref with Fn::Join or Fn::Sub
例如:
"Parameters" : {
"BucketName" : {
"Type" : "String",
"Description" : "S3 Bucket name."
}
}
使用 Ref 和 Fn::Join
...
"Resource": { "Fn::Join" : [ "", [ "arn:aws:s3:::", { "Ref" : "BucketName"} ] ] }
...
使用 Fn::Sub:
...
"Resource": { "Fn::Sub": [ "arn:aws:s3:::${BucketName}" ] }
...
有关模板参数的详细信息here
聚会有点晚了。
如果您的存储桶在资源中声明,如下所示:
...
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-bucket-name
...
...然后您可以使用 Fn::GetAtt:
轻松引用它的 ARN
Resource:
Fn::GetAtt: [ MyBucket, "Arn" ]
我想做的是创建一个仅允许访问特定 S3 存储桶的 IAM 策略,我想将该 S3 存储桶作为参数传递。
根据 AWS 的文档,这是 IAM 策略 CloudFormation 模板的样子:
"RolePolicies": {
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyName": "root",
"PolicyDocument": {
"Version" : "2012-10-17",
"Statement": [ {
"Effect": "Allow",
"Action": "*",
"Resource": "*"
} ]
},
问题是,如何让"Resource"成为参数?该参数应该是 S3 存储桶的 arn(例如 arn:aws:s3:::s3-bucket-name)。我会简单地输入一个字符串类型参数并输入整个 arn 还是类似于 AWS::S3::Bucket 类型?无论哪种方式,我都不确定在 "Resource".
之后输入什么谢谢!
您可以使用Ref with Fn::Join or Fn::Sub
例如:
"Parameters" : {
"BucketName" : {
"Type" : "String",
"Description" : "S3 Bucket name."
}
}
使用 Ref 和 Fn::Join
...
"Resource": { "Fn::Join" : [ "", [ "arn:aws:s3:::", { "Ref" : "BucketName"} ] ] }
...
使用 Fn::Sub:
...
"Resource": { "Fn::Sub": [ "arn:aws:s3:::${BucketName}" ] }
...
有关模板参数的详细信息here
聚会有点晚了。
如果您的存储桶在资源中声明,如下所示:
...
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-bucket-name
...
...然后您可以使用 Fn::GetAtt:
轻松引用它的 ARNResource:
Fn::GetAtt: [ MyBucket, "Arn" ]