我正在嘗試創建一個模板,其中包含設置將日誌寫入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,或者將輸入變量用於您的模板。 –