補救不符合 Azure 原則規範的資源

您可以透過補救,讓不符合 deployIfNotExistsmodify 效果原則的資源變成符合規範的狀態。 補救可透過補救工作來完成,這些工作會在現有資源和訂用帳戶上部署 deployIfNotExists 範本或已指派原則的 modify 作業,無論該指派是在管理群組、訂用帳戶、資源群組還是個別資源上。 本文說明了解和完成使用「Azure 原則」來進行補救所需的步驟。

補救存取控制的運作方式

Azure 原則在評估 deployIfNotExists 原則期間開始進行範本部署,或是在評估 modify 原則期間修改資源時,會使用與原則指派相關聯的受控識別來操作。 原則指派會使用受控識別進行 Azure 資源授權。 您可以使用系統指派的受控識別 (由原則服務建立) 或使用者指派的身分識別 (由使用者提供)。 受控識別必須獲派補救資源所需的最低角色型存取控制 (RBAC) 角色。 如果受控識別缺少角色,在指派原則或計畫期間,入口網站中就會顯示錯誤。 使用入口網站時,在開始指派之後,「Azure 原則」會自動將所列出的角色授與受控識別。 使用 Azure 軟體開發套件 (SDK) 時,必須手動將角色授與受控識別。 受控識別的位置並不會影響其 Azure 原則的作業。

注意

變更原則定義後,並不會自動更新指派或相關聯的受控識別。

補救安全性可透過下列步驟來設定:

設定原則定義

根據必要條件,原則定義中必須定義 deployIfNotExistsmodify 要成功部署所含範本的內容所需的角色。 對於內建原則定義不需採取任何動作,因為這些角色已預先填入。 對於自訂原則定義,請在 details 屬性下新增 roleDefinitionIds 屬性。 此屬性是一個與您環境中角色相符的字串陣列。 如需完整範例,請參閱 deployIfNotExists 範例modify 範例

"details": {
    ...
    "roleDefinitionIds": [
        "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
        "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ]
}

roleDefinitionIds 屬性會使用完整資源識別碼,而不會採用角色的簡短 roleName。 若要取得您環境中 'Contributor' 角色的識別碼,請使用下列 Azure CLI 程式碼:

az role definition list --name "Contributor"

重要

在原則定義內定義 roleDefinitionIds 或手動指派權限給受控識別時,權限應限縮為最低限度的集合。 如需更多最佳做法,請參閱受控識別最佳做法建議

設定受控識別

每個 Azure 原則指派只能與一個受控識別相關聯。 不過,可以指派多個角色給受控識別。 設定會以兩個步驟執行:先建立系統指派或使用者指派的受控識別,然後為其授與必要的角色。

注意

透過入口網站建立受控識別時,會自動將角色授與受控識別。 如果稍後在原則定義中編輯了 roleDefinitionIds,則必須手動授與新權限,即使在入口網站中亦然。

建立受控識別

使用入口網站建立指派時,Azure 原則可以產生系統指派的受控識別,並為其授與原則定義的 roleDefinitionIds 中所定義的角色。 或者,您可以指定由使用者指派、且接收相同角色指派的受控識別。

Screenshot of a policy assignment creating a system-assigned managed identity in East US with Log Analytics Contributor permissions.

若要在入口網站中設定系統指派的受控識別:

  1. 在 [建立/編輯指派] 檢視的 [補救] 索引標籤上,確定已在 [受控識別類型] 底下選取 [系統指派的受控識別]

  2. 指定要放置受控識別的位置。

  3. 請勿為系統指派的受控識別指派範圍指派範圍,因為範圍會繼承自指派範圍。

若要在入口網站中設定使用者指派的受控識別:

  1. 在 [建立/編輯指派] 檢視的 [補救] 索引標籤上,確定已在 [受控識別類型] 底下選取 [使用者指派的受控識別]

  2. 指定受控識別的裝載範圍。 受控識別的範圍不一定要等同於指派的範圍,但必須在相同的租用戶中。

  3. 在 [現有的使用者指派的身分識別] 底下,選取受控識別。

透過已定義的角色將權限授與受控識別

重要

如果受控識別沒有執行必要補救工作所需的權限,則只會透過入口網站自動授與權限。 若要透過入口網站建立受控識別,您可以略過此步驟。

對於所有其他方法,都必須透過新增角色手動為指派的受控識別授與存取權,否則補救部署將會失敗。

需要手動權限的範例案例:

  • 如果透過 Azure 軟體開發套件 (SDK) 來建立指派
  • 如果由 deployIfNotExistsmodify 修改的資源不在原則指派的範圍內
  • 如果範本存取了原則指派範圍以外的資源屬性

使用入口網站將已定義的角色授與指派項目的受控識別時,有兩種方法:使用存取控制 (IAM),或是編輯原則或計畫指派,然後選取 [儲存]

若要將角色新增至指派項目的受控識別,請依照下列步驟進行操作:

  1. 藉由選取 [所有服務] 然後搜尋並選取 [原則],在 Azure 入口網站中啟動 Azure 原則服務。

  2. 選取 [Azure 原則] 頁面左側的 [指派]

  3. 找出具有受控識別的指派項目,然後選取名稱。

  4. 在編輯頁面上尋找 [指派識別碼] 屬性。 指派識別碼會類似於:

    /subscriptions/{subscriptionId}/resourceGroups/PolicyTarget/providers/Microsoft.Authorization/policyAssignments/2802056bfc094dfb95d4d7a5
    

    受控識別的名稱是指派資源識別碼中的最後一個部分,在此範例中為 2802056bfc094dfb95d4d7a5。 請複製指派資源識別碼的這個部分。

  5. 瀏覽至需要手動新增角色定義的資源或資源父容器 (資源群組、訂用帳戶、管理群組)。

  6. 選取資源頁面中的 [存取控制 (IAM)] 連結,然後選取存取控制頁面頂端的 [+ 新增角色指派]

  7. 從原則定義中選取符合 roleDefinitionId 的適當角色。 將 [存取權指派對象為] 保留設定為預設的 [Azure AD 使用者、群組或應用程式]。 在 [選取] 方塊中,貼上或輸入稍早找到的指派資源識別碼部分。 在搜尋完成之後,選取具有相同名稱的物件以選取識別碼,然後選取 [儲存]

建立補救工作

藉由選取 [所有服務] 然後搜尋並選取 [原則],在 Azure 入口網站中啟動 Azure 原則服務。

Screenshot of searching for Policy in All Services.

步驟 1:起始補救工作建立

有三種方式可透過入口網站建立補救工作。

選項 1:從 [補救] 頁面建立補救工作

  1. 選取「Azure 原則」頁面左側的 [補救]

    Screenshot of the Remediation node on the Policy page.

  2. 所有 deployIfNotExists 和修改原則指派都會顯示在 [要補救原則] 索引標籤。選取不符合規範的資源,以開啟 [新增補救工作] 頁面。

  3. 請依照步驟指定補救工作詳細資料

選項 2:從不符合規範的原則指派建立補救工作

  1. 選取 [Azure 原則] 頁面左側的 [合規性]

  2. 選取包含 deployIfNotExistsmodify 效果、且不符合規範的原則或計畫指派。

  3. 選取頁面頂端的 [建立補救工作] 按鈕,以開啟 [新增補救工作] 頁面。

  4. 請依照步驟指定補救工作詳細資料

選項 3:在原則指派期間建立補救工作

如果要指派的原則或計畫定義具有 deployIfNotExistsModify 效果,則精靈的 [補救] 索引標籤會提供 [建立補救工作] 選項,此選項會在指派原則的同時建立補救工作。

注意

這是最精簡的補救工作建立方法,並且支援用於在訂用帳戶上指派的原則。 對於在管理群組上指派的原則,應在評估判定資源合規性之後,使用選項 1選項 2 來建立補救工作。

  1. 從入口網站中的指派精靈,瀏覽至 [補救] 索引標籤。選取 [建立補救工作] 核取方塊。

  2. 如果補救工作是從計畫指派起始的,請從下拉式清單中選取要補救的原則。

  3. 設定受控識別,並填寫精靈的其餘部分。 補救工作將在建立指派時建立。

步驟 2:指定補救工作詳細資料

只有在使用選項 1選項 2 來起始補救工作建立時,才適用此步驟。

  1. 如果補救工作是從計畫指派起始的,請從下拉式清單中選取要補救的原則。 一次可以透過單一補救工作來補救一個 deployIfNotExistsmodify 原則。

  2. 選擇性地修改頁面上的補救設定。 如需每個設定控制項的相關資訊,請參閱補救工作結構

  3. 在相同頁面上,使用 [範圍] 省略符號挑選從中指派原則的子資源 (連個別資源物件也包含在內),以篩選要補救的資源。 此外,使用 [位置] 下拉式清單進一步篩選資源。

    Screenshot of the Remediate node and the grid of resources to remediate.

  4. 在篩選資源後,選取 [補救] 開始進行補救工作。 原則合規性頁面會開啟至 [補救工作] 索引標籤,以顯示工作進度的狀態。 補救工作所建立的部署會立即開始。

    Screenshot of the Remediation tasks tab and progress of existing remediation tasks.

步驟 3:追蹤補救工作進度

  1. 瀏覽至 [補救] 頁面上的 [補救工作] 索引標籤。 按一下補救工作,以檢視所用篩選的詳細資料、目前狀態,以及要補救的資源清單。

  2. 在 [補救工作詳細資料] 頁面中,以滑鼠右鍵按一下資源,以檢視補救工作的部署或資源。 在資料列結尾選取 [相關事件],以查看錯誤訊息等詳細資料。

    Screenshot of the context menu for a resource on the Remediate task tab.

透過補救工作部署的資源會新增至原則指派詳細資料頁面上的 [已部署資源] 索引標籤中。

下一步