Key Vault での Azure Policy の実装に関する問題のトラブルシューティング
この記事では、Key Vault 用の Azure Policy を設定するときに発生する可能性のある一般的なエラーをトラブルシューティングする方法について説明し、それらを解決する方法を提案します。
Key Vault 用の Azure Policy について
Azure Policy は、ユーザーが大規模な Azure 環境を監査および管理する機能を提供するガバナンス ツールです。 Azure Policy では、割り当てられたポリシー規則に Azure リソースが確実に準拠するように、Azure リソースにガードレールを配置できます。 これによりユーザーは、利用中の Azure 環境の監査、リアルタイムの適用、修復を実行できます。 ポリシーによって実行された監査の結果は、どのリソースとコンポーネントが準拠しているか、していないかのドリルダウンを表示できるコンプライアンス ダッシュボードでユーザーが使用できるようになります。
ログ記録
ポリシーの評価がどのように行われているかを監視するには、Key Vault のログを確認できます。 Azure Key Vault のログ記録を有効にすることで、指定した Azure Storage アカウントに情報が保存されます。 詳しい手順については、「Key Vault のログ記録を有効にする方法」を参照してください。
ログを有効にすると、ポリシー関連のログ情報を収集するために、AzurePolicyEvaluationDetails という名前の新しいコンテナーが指定したストレージ アカウントに自動的に作成されます。
Note
監視データ (特にログ ファイル) には機密情報が含まれている可能性があるため、それへのアクセスを厳密に規制する必要があります。 組み込みの監視 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 | ポリシー割り当ての ID |
AssignmentDisplayName | ポリシー割り当てのフレンドリ名 |
DefinitionId | 割り当てのポリシー定義の ID |
DefinitionDisplayName | 割り当てのポリシー定義のフレンドリ名 |
Outcome | ポリシー評価の結果 |
ExpressionEvaluationDetails | ポリシーの評価中に実行される評価の詳細 |
ExpressionValue | ポリシー評価中の指定されたフィールドの実際の値 |
TargetValue | 指定されたフィールドの予期される値 |
よく寄せられる質問
Azure Policy によって Key Vault の回復がブロックされる
理由の 1 つとして、サブスクリプション (または管理グループ) に、回復をブロックしているポリシーがあることが考えられます。 この問題を解決するには、コンテナーが回復中のときは適用されないようにポリシーを調整します。
組み込みポリシーが原因で、回復でエラーの種類 RequestDisallowedByPolicy
が表示される場合は、最新バージョンを使用していることを確認してください。
独自のロジックでカスタム ポリシーを作成した場合は、論理的な削除を要求するために使用できるポリシーの部分の例を次に示します。 論理的に削除されたコンテナーの回復では、コンテナーの作成または更新と同じ API を使用します。 ただし、コンテナーのプロパティを指定する代わりに、値が "recover" である 1 つの "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 時間かかることがあります。
軽減策: ポリシー割り当ての効果を "Disabled" に更新します。
ARM テンプレートによるシークレット作成でポリシーが評価されない
シークレットの作成を評価するデータ プレーン ポリシーは、ARM テンプレートによって作成されたシークレットには、シークレットの作成時には適用されません。 24 時間後に、コンプライアンス チェックが自動的に実行されて、コンプライアンスの結果を確認できるようになります。
次の手順
- Azure Policy の使用に関するエラーをトラブルシューティングする方法を確認する
- Azure Policy の既知の問題について確認する