判斷不符合的原因
當 Azure 資源被判斷為不符合原則規則時,了解該資源不符合規則的哪個部分很有幫助。 這也有助於了解何種變更改變了先前符合規範的資源,使其變成不合規範。 有兩種方式可尋找此資訊:
合規性詳細資料
當資源不符合規範時,可從 [原則合規性] 頁面取得該資源的合規性詳細資料。 [合規性詳細資料] 窗格包含下列資訊:
- 資源詳細資料,例如名稱、類型、位置和資源識別碼。
- 上次評估目前原則指派的合規性狀態和時間戳記。
- 資源不符合規範的原因清單。
重要
當「不符合規範」資源的合規性詳細資料顯示該資源的目前屬性值時,使用者就必須對資源的類型進行讀取作業。 例如,如果「不符合規範」的資源是 Microsoft.Compute/virtualMachines
,則使用者必須擁有 Microsoft.Compute/virtualMachines/read
作業。 如果使用者沒有所需的作業,則會顯示存取錯誤。
若要檢視合規性詳細資料,請遵循下列步驟:
藉由選取 [所有服務] 然後搜尋並選取 [原則],在 Azure 入口網站中啟動 Azure 原則服務。
在 [概觀] 或 [合規性] 頁面上,選取合規性狀態「不符合規範」的原則。
從 [原則合規性] 頁面的 [資源合規性] 索引標籤下,選取並按住 (或以滑鼠右鍵按一下) 或選取 [合規性狀態] 為不符合規範之資源的省略符號。 然後選取 [檢視合規性詳細資料]。
[合規性詳細資料] 窗格會顯示從資源的最新評估到目前原則指派的資訊。 在此範例中,當原則定義預計是 14.0 時,卻發現
Microsoft.Sql/servers/version
欄位是 12.0。 如果資源因多種原因而不符合規範,則每個原因都會列在此窗格上。對於
auditIfNotExists
或deployIfNotExists
原則定義,詳細資料包含 details.type 屬性和任何選擇性屬性。 如需清單,請參閱 auditIfNotExists 屬性和 deployIfNotExists 屬性。 [上次評估的資源] 是定義的 details 區段中的相關資源。部分
deployIfNotExists
定義範例:{ "if": { "field": "type", "equals": "[parameters('resourceType')]" }, "then": { "effect": "deployIfNotExists", "details": { "type": "Microsoft.Insights/metricAlerts", "existenceCondition": { "field": "name", "equals": "[concat(parameters('alertNamePrefix'), '-', resourcegroup().name, '-', field('name'))]" }, "existenceScope": "subscription", "deployment": { ... } } } }
注意
若要保護資料,當屬性值是「秘密」時,則目前值會顯示星號。
這些詳細資料會說明資源目前不符合規範的原因,但不會顯示何時對資源進行變更,使其變成不符合規範。 如需相關資訊,請參閱變更歷程記錄 (預覽)。
合規性原因
Resource Manager 模式和資源提供者模式各有不同的不符合規範原因。
一般 Resource Manager 模式合規性原因
下列矩陣將每個可能的 Resource Manager 模式原因對應至原則定義中負責的條件:
原因 | Condition |
---|---|
目前的值必須包含作為索引鍵的目標值。 | containsKey 或不是 notContainsKey |
目前的值必須包含目標值。 | contains 或不是 notContains |
目前的值必須等於目標值。 | equals 或不是 notEquals |
目前的值必須小於目標值。 | less 或不是 greaterOrEquals |
目前的值必須大於或等於目標值。 | greaterOrEquals 或不是 less |
目前的值必須大於目標值。 | greater 或不是 lessOrEquals |
目前的值必須小於或等於目標值。 | lessOrEquals 或不是 greater |
目前的值必須存在。 | 存在 |
目前的值必須位於目標值內。 | in 或不是 notIn |
目前的值必須與目標值相同。 | like 或不是 notLike |
目前的值必須符合目標值 (區分大小寫)。 | match 或不是 notMatch |
目前的值必須符合目標值 (不區分大小寫)。 | matchInsensitively 或不是 notMatchInsensitively |
目前的值不得包含作為索引鍵的目標值。 | notContainsKey 或不是 containsKey |
目前的值不得包含目標值。 | notContains 或不是 contains |
目前的值不得等於目標值。 | notEquals 或不是 equals |
目前的值不得存在。 | 不存在 |
目前的值不得在目標值之中。 | notIn 或不是 in |
目前的值不得與目標值相同。 | notLike 或不是 like |
目前的值不得符合目標值 (區分大小寫)。 | notMatch 或不是 match |
目前的值不得符合目標值 (不區分大小寫)。 | notMatchInsensitively 或不是 matchInsensitively |
沒有任何相關的資源,符合原則定義中的效果詳細資料。 | 不存在屬於 then.details.type 中所定義的類型且與原則規則的 if 部分中所定義的資源相關的資源。 |
Azure 原則資源提供者模式合規性原因
下表會將每個Microsoft.PolicyInsights
資源提供者模式原因代碼對應至其對應的說明:
合規性原因代碼 | 錯誤訊息和說明 |
---|---|
NonModifiablePolicyAlias | NonModifiableAliasConflict:別名 '{alias}' 無法在使用 API 版本 '{apiVersion}' 的要求中修改。 當使用 API 版本的要求不支援「修改」效果,或只支援具有不同權杖類型的「修改」效果時,就會發生此錯誤。 |
AppendPoliciesNotApplicable | AppendPoliciesUnableToAppend:別名:'{ aliases }' 無法在使用 API 版本:'{ apiVersion }' 的要求中修改。 這可能發生於使用別名不支援「修改」效果的 API 版本,或支援具有不同權杖類型的「修改」效果的要求中。 |
ConflictingAppendPolicies | ConflictingAppendPolicies:找到修改 '{notApplicableFields}' 欄位的衝突原則指派。 原則識別碼:'{policy}'。 請連絡訂用帳戶管理員以更新原則指派。 |
AppendPoliciesFieldsExist | AppendPoliciesFieldsExistWithDifferentValues:原則指派嘗試了附加已存在於要求中具有不同值的欄位。 欄位:'{existingFields}'。 原則識別碼:'{policy}'。 請連絡訂用帳戶管理員以更新原則。 |
AppendPoliciesUndefinedFields | AppendPoliciesUndefinedFields:找到參考 API 版本 '{apiVersion}' 未定義欄位屬性的原則定義。 欄位:'{nonExistingFields}'。 原則識別碼:'{policy}'。 請連絡訂用帳戶管理員以更新原則。 |
MissingRegistrationForType | MissingRegistrationForResourceType:訂用帳戶未針對資源類型 '{ResourceType}' 註冊。 請檢查資源類型是否存在,以及資源類型是否已註冊。 |
AmbiguousPolicyEvaluationPaths | 要求內容具有一或多個模稜兩可的路徑:原則需要 '{0}':'{1}'。 |
InvalidResourceNameWildcardPosition | 無法評估與原則定義 '{1}' 相關聯的原則指派 '{0}'。 ifNotExists 條件內的資源名稱 '{2}' 在無效的位置包含萬用字元 '?' 字元。 萬用字元本身只能位於區段中名稱的結尾 (例如 TopLevelResourceName/?)。 請修正原則,或移除原則指派以解除封鎖。 |
TooManyResourceNameSegments | 無法評估與原則定義 '{1}' 相關聯的原則指派 '{0}'。 ifNotExists 條件內的資源名稱 '{2}' 包含太多名稱區段。 名稱區段數目必須等於或小於類型區段數目 (不包含資源提供者命名空間)。 請修正原則定義,或移除原則指派以解除封鎖。 |
InvalidPolicyFieldPath | 原則定義內的欄位路徑 '{0}' 無效。 欄位路徑不得包含空白區段。 其只能包含英數位元 (但分割區段的 '.' 字元和 '[*]' 字元序列的除外) 以存取陣列屬性。 |
AKS 資源提供者模式合規性原因
下表會將每個Microsoft.Kubernetes.Data
資源提供者模式原因對應至原則定義中限制式範本的負責任狀態:
原因 | 限制式範本原因描述 |
---|---|
Constraint/TemplateCreateFailed | 資源無法依資源中繼資料名稱,針對具有的限制式/範本不符合叢集上現有的限制式/範本的原則定義建立。 |
Constraint/TemplateUpdateFailed | 限制式/範本無法依資源中繼資料名稱,針對具有的限制式/範本符合叢集上現有的限制式/範本的原則定義更新。 |
Constraint/TemplateInstallFailed | 限制式/範本無法建置,且無法安裝在叢集上以進行建立或更新作業。 |
ConstraintTemplateConflicts | 範本與使用相同的範本名稱但具有不同來源的一或多個原則定義發生衝突。 |
ConstraintStatusStale | 有現有的「稽核」狀態,但 Gatekeeper 在過去一小時內未執行稽核。 |
ConstraintNotProcessed | 沒有狀態,且 Gatekeeper 在過去一小時內未執行稽核。 |
InvalidConstraint/Template | 資源因為下列其中一個原因而遭到拒絕:條件約束範本 Rego 內容無效、YAML 無效,或條件約束與條件約束範本之間的參數類型不相符 (預期整數時卻提供字串值)。 |
注意
對於叢集上已存在的現有原則指派和限制式範本,如果該限制式/範本失敗,則會藉由維護現有的限制式/範本來保護叢集。 在原則指派或附加元件自我修復失敗為之前,叢集會回報為不符合規範。 如需處理衝突的詳細資訊,請參閱限制式範本衝突。
資源提供者模式的元件詳細資料
針對具有資源提供者模式的指派,請選取 [不符合規範] 的資源,以檢視其元件合規性記錄。 [元件合規性] 索引標籤會顯示資源提供者模式特有的詳細資訊,例如元件名稱、元件識別碼和類型。
來賓設定的合規性詳細資料
對於來賓設定類別中的原則定義,虛擬機器內可能會評估多項設定,而且您必須檢視每項設定的詳細資料。 例如,如果您正在稽核安全性設定的清單,而且其中只有一個原則具有不符合規範狀態,您就需要知道哪些特定設定不符合規範,以及原因為何。
您也可能沒有直接登入虛擬機器的權限,但您必須回報虛擬機器為何不符合規範。
Azure 入口網站
首先遵循合規性詳細資料一節中的相同步驟,以檢視原則合規性詳細資料。
在 [合規性詳細資料] 窗格檢視中,選取 [上次評估的資源] 連結。
[來賓指派] 頁面會顯示所有可用的合規性詳細資料。 檢視中的每一列都代表在機器內執行的評估。 [原因] 欄會顯示一個詞組,說明來賓指派為何「不符合規範」。 例如,若您要稽核密碼原則,[原因] 欄會顯示包含每項設定目前值的文字。
大規模檢視設定指派詳細資料
來賓設定功能可以在 Azure 原則指派外部使用。 例如,Azure Automanage 可建立來賓設定指派,或者您可以在部署機器時指派設定。
若要檢視租用戶中的所有來賓設定指派,請從 Azure 入口網站開啟 [來賓指派] 頁面。 若要檢視詳細的合規性資訊,請使用 [名稱] 資料行中的連結來選取每個指派。
變更歷程記錄 (預覽)
在新的公開預覽版中,過去 14 天的變更歷程記錄適用於所有支援完整模式刪除的 Azure 資源。 變更歷程記錄會提供關於何時偵測到變更的詳細資料,以及每項變更的視覺化差異。 新增、移除或更改 Azure Resource Manager 屬性時,就會觸發變更偵測。
藉由選取 [所有服務] 然後搜尋並選取 [原則],在 Azure 入口網站中啟動 Azure 原則服務。
在 [概觀] 或 [合規性] 頁面上,選取處於任何合規性狀態的原則。
從 [原則合規性] 頁面的 [資源合規性] 索引標籤下方,選取資源。
選取 [資源合規性] 頁面上的 [變更歷程記錄 (預覽)] 索引標籤。 偵測到的變更清單 (如果有的話) 會隨即顯示。
選取其中一個偵測到的變更。 資源會在 [變更歷程記錄] 頁面上顯示其「視覺化差異」。
視覺化差異有助於識別資源的變更。 偵測到的變更可能與資源目前的合規性狀態不相關。
變更歷程記錄資料是由 Azure Resource Graph 提供。 若要在 Azure 入口網站之外查詢此資訊,請參閱取得資源變更。
下一步
- 在 Azure 原則範例檢閱範例。
- 檢閱 Azure 原則定義結構。
- 檢閱了解原則效果。
- 了解如何以程式設計方式建立原則。
- 了解如何取得合規性資料。
- 了解如何補救不符合規範的資源。
- 透過使用 Azure 管理群組來組織資源來檢閱何謂管理群組。