View a markdown version of this page

標籤政策語法和範例 - AWS Organizations

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

標籤政策語法和範例

此頁面說明標籤政策語法並提供範例。

標籤政策語法

標籤政策是根據 JSON 規則建構的純文字檔。標籤政策的語法遵循宣告政策類型的語法。如需該語法的完整討論,請參閱了解宣告政策繼承。本主題著重於以該一般語法滿足標籤政策類型的特定需求。

下列標籤政策顯示基本的標籤政策語法:

{ "tags": { "costcenter": { "tag_key": { "@@assign": "CostCenter" }, "tag_value": { "@@assign": [ "100", "200", "300*" ] }, "enforced_for": { "@@assign": [ "secretsmanager:ALL_SUPPORTED" ] } } } }

標籤政策語法包括下列元件:

  • tags 欄索引鍵名稱。標籤政策一律以此固定索引鍵名稱開頭。這是上面範例政策的第一行。

  • 唯一識別政策陳述式的政策索引鍵。必須符合「標籤鍵」的值 (大小寫處理除外)。政策值區分大小寫。

    在此範例中,costcenter 是政策索引鍵。

  • 至少有一個標籤鍵,指定允許的標籤鍵含有您希望資源符合的大寫。如果沒有定義大小寫處理,則小寫為標籤鍵的預設大小寫處理。標籤鍵的值必須符合政策鍵的值。但由於政策索引鍵值不區分大小寫,大寫可能有所不同。

    在此範例中,CostCenter 是標籤鍵。這是符合標籤政策規範的大小寫處理。此標籤鍵具有替代大小寫處理的資源,不符合標籤政策規範。

    您可以在標籤政策中定義多個標籤鍵。

  • (選用) 標籤鍵可接受的一或多個標籤值的清單。如果標籤政策未指定標籤鍵的標籤值,則任何值 (包括完全沒有值) 都視為合規。

    在此範例中,CostCenter標籤索引鍵的可接受值為 100、 200和 300*。

  • (選用) enforced_for 選項,指出是否防止對指定的服務和資源執行任何不合規的標記操作。在主控台,這是視覺化編輯器中用於建立標籤政策的 Prevent noncompliant operations for this tag (防止對此標籤執行不合規操作) 選項。此選項的預設設定為 null。

    標籤政策範例指定套用至所有 AWS Secrets Manager 資源的CostCenter標籤必須符合此政策。

    警告

    只有在您使用標籤政策很有經驗時,才應該變更此選項的預設值。否則,可能會使組織帳戶中的使用者無法建立他們所需的資源。

  • 運算子,指定標籤政策如何與組織樹狀結構中的其他標籤政策合併,以建立帳戶的有效的標籤政策。此範例中使用 @@assign,將字串指定給 tag_key、tag_value 和 enforced_for。如需運算子的詳細資訊,請參閱 繼承運算子。

  • 您可以在標籤值中使用*萬用字元。

    • 每個標籤值中只能使用一個萬用字元。例如,允許 *@example.com,但不允許 *@*.com。

    • 您可以使用 enforced_for 欄位中的ALL_SUPPORTED萬用字元搭配某些服務,以針對該服務的所有支援資源啟用強制執行。如需支援 enforced_for 的服務和資源類型清單,請參閱支援強制執行的服務和資源類型。

    • 萬用字元無法用來指定所有服務,也無法用來指定所有服務的某些資源。

標籤政策範例

接下來的範例標籤政策僅供參考。

注意

在您嘗試在組織中使用這些範例標籤政策之前,請注意下列事項:

  • 請確定您已按照建議的工作流程開始使用標籤政策。

  • 您應該仔細檢閱和自訂這些標籤政策,以滿足您的獨特需求。

  • 標籤政策中的所有字元都受制於大小上限。本指南中的範例添加額外空格來顯示標籤政策,以改善可讀性。不過,如果政策大小接近大小上限,為了節省空間,您可以刪除任何空格。空白字元的例子包括引號外面的空格字元和換行符號。

  • 未標記的資源由於不合規而無法出現在結果中。

範例 1:定義整個組織的標籤鍵大小寫

下列範例顯示的標籤政策只定義兩個標籤鍵,以及您希望組織中的帳戶標準化所依據的大小寫。

政策 A – 組織根標籤政策

{ "tags": { "CostCenter": { "tag_key": { "@@assign": "CostCenter", "@@operators_allowed_for_child_policies": ["@@none"] } }, "Project": { "tag_key": { "@@assign": "Project", "@@operators_allowed_for_child_policies": ["@@none"] } } } }

此標籤政策定義兩個標籤鍵:CostCenter 和 Project。將此標籤政策連接至組織根,會產生下列影響:

  • 組織中的所有帳戶都會繼承此標籤政策。

  • 組織中所有帳戶都必須使用已定義的大小寫處理以符合規範。具有 CostCenter 和 Project 標籤的資源符合規範。標籤鍵具有替代大小寫處理的資源 (例如 costcenter、Costcenter 或 COSTCENTER) 不符合規範。

  • @@operators_allowed_for_child_policies": ["@@none"] 行會封鎖標籤鍵。在組織樹狀結構中較下方連接的標籤政策 (子政策),不能使用值-設定運算子來變更標籤鍵 (包括其大小寫處理)。

  • 與所有標籤政策一樣,對於未標記的資源或標籤政策中未定義的標籤,不會評估是否符合標籤政策規範。

AWS 建議您使用此範例做為為您要使用的標籤金鑰建立類似標籤政策的指南。將此標籤政策連接至組織根目錄。然後,建立類似於下一個範例的標籤政策,只為已定義的標籤鍵定義可接受的值。

下一步:定義值

假設您已將先前的標籤政策連接至組織根。接下來,您可以建立如下所示的標籤政策,並連接至帳戶。此政策定義 CostCenter 和 Project 標籤鍵可接受的值。

政策 B – 帳戶標籤政策

{ "tags": { "CostCenter": { "tag_value": { "@@assign": [ "Production", "Test" ] } }, "Project": { "tag_value": { "@@assign": [ "A", "B" ] } } } }

如果您將政策 A 連接至組織根,將政策 B 連接至帳戶,則這些政策合併起來,為帳戶建立下列有效的標籤政策:

政策 A + 政策 B = 帳戶的有效標籤政策

{ "tags": { "Project": { "tag_value": [ "A", "B" ], "tag_key": "Project" }, "CostCenter": { "tag_value": [ "Production", "Test" ], "tag_key": "CostCenter" } } }

如需政策繼承的詳細資訊,包括繼承運算子的運作方式範例和有效的標籤政策範例,請參閱 了解宣告政策繼承。

範例 2:禁止使用標籤鍵

若要禁止使用標籤鍵,您可以將如下所示的標籤政策連接至組織實體。

此範例政策指定 Color 標籤鍵不接受任何值。也會指定在子標籤政策中不允許運算子。因此,在受影響帳號中,資源上的任何 Color 標籤都會被系統視為不相容。然而,enforced_for 選項實際上會阻止受影響帳戶僅標記使用 Color 標籤的 Amazon DynamoDB 資料表。

{ "tags": { "Color": { "tag_key": { "@@operators_allowed_for_child_policies": [ "@@none" ], "@@assign": "Color" }, "tag_value": { "@@operators_allowed_for_child_policies": [ "@@none" ], "@@assign": [] }, "enforced_for": { "@@assign": [ "dynamodb:table" ] } } } }

範例 3:為特定 AWS 服務的所有支援資源類型指定標籤政策

若要為特定 AWS 服務的所有支援資源類型指定標籤政策,請使用 ALL_SUPPORTED 萬用字元。

此政策使用ALL_SUPPORTED萬用字元指定具有標籤索引鍵的所有 Amazon EC2 執行個體Environment只能具有 Prod或 的標籤值Non-prod。此萬用字元為個別列出每個 Amazon EC2 執行個體提供了有效的單行替代方案。如需支援ALL_SUPPORTED萬用字元的服務和資源類型清單,請參閱 支援強制執行的服務和資源類型。

{ "tags": { "Environment": { "tag_key": { "@@assign": "Environment", "@@operators_allowed_for_child_policies": ["@@none"] }, "tag_value": { "@@assign": [ "Prod", "Non-prod" ], "@@operators_allowed_for_child_policies": ["@@none"] }, "enforced_for": { "@@assign": [ "ec2:ALL_SUPPORTED" ] } } } }

範例 4:強制執行合規所需的標籤金鑰

此範例示範如何定義需要所有資源包含強制性合規標籤的標籤政策。組織通常會使用此模式來確保適當的成本分配、所有權追蹤和環境識別。

{ "tags": { "CostCenter": { "report_required_tag_for": { "@@assign": [ "ec2:instance", "s3:bucket", "rds:db", "lambda:function" ] }, "tag_key": { "@@assign": "CostCenter" } }, "Environment": { "report_required_tag_for": { "@@assign": [ "ec2:ALL_SUPPORTED", "rds:ALL_SUPPORTED", "s3:ALL_SUPPORTED" ] }, "tag_key": { "@@assign": "Environment" }, "tag_value": { "@@assign": [ "Production", "Staging", "Development", "Test" ] } }, "Owner": { "report_required_tag_for": { "@@assign": [ "ec2:ALL_SUPPORTED" ] }, "tag_key": { "@@assign": "Owner" } } } }

當您套用此政策並設定具有標籤政策強制執行的 IaC 工具時:

  • CostCenter:EC2 執行個體、S3 儲存貯體、RDS 資料庫和 Lambda 函數的必要項目

  • 環境:所有 EC2、RDS 和 S3 資源都需要,允許的值僅限於生產、預備、開發或測試

  • 擁有者:組織中所有 EC2 資源都需要

符合此政策的範例基礎設施程式碼:

EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-0c02fb55956c7d316 InstanceType: t2.micro Tags: - Key: CostCenter Value: CC-12345 - Key: Environment Value: Test - Key: Owner Value: john.doe@company.com

如果您嘗試在沒有必要標籤的情況下建立資源,您的 IaC 部署會在規劃階段失敗或產生警告,視您的組態而定。在失敗模式下設定時,部署會在建立任何資源之前遭到封鎖。在警告模式下設定時,部署會繼續進行,但會提醒您的團隊缺少標籤。驗證錯誤訊息會準確識別缺少哪些必要標籤,以及需要哪些資源。

如需 IaC 工具的特定組態指示: