本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
標籤政策語法和範例
此頁面說明標籤政策語法並提供範例。
標籤政策語法
標籤政策是根據 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 工具的特定組態指示:
-
CloudFormation:請參閱 使用 強制執行 CloudFormation 以啟用標記合規勾點
-
Terraform:請參閱 使用 Terraform 強制執行以在 AWS 提供者中啟用標籤政策驗證
-
Pulumi:請參閱 使用 Pulumi 強制執行 以啟用標籤政策報告政策套件