我正在尝试创建一个模板,其中包含设置将日志写入S3存储桶的负载平衡器的云阵列。而不是给全面进入每个人(例如*),我想限制PutObject
只能访问负载平衡器帐户或服务:各地区ELB实例AWS Cloud Formation Elastic Load Balancing帐户ID
{
"Resources": {
"LoggingBucketPolicy": {
"Type": "AWS::S3::BucketPolicy",
"Properties": {
"Bucket": {
"Ref": "LoggingBucket"
},
"PolicyDocument": {
"Action": [
"s3:PutObject"
],
"Effect": "Allow",
"Resource": {
"Fn::Join": [
"",
[
"arn:aws:s3:::",
{
"Ref": "LoggingBucket"
},
"/*"
]
]
},
"Principal": {
"Ref": "ElasticLoadBalancingAccountID" //How do I set this dynamically?
}
}
}
}
}
}
的documentation提供帐户ID的。但是,我创建的模板具有可用区参数,用户可以在其中选择可用区来部署堆栈。所以我最想做的是在我的存储桶策略中使用某种ref
变量,该变量根据可用区域获取负载均衡器的帐户ID。
我也看过official documentation中的例子,但使用Ref
的一个例子并没有真正定义变量。
我该如何做到这一点?
编辑:我的意思是可用性区域而不是区域。输入参数为用户提供区域中可用区域的下拉菜单。
Hi..thank大家的响应。我的意思是可用区而不是区域。我尝试了你的建议,但是我得到一个错误:'拒绝存取桶:xxxxxxxxxxx.development。请检查S3bucket权限' – MojoJojo
我创建了一个输出变量来转储'{“Ref”:“AWS :: AccountId”}的值,并证明它写入了我的账户id的值。用于创建堆栈和* not *用于运行ELB的帐户ID,如以下标识所示:http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-access-logs.html#enable-access-logs-console – MojoJojo
好的。我明白你想要做什么。没有可变因素。您必须硬编码这些帐户ID,或者将输入变量用于您的模板。 –