標籤是將 Azure 資源組織成分類的重要部分。 當您依照標籤管理的最佳做法操作時,標籤可作為使用 Azure 原則來套用商務原則或使用成本管理來追蹤成本的基礎。 無論您使用標籤的方式或原因為何,能夠在 Azure 資源上快速新增、變更和移除這些標籤,都是十分重要的。 若要查看您的 Azure 資源是否支援標記,請參閱標記支援。
Azure 原則 的修改效果是設計來協助治理標籤,而不論您處於何種資源控管階段。
Modify 協助時機:
- 您不熟悉雲端,且沒有標籤控管。
- 已經有數千個沒有標籤治理的資源。
- 已經有您需要變更的現有分類法。
在本教學課程中,您會完成下列工作:
- 識別您的商務需求
- 將每項需求對應至原則定義
- 將標籤原則分組成一個計畫
必要條件
若要完成此教學課程,您需要 Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
識別需求
就像任何良好的治理控制實作一樣,這些需求應來自於您的商務需求,並且在建立技術控制之前受到充分了解。 在此案例教學課程中,我們的商務需求如下:
- 所有資源的兩個必要標籤: CostCenter 和
Env。 -
CostCenter 必須存在於所有容器和個別資源上。
- 資源繼承自其位於的容器,但可能會個別覆寫。
-
Env必須存在於所有容器和個別資源上。- 資源會依容器命名配置來判斷環境,而且可能不會覆寫。
- 容器中的所有資源都是相同環境的一部分。
設定 CostCenter 標籤
就 Azure 原則所管理的 Azure 環境而言,CostCenter 標籤需求會產生如下結果:
- 拒絕遺漏 CostCenter 標籤的資源群組。
- 修改資源,以在遺失時從父資源群組新增 CostCenter 標籤。
拒絕遺漏 CostCenter 標籤的資源群組
因為資源群組的 CostCenter 無法由資源群組的名稱來決定,所以它必須具有在要求上定義的標籤,才能建立資源群組。 具有拒絕效果的下列原則規則可防止建立或更新沒有 CostCenter 標籤的資源群組:
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
},
{
"field": "tags['CostCenter']",
"exists": false
}
]
},
"then": {
"effect": "deny"
}
注意
當此原則規則以資源群組為目標時, mode 原則定義上的 必須是 All , Indexed而不是 。
在遺漏 CostCenter 標記時,修改資源以繼承該標籤
第二個 CostCenter 需求是要讓任何資源在標籤遺漏時從父資源群組繼承標籤。 如果已在資源上定義該標籤,即使該標籤與父資源群組不同,也必須保持原狀。 下列原則規則使用 modify:
"policyRule": {
"if": {
"field": "tags['CostCenter']",
"exists": "false"
},
"then": {
"effect": "modify",
"details": {
"roleDefinitionIds": [
"/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
],
"operations": [
{
"operation": "add",
"field": "tags['CostCenter']",
"value": "[resourcegroup().tags['CostCenter']]"
}
]
}
}
}
此原則規則會add使用 作業,而不是 addOrReplace ,因為我們不想在補救現有資源時變更標籤值。 它也會使用 [resourcegroup()] 範本函式來取得父資源群組中的標籤值。
注意
當此原則規則以支援標籤的資源為目標時,原則定義上的模式必須是「已編製索引」。 這種設定也可確保此原則會略過資源群組。
設定 Env 標籤
就由 Azure 原則 所管理的 Azure 環境而言,Env標記需求會呼叫下列結果:
-
Env根據資源群組的命名配置修改資源群組上的標記 - 將
Env資源群組中所有資源的標記修改為與父資源群組相同的
根據名稱修改資源群組 Env 標籤
您的 Azure 環境中每個環境都需要修改原則。
modify每個原則的原則看起來類似下列原則定義:
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
},
{
"field": "name",
"like": "prd-*"
},
{
"field": "tags['Env']",
"notEquals": "Production"
}
]
},
"then": {
"effect": "modify",
"details": {
"roleDefinitionIds": [
"/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
],
"operations": [
{
"operation": "addOrReplace",
"field": "tags['Env']",
"value": "Production"
}
]
}
}
}
注意
當此原則規則以資源群組為目標時, mode 原則定義上的 必須是 All , Indexed而不是 。
符合此原則的資源群組,僅限於將範例命名配置用於 prd- 之生產資源的群組。 您可以使用數 match 個條件來達成更複雜的命名配置,而不是此範例中的單一 like 。
修改資源以繼承 Env 標籤
商務需求會要求所有資源具有 Env 其父資源群組所執行的標記。 無法覆寫此標記,因此請 addOrReplace 搭配 修改 效果使用 作業。 範例 modify 原則看起來像下列規則:
"policyRule": {
"if": {
"anyOf": [
{
"field": "tags['Env']",
"notEquals": "[resourcegroup().tags['Env']]"
},
{
"field": "tags['Env']",
"exists": false
}
]
},
"then": {
"effect": "modify",
"details": {
"roleDefinitionIds": [
"/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
],
"operations": [
{
"operation": "addOrReplace",
"field": "tags['Env']",
"value": "[resourcegroup().tags['Env']]"
}
]
}
}
}
注意
當此原則規則以支援標籤的資源為目標時, mode 原則定義上的 必須是 Indexed。 這種設定也可確保此原則會略過資源群組。
此原則規則會尋找標籤沒有其父資源群組值 Env 或遺漏 Env 標籤的任何資源。 比對資源已 Env 將其標籤設定為父資源群組值,即使標籤已存在於資源上,但具有不同的值也一樣。
指派方案並補救資源
建立標籤標原則之後,將它們加入單一標記治理計劃,並將其指派給管理群組或訂用帳戶。 方案與包含的原則接著會評估現有資源的合規性,並改變新資源或更新資源的要求,以符合 if 原則規則中的屬性。 不過,原則並不會自動以定義的標籤變更來更新不符合規範的現有資源。
如同 deployIfNotExists 原則,原則會 modify 使用補救工作來改變現有的不符合規範的資源。 請遵循操作說明補救資源的指示,以識別不符合規範modify的資源,並將標籤更正到您定義的分類法。
清除資源
如果您已完成本教學課程中的資源使用,請使用下列步驟來刪除您所建立的任何指派或定義:
選取 Azure 原則頁面左側 [製作] 下的 [定義] (如果您嘗試刪除指派,則選取 [指派])。
搜尋您要移除的新計畫或原則定義 (或指派)。
以滑鼠右鍵按鍵單擊數據列,或選取定義或指派結尾的省略號,然後選取 [刪除定義] 或 [刪除指派]。
檢閱
在本教學課程中,您已了解下列下列工作:
- 識別您的商務需求
- 將每項需求對應至原則定義
- 將標籤原則分組成一個方案
下一步
若要深入了解原則定義的結構,請閱讀這篇文章: