Share via


Azure 原則 定義修改效果

效果 modify 可用來在建立或更新期間新增、更新或移除訂用帳戶或資源上的屬性或標籤。 常見的範例是更新 costCenter 等資源上的標籤。 現有的不符合規範的資源可以使用補救工作來補救。 單一Modify規則可以有任意數目的作業。 效果設定為Modify的原則指派需要 受控識別 才能進行補救。

效果 modify 支援下列作業:

  • 新增、取代或移除資源標籤。 針對標籤,除非目標資源是資源群組,否則Modify原則應該將 模式 設定 indexed 為 。
  • 新增或取代虛擬機和 虛擬機器擴展集的受控識別類型 (identity.type) 值。 您只能修改identity.type虛擬機的 或 虛擬機器擴展集。
  • 新增或取代特定別名的值。
    • Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' } Azure PowerShell 4.6.0 或更高版本中使用 ,以取得可與 搭配 modify使用的別名清單。

重要

如果您要管理標籤,建議您使用Modify而不是Append,因為Modify提供更多作業類型和補救現有資源的能力。 不過,如果您無法建立受控識別或Modify尚不支援資源屬性的別名,建議使用Append。

修改評估

在資源提供者建立或更新資源期間,修改會先評估要求。 當符合原則規則的條件時if,作業modify會套用至要求內容。 每個 modify 作業都可以指定條件,以判斷套用的時間。 略過具有 false 條件評估的作業。

指定別名時,會執行更多檢查,以確保 modify 作業不會以導致資源提供者拒絕要求內容的方式變更:

  • 別名所對應的屬性在要求的 API 版本中標示為 修改。
  • 作業中的 modify 令牌類型符合要求 API 版本中屬性的預期令牌類型。

如果其中一項檢查失敗,原則評估會回復為指定的 conflictEffect

重要

建議修改包含別名的定義使用 核衝突效果 ,以避免使用 API 版本失敗的要求,其中對應的屬性無法「可修改」。 如果相同別名在 API 版本間的行為不同,條件式修改作業可用來判斷 modify 每個 API 版本所使用的作業。

當使用 modify 效果的原則定義在評估週期中執行時,它不會對已經存在的資源進行變更。 相反地,它會將符合 if 條件的任何資源標示為不符合規範。

修改屬性

details效果的 modify 屬性具有定義補救operations所需的許可權以及用來新增、更新或移除卷標值的所有子屬性。

  • roleDefinitionIds (必要)
    • 此屬性必須包含符合訂用帳戶可存取之角色型訪問控制角色標識碼的字串數位。 如需詳細資訊,請參閱 補救 - 設定原則定義
    • 定義的角色必須包含授與給 參與者 角色的所有作業。
  • conflictEffect (選擇性)
    • 如果多個原則定義修改相同的屬性,或當作業無法在指定的別名上運作時 modify ,判斷哪個原則定義會「獲勝」。
      • 對於新的或更新的資源,具有 拒絕 的原則定義優先。 具有 稽核 的原則定義會略過所有 operations。 如果一個以上的原則定義具有拒絕的效果,要求就會因為衝突而遭到拒絕。 如果所有原則定義都有 稽核,則不會 operations 處理任何衝突的原則定義。
      • 對於現有的資源,如果有多個原則定義有效果 拒絕,則合規性狀態為 [衝突]。 如果一或多個原則定義具有拒絕效果,則每個指派都會傳回不符合規範合規性狀態。
    • 可用的值: 稽核拒絕停用
    • 預設值為 deny
  • operations (必要)
    • 要完成比對資源之所有標記作業的陣列。
    • 性能:
      • operation (必要)
        • 定義要對比對資源採取的動作。 選項包括: addOrReplaceAddRemove新增 的行為類似於 附加 效果。
      • field (必要)
        • 要新增、取代或移除的標記。 標記名稱必須遵守其他 欄位的相同命名慣例。
      • value (選擇性)
        • 要設定標籤的值。
        • 如果 operationaddOrReplaceAdd,則需要此屬性。
      • condition (選擇性)

修改作業

屬性 operations 陣列可讓您從單一原則定義以不同方式改變數個標籤。 每個作業都是由、 fieldvalue 屬性所operation組成。 會 operation 決定補救工作對標籤執行的作業、 field 決定要改變的標記,以及 value 定義該標記的新設定。 下列範例會進行下列標記變更:

  • environment將標籤設定為 「Test」 即使它已經存在具有不同的值也一樣。
  • 移除標記 TempResource
  • 將標籤設定為原則 Dept 指派上設定的原則參數 DeptName
"details": {
  ...
  "operations": [
    {
      "operation": "addOrReplace",
      "field": "tags['environment']",
      "value": "Test"
    },
    {
      "operation": "Remove",
      "field": "tags['TempResource']",
    },
    {
      "operation": "addOrReplace",
      "field": "tags['Dept']",
      "value": "[parameters('DeptName')]"
    }
  ]
}

屬性 operation 具有下列選項:

作業 描述
addOrReplace 將定義的屬性或標記和值新增至資源,即使屬性或標記已經存在具有不同值也一樣。
add 將定義的屬性或標記和值新增至資源。
remove 從資源中移除定義的屬性或標記。

修改範例

範例 1:新增 environment 標記,並將現有的 environment 標記取代為 “Test”:

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
    ],
    "operations": [
      {
        "operation": "addOrReplace",
        "field": "tags['environment']",
        "value": "Test"
      }
    ]
  }
}

範例 2:移除 env 標記,並新增 environment 標記,或以參數化值取代現有的 environment 標籤:

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
    ],
    "conflictEffect": "deny",
    "operations": [
      {
        "operation": "Remove",
        "field": "tags['env']"
      },
      {
        "operation": "addOrReplace",
        "field": "tags['environment']",
        "value": "[parameters('tagValue')]"
      }
    ]
  }
}

範例 3:確定記憶體帳戶不允許 Blob 公用存取,只有在評估 API 版本大於或等於 2019-04-01的要求時,modify才會套用此作業:

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/microsoft.authorization/roleDefinitions/17d1049b-9a84-46fb-8f53-869881c3d3ab"
    ],
    "conflictEffect": "audit",
    "operations": [
      {
        "condition": "[greaterOrEquals(requestContext().apiVersion, '2019-04-01')]",
        "operation": "addOrReplace",
        "field": "Microsoft.Storage/storageAccounts/allowBlobPublicAccess",
        "value": false
      }
    ]
  }
}

下一步