Amazon web services AWS CFT模板IAM策略
我正在使用CFT创建一个IAM策略,该策略只允许访问一个S3存储桶(也在同一CFT中创建)。以下是CFT的问题所在部分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
{
"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.我在这里使用的方法是出于示例目的,它不起作用]更新的答案。