本文會引導您針對設定 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 | 指派的原則定義易記名稱 |
結果 | 原則評估的結果 |
表達式評估詳細資訊 | 政策評估期間所進行評估的詳情 |
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.Data:已刪除的原則指派可能需要最多 24 小時才能停止強制執行。
風險降低:將原則指派的效果更新為「已停用」。
透過 ARM 範本建立祕密時遺漏原則評估
評估祕密建立的資料平面原則不適用於秘密建立時透過 ARM 範本建立的祕密。 24 小時之後,當自動化合規性檢查發生時,即可檢閱合規性結果。
後續步驟
- 瞭解如何 針對 Azure 環境中使用的原則錯誤進行疑難排解
- 瞭解 Azure Policy 的已知問題