簡體   English   中英

AWS Cloud Formation彈性負載平衡帳戶ID

[英]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的各種賬戶標識符。

要將它們包括在您的策略中,您必須:

  1. 硬編碼這些帳戶ID,
  2. 在模板中使用輸入變量,或者
  3. 嘗試使用CloudFormation“地圖”設置地區到帳戶ID列表的地圖,然后使用AWS::Region變量選擇適當的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM