針對在 Key Vault 上實施 Azure 原則的問題進行疑難排解
本文將引導您針對設定 Key Vault 的 Azure 原則時可能發生的一般錯誤進行疑難排解,並建議解決這些錯誤的方法。
關於 Key Vault 的 Azure 原則
Azure 原則是一個治理工具,可讓使用者大規模地稽核和管理其 Azure 環境。 Azure 原則可讓您為 Azure 資源提供防護措施,確保其符合指派的原則規則。 可讓使用者對其 Azure 環境執行稽核、即時強制作業及補救。 使用者可以在合規性儀表板中取得由原則執行的稽核結果,還可以讓他們深入查看符合及不符合規範的資源和元件。
記錄
為了監視原則評估的進行方式,您可以檢閱 Key Vault 記錄。 為 Azure Key Vault 啟用記錄功能,以將資訊儲存在您提供的 Azure 儲存體帳戶中。 如需逐步指引,請參閱如何啟用 Key Vault 記錄。
當您啟用記錄功能時,系統會自動建立名為 AzurePolicyEvaluationDetails 的新容器,以在您指定的儲存體帳戶中收集原則相關的記錄資訊。
注意
您應該嚴格規範對監視資料的存取,特別是記錄檔,因為這些檔案可能包含敏感性資訊。 了解如何套用 Azure 內建監視角色並限制存取。
各個 blob 皆會儲存為文字,並格式化為 JSON blob。
讓我們看看金鑰原則的範例記錄項目:金鑰應設定到期日。 此原則會評估金鑰保存庫中的所有金鑰,以及將未設定到期日的金鑰標示為不符合規範。
{
"ObjectName": "example",
"ObjectType": "Key",
"IsComplianceCheck": false,
"EvaluationDetails": [
{
"AssignmentId": "<subscription ID>",
"AssignmentDisplayName": "[Preview]: Key Vault keys should have an expiration date",
"DefinitionId": "<definition ID>",
"DefinitionDisplayName": "[Preview]: Key Vault keys should have an expiration date",
"Outcome": "NonCompliant",
"ExpressionEvaluationDetails": [
{
"Result": "True",
"Expression": "type",
"ExpressionKind": "Field",
"ExpressionValue": "Microsoft.KeyVault.Data/vaults/keys",
"TargetValue": "Microsoft.KeyVault.Data/vaults/keys",
"Operator": "Equals"
},
{
"Result": "True",
"Expression": "Microsoft.KeyVault.Data/vaults/keys/attributes.expiresOn",
"ExpressionKind": "Field",
"ExpressionValue": "******",
"TargetValue": "False",
"Operator": "Exists"
}
]
}
]
}
下表列出各個欄位的名稱和其描述:
欄位名稱 | 描述 |
---|---|
ObjectName | 物件的名稱 |
ObjectType | 金鑰保存庫物件的類型,憑證、祕密或金鑰 |
IsComplianceCheck | 如果在夜間稽核期間進行評估,則為 True;如果在建立或更新資源期間進行評估,則為 False |
AssignmentId | 原則指派的識別碼 |
AssignmentDisplayName | 原則指派的易記名稱 |
DefinitionId | 指派的原則定義識別碼 |
DefinitionDisplayName | 指派的原則定義易記名稱 |
結果 | 原則評估的結果 |
ExpressionEvaluationDetails | 原則評估期間所執行評估的詳細資料 |
ExpressionValue | 原則評估期間指定欄位的實際值 |
TargetValue | 指定欄位的預期值 |
常見問題集
金鑰保存庫復原遭到 Azure 原則封鎖
其中一個原因可能是您的訂閱 (或管理群組) 具有封鎖復原的原則。 修正方式是調整原則,使其不會在復原保存庫時套用。
如果您在復原時因為內建原則而看到錯誤類型 RequestDisallowedByPolicy
,請確定您使用的是最新版本。
如果您使用自己的邏輯來建立自訂原則,以下是可用於要求虛刪除的原則部分範例。 復原已虛刪除的保存庫時,會使用與建立或更新保存庫相同的 API。 不過,其具有值為 "recover" 的單一 "createMode" 屬性,而不會指定保存庫的屬性。 保存庫會以其刪除時的任何屬性還原。 除非已設定特定屬性,否則會封鎖要求的原則也會封鎖已虛刪除保存庫的復原。 修正方法是包含一個子句,使原則忽略 "createMode" 為 "recover" 的要求:
您會看到其包含一個子句,使原則只在 "createMode" 不等於 "recover" 時套用:
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.KeyVault/vaults"
},
{
"not": {
"field": "Microsoft.Keyvault/vaults/createMode",
"equals": "recover"
}
},
{
"anyOf": [
{
"field": "Microsoft.KeyVault/vaults/enableSoftDelete",
"exists": "false"
},
{
"field": "Microsoft.KeyVault/vaults/enableSoftDelete",
"equals": "false"
}
]
}
]
},
"then": {
"effect": "[parameters('effect')]"
}
}
在 Key Vault 上刪除 Azure 原則指派時發生延遲
Microsoft.KeyVault.Datat:已刪除的原則指派最多可能需要 24 小時的時間才會停止實施。
降低:將原則指派的功效更新為「已停用」。
透過 ARM 範本建立祕密時遺漏原則評估
評估祕密建立的資料平面原則,不適用於秘密建立時透過 ARM 範本建立的祕密。 過了 24 小時之後,就會自動進行合規性檢查,屆時即可檢閱合規性結果。