[英]AWS Cloud Formation Elastic Load Balancing Account ID
我正在嘗試創建具有雲形成的模板,該模板設置了將日志寫入S3存儲桶的負載平衡器。 我不想將全部訪問權限授予所有人(例如*),而是希望將PutObject
訪問權限僅限制為負載平衡器帳戶或服務:
{
"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?
}
}
}
}
}
}
該文檔提供了各個地區的ELB實例的帳戶ID。 但是,我正在創建的模板具有可用區參數,用戶可以在其中選擇將堆棧部署到的可用區。 因此,理想情況下,我的存儲桶策略中將包含某種ref
變量,該變量會根據可用性區域獲取負載均衡器的帳戶ID。
我還查看了官方文檔中的示例,但是使用Ref
的一個示例並沒有真正定義變量。
我該如何實現?
編輯 :我的意思是可用區域而不是區域。 輸入參數為用戶提供了區域中可用區域的下拉列表。
我想到了。 它不是真正動態的,但是比直接對id進行硬編碼更好。 按照這個Amazon重新發明的演示文稿 ,正確的方法是首先定義一個映射:
{
"Mappings": {
"RegionalConfigs": {
"us-east-1": {
"AMI": "",
"ELBAccountId": "127311923021",
"ArnPrefix": "arn:aws:"
},
"us-west-1": {
"AMI": "",
"ELBAccountId": "027434742980",
"ArnPrefix": "arn:aws:"
},
"us-west-2": {
"AMI": "",
"ELBAccountId": "797873946194",
"ArnPrefix": "arn:aws:"
}
}
}
}
然后在策略中使用它:
{
"Resources": {
"LoggingBucketPolicy": {
"Type": "AWS::S3::BucketPolicy",
"Properties": {
"PolicyDocument": {
"Version": "",
"Resource": {
"Fn::Join": [
"",
[
{
"Fn::FindInMap": [
"RegionalConfigs",
{
"Ref": "AWS::Region"
},
"ArnPrefix"
]
},
"s3:::",
{
"Ref": "LoggingBucket"
},
"/",
"Logs",
"/AWSLogs/",
{
"Ref": "AWS::AccountId"
},
"/*"
]
]
},
"Principal": {
"AWS": {
"Fn::FindInMap": [
"RegionalConfigs",
{
"Ref": "AWS::Region"
},
"ELBAccountId"
]
}
},
"Action": [
"s3:PutObject"
]
},
"Bucket": {
"Ref": "LoggingBucket"
}
}
}
}
}
沒有包含ELB帳戶ID的變量。 這些是AWS的各種賬戶標識符。
要將它們包括在您的策略中,您必須:
AWS::Region
變量選擇適當的列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.