コンプライアンス違反の原因の特定

Azure リソースにポリシー ルールへのコンプライアンス違反が確認された場合は、リソースがルールのどの部分に準拠していないのかを理解することをお勧めします。 また、どのような変更によって、以前は準拠していたリソースがコンプライアンス違反となったのかを把握することも有用です。 この情報を検索するには 2 つの方法があります。

コンプライアンスの詳細

リソースがコンプライアンス違反となった場合は、そのリソースのコンプライアンスの詳細を [Policy compliance] (ポリシー コンプライアンス) ページで確認できます。 [ポリシー準拠情報の詳細] ウィンドウには、次の情報が含まれています。

  • 名前、種類、場所、リソース ID などのリソースの詳細
  • コンプライアンス対応状態と、現在のポリシー割り当ての最後の評価のタイムスタンプ
  • リソースのコンプライアンス違反の 理由 の一覧

重要

コンプライアンス違反 コンプライアンス違反のリソースのコンプライアンスの詳細に、該当のリソースでのプロパティの現在の値が表示されるときには、ユーザーにその種類のリソースに対する読み取り操作が必要です。 たとえば、コンプライアンス違反 のリソースが Microsoft.Compute/virtualMachines の場合、ユーザーには、Microsoft.Compute/virtualMachines/read 操作が必要です。 ユーザーに必要な操作がない場合は、アクセス エラーが表示されます。

コンプライアンスの詳細を表示するには、次の手順に従います。

  1. Azure portal で [すべてのサービス] を選択し、 [Policy] を検索して選択することで、Azure Policy サービスを起動します。

  2. [概要] ページまたは [コンプライアンス] ページで、 [コンプライアンスの状態][非対応] になっているポリシーを選択します。

  3. [ポリシーのコンプライアンス] ページの [リソースのコンプライアンス] タブで、 [コンプライアンスの状態][非対応] になっているリソースを選択したままにする (または右クリックする) か、リソースの省略記号を選択します。 次に、 [ポリシー準拠状況の詳細] を選択します。

    [リソース コンプライアンス] タブの 'ポリシー準拠状況の詳細' リンクのスクリーンショット。

  4. [ポリシー準拠状況の詳細] ウィンドウに、現在のポリシー割り当てに対するリソースの最新の評価からの情報が表示されます。 この例では、フィールド Microsoft.Sql/servers/version12.0 であることが検出されていますが、ポリシー定義では 14.0 を必要としています。 リソースのコンプライアンス違反の理由が複数ある場合は、このウィンドウにそれぞれの理由が表示されます。

    [コンプライアンスの詳細] ウィンドウと、現在の値が 12 で対象の値が 14 であるというコンプライアンス違反の理由を示したスクリーンショット。

    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": {
                    ...
                }
            }
        }
    }
    

    評価されたリソース数を含む ifNotExists の [コンプライアンスの詳細] ウィンドウのスクリーンショット。

Note

データを保護するために、プロパティ値が secret の場合は現在の値にアスタリスクが表示されます。

これらの詳細は、リソースが現在コンプライアンス違反であることの理由を説明するものですが、コンプライアンス違反の原因となった変更がリソースに対して行われたタイミングでは表示しません。 この情報を得るには、「変更履歴 (プレビュー)」を参照してください。

コンプライアンスの理由

リソース マネージャー モードリソース プロバイダー モードでは、コンプライアンス違反の "理由" が異なります。

リソース マネージャー モードの一般的なコンプライアンスの理由

次の表は、リソース マネージャー モードの各 "理由" と、ポリシー定義内でのその条件の対応を示しています。

理由 条件
現在の値には、キーとしてターゲット値を含める必要があります。 containsKey、または notContainsKey ではない
現在の値には、ターゲット値を含める必要があります。 contains、または notContains ではない
現在の値は、ターゲット値と等しくなければなりません。 equals、または notEquals ではない
現在の値は、ターゲット値より小さくなければなりません。 less、または greaterOrEquals ではない
現在の値は、ターゲット値以上でなければなりません。 greaterOrEquals、または less ではない
現在の値は、ターゲット値より大きくなければなりません。 greater、または lessOrEquals ではない
現在の値は、ターゲット値以下でなければなりません。 lessOrEquals、または greater ではない
現在の値は存在している必要があります。 exists
現在の値は、ターゲット値に含まれている必要があります。 in、または notIn ではない
現在の値は、ターゲット値とパターン一致する必要があります。 like、または notLike ではない
現在の値は、ターゲット値と一致する必要があります (大文字/小文字を区別する)。 match、または notMatch ではない
現在の値は、ターゲット値と一致する必要があります (大文字/小文字を区別しない)。 matchInsensitively、または notMatchInsensitively ではない
現在の値には、キーとしてターゲット値を含めることはできません。 notContainsKey、または containsKey ではない
現在の値には、ターゲット値を含めることはできません。 notContains、または contains ではない
現在の値を、ターゲット値と等しくすることはできません。 notEquals、または equals ではない
現在の値は存在してはなりません。 exists ではない
現在の値は、ターゲット値に含まれていてはなりません。 notIn、または in ではない
現在の値は、ターゲット値とパターン一致してはなりません。 notLike、または like ではない
現在の値は、ターゲット値と一致してはなりません (大文字/小文字を区別する)。 notMatch、または match ではない
現在の値は、ターゲット値と一致してはなりません (大文字/小文字を区別しない)。 notMatchInsensitively、または matchInsensitively ではない
ポリシー定義の効果の詳細と一致する関連リソースがありません。 then.details.type で定義されている種類のリソース、およびポリシー ルールの if 部分に定義されているリソースに関連したリソースが存在しません。

Azure Policy リソース プロバイダー モードのコンプライアンスの理由

次の表は、各Microsoft.PolicyInsightsリソース プロバイダー モードの理由コードを対応する説明にマップします。

コンプライアンスの理由コード エラー メッセージと説明
NonModifiablePolicyAlias NonModifiableAliasConflict: エイリアス '{alias}' は、API バージョン '{apiVersion}' を使用する要求では変更できません。 このエラーは、エイリアスが 'modify' 効果をサポートしていないか、別のトークンの種類を使用する 'modify' 効果のみをサポートしている API バージョンを使用する要求の場合に発生します。
AppendPoliciesNotApplicable AppendPoliciesUnableToAppend: エイリアス: '{ aliases }' は、API バージョン '{ apiVersion }' を使用する要求では変更できません。 これは、エイリアスが 'modify' 効果をサポートしていないか、別のトークンの種類を使用する 'modify' 効果をサポートしている API バージョンを使用する要求で発生する可能性があります。
ConflictingAppendPolicies ConflictingAppendPolicies: '{notApplicableFields}' フィールドを変更する競合するポリシー割り当てが見つかりました。 ポリシー識別子: '{policy}'。 ポリシーの割り当てを更新するには、サブスクリプション管理者に問い合わせてください。
AppendPoliciesFieldsExist AppendPoliciesFieldsExistWithDifferentValues: ポリシー割り当てが、要求に既に存在するフィールドに異なる値を追加しようとしました。 フィールド: '{existingFields}'。 ポリシー識別子: '{policy}'。 ポリシーを更新するには、サブスクリプション管理者に問い合わせてください。
AppendPoliciesUndefinedFields AppendPoliciesUndefinedFields: API バージョン '{apiVersion}' の未定義のフィールド プロパティを参照するポリシー定義が見つかりました。 Fields: '{nonExistingFields}'。 ポリシー識別子: '{policy}'。 ポリシーを更新するには、サブスクリプション管理者に問い合わせてください。
MissingRegistrationForType MissingRegistrationForResourceType: サブスクリプションがリソースの種類 '{ResourceType}' に登録されていません。 リソースの種類が存在し、リソースの種類が登録されていることを確認してください。
AmbiguousPolicyEvaluationPaths 要求コンテンツには、ポリシー '{1}' が必要とする 1 つ以上のあいまいなパス '{0}' が含まれています。
InvalidResourceNameWildcardPosition ポリシー定義 '{1}' に関連付けられているポリシー割り当て '{0}' を評価できませんでした。 ifNotExists 条件内のリソース名 '{2}' で、無効な位置にワイルドカード '?' 文字が含まれています。 ワイルドカードは、セグメント内の名前の末尾にのみ単独で配置できます (例: TopLevelResourceName/?)。 ポリシーを修正するか、ポリシーの割り当てを削除してブロックを解除してください。
TooManyResourceNameSegments ポリシー定義 '{1}' に関連付けられているポリシー割り当て '{0}' を評価できませんでした。 ifNotExists 条件内のリソース名 '{2}' に含まれる名前セグメントが多すぎます。 名前セグメントの数は、型セグメントの数 (リソース プロバイダーの名前空間を除く) 以下である必要があります。 ポリシー定義を修正するか、ポリシーの割り当てを削除してブロックを解除してください。
InvalidPolicyFieldPath ポリシー定義内のフィールド パス '{0}' が無効です。 フィールド パスには、空のセグメントが含まれていないようにする必要があります。 セグメントを分割するための '.' 文字と、配列プロパティにアクセスするための '[*]' 文字シーケンスを除いて、英数字のみを含めることができます。

AKS リソース プロバイダー モードのコンプライアンスの理由

次の表は、Microsoft.Kubernetes.Dataリソース プロバイダー モードの各 "理由" と、ポリシー定義内での制約テンプレートの状態との対応を示しています。

理由 制約テンプレートの理由の説明
Constraint/TemplateCreateFailed 制約またはテンプレートがリソースのメタデータ名によるクラスター上の既存の制約またはテンプレートと一致していないポリシー定義に対して、リソースが作成に失敗しました。
Constraint/TemplateUpdateFailed 制約またはテンプレートがリソースのメタデータ名によるクラスター上の既存の制約またはテンプレートと一致しているポリシー定義に対して、制約またはテンプレートが更新に失敗しました。
Constraint/TemplateInstallFailed 制約またはテンプレートのビルドに失敗し、作成または更新操作のためにクラスターにインストールできませんでした。
ConstraintTemplateConflicts テンプレートが、ソースの異なる同じテンプレート名を使用して、1 つ以上のポリシー定義と競合しています。
ConstraintStatusStale 既存の "監査" 状態はありますが、過去 1 時間以内に Gatekeeper による監査は実行されていません。
ConstraintNotProcessed 状態は存在せず、過去 1 時間以内に Gatekeeper による監査は実行されていません。
InvalidConstraint/Template API サーバーで、YAML が正しくないためにリソースが拒否されました。 この理由は、パラメーターの型の不一致が原因になる場合もあります (整数型に文字列が指定された場合など)

注意

クラスター上に既存のポリシー割り当てと制約テンプレートが既にある場合、その制約またはテンプレートが失敗すると、既存の制約またはテンプレートを維持することでクラスターが保護されます。 クラスターでは、ポリシー割り当てまたはアドオンの自己復旧でエラーが解決されるまで、非対応として報告します。 競合の処理の詳細については、「制約テンプレートの競合」を参照してください。

リソース プロバイダー モードのコンポーネントの詳細

リソース プロバイダー モードによる割り当てについては、準拠していないリソースを選択して、詳細なビューを開きます。 [コンポーネント コンプライアンス] タブの下に、割り当てられたポリシーのリソース プロバイダー モードに固有の追加情報があり、"準拠していない" コンポーネントコンポーネント ID が表示されます。

[Component Compliance]\(コンポーネントのコンプライアンス\) タブと、リソース プロバイダー モードの割り当てに対するコンプライアンスの詳細のスクリーンショット。

ゲスト構成のコンプライアンスの詳細

"ゲスト構成" カテゴリ内のポリシー定義については、仮想マシン内で評価された複数の設定が存在する可能性があり、設定ごとの詳細を表示する必要があります。 たとえば、セキュリティ設定の一覧を監査していて、そのうちの 1 つだけが "非対応" 状態の場合は、対応していない特定の設定とその理由を把握しておく必要があります。

また、仮想マシンに直接サインインするアクセス権を持たない可能性もありますが、仮想マシンが準拠していない理由についてレポートする必要があります。

Azure portal

ポリシー準拠の詳細を表示するには、前のセクションと同じ手順に従ってください。

[コンプライアンスの詳細] ウィンドウ ビューで、 [前回の評価済みリソース] のリンクを選択します。

auditIfNotExists 定義のコンプライアンスの詳細を表示したスクリーンショット。

[ゲスト割り当て] ページには、利用可能なコンプライアンスの詳細すべてが表示されます。 ビューの行はそれぞれ、マシン内で実行された評価を表します。 [理由] 列には、ゲストの割り当てが "非準拠" である理由が示されています。 たとえば、パスワード ポリシーを監査する場合、 [理由] 列には、各設定の現在の値を含むテキストが表示されます。

ゲスト割り当てのコンプライアンスの詳細のスクリーンショット。

大規模な構成割り当ての詳細の表示

ゲスト構成機能は、Azure Policy の割り当ての外部で使用できます。 たとえば、Azure AutoManage でゲスト構成割り当てが作成されたり、マシンを配置するときに構成を割り当てたりする場合があります。

テナント全体のゲスト構成割り当てをすべて表示するには、Azure portal から [ゲスト割り当て] ページを開きます。 詳細なコンプライアンス情報を表示するには、"名前" 列のリンクを使用して各割り当てを選択します。

[ゲスト割り当て] ページのスクリーンショット。

変更履歴 (プレビュー)

新しいパブリック プレビューの一環として、完全モードの削除をサポートするすべての Azure リソースについて、過去 14 日間の変更履歴が使用可能です。 変更履歴では、変更が検出された日時についての詳細と、各変更の "差分表示" が提供されます。 変更の検出は、Azure Resource Manager のプロパティが追加、削除、変更されるとトリガーされます。

  1. Azure portal で [すべてのサービス] を選択し、 [Policy] を検索して選択することで、Azure Policy サービスを起動します。

  2. [概要] ページまたは [コンプライアンス] ページで、任意の [コンプライアンスの状態] のポリシーを選択します。

  3. [Policy compliance] (ポリシー コンプライアンス) ページの [リソースのコンプライアンス] タブで、リソースを選択します。

  4. [リソース コンプライアンス] ページで [Change History (preview)](変更履歴 (プレビュー)) タブを選択します。 検出された変更がある場合は、その一覧が表示されます。

    [リソースのコンプライアンス] ページの [変更履歴] タブと検出された変更の時刻のスクリーンショット。

  5. 検出された変更のいずれかを選択します。 [変更履歴] ページに、リソースの 差分表示 が示されます。

    [変更履歴] ページにおけるプロパティの前後の状態の変更履歴の差分表示を示したスクリーンショット。

"差分表示" は、リソースの変更を識別するのに役立ちます。 検出された変更が、リソースの現在のコンプライアンス対応状態に関連していない場合があります。

変更履歴データは、Azure Resource Graph によって提供されます。 Azure portal の外部でこの情報を照会するには、「Get resource changes (リソース変更を取得する)」をご覧ください。

次のステップ