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

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

コンプライアンスの詳細

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

  • 名前、種類、場所、リソース ID などのリソースの詳細。
  • 現在のポリシー割り当ての最後の評価のコンプライアンス状態とtimestamp。
  • リソースが準拠していない理由のリスト。

重要

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

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

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

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

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

    Screenshot of the View compliance details link on the Resource compliance tab.

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

    Screenshot of the Compliance details pane and reasons for non-compliance that current value is 12 and target value is 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": {
            ...
          }
        }
      }
    }
    

    Screenshot of Compliance details pane for ifNotExists including evaluated resource count.

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 で定義され、ポリシー 規則の 部分が存在しない場合に で定義されたリソースに関連する型のリソース。

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

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

コンプライアンスの理由コード エラー メッセージと説明
NonModifiablePolicyAlias NonModifiableAliasConflict: エイリアス '{alias}' は、API バージョン '{apiVersion}' を使用する要求では変更できません。 このエラーは、エイリアスが 「modify」 効果をサポートしていない API バージョンを使用している要求、または別のトークン型で「modify」 効果のみをサポートしている場合に発生します。
AppendPoliciesNotApplicable AppendPoliciesUnableToAppend: エイリアス: '{ aliases }' は、API バージョン '{ apiVersion }' を使用する要求では変更できません。 これは、エイリアスが「modify」 効果をサポートしていない API バージョンを使用する要求や、別のトークン型で 「modify」 効果をサポートしている場合に発生する可能性があります。
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 既存の 「監査」 状態がありますが、Gatekeeper は過去 1 時間以内に監査を実行していません。
ConstraintNotProcessed 状態がなく、Gatekeeper は過去 1 時間以内に監査を実行していません。
InvalidConstraint/Template 制約テンプレート Rego の内容が無効、無効な YAML、または制約テンプレートと制約テンプレートの間のパラメータ型の不一致 (整数が予期されたときに文字列値を指定する) のいずれかの理由により、リソースが拒否されました。

Note

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

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

リソース プロバイダー モードでの割り当ての場合は、非準拠リソースを選択して、そのコンポーネント コンプライアンス レコードを表示します。 [コンポーネント コンプライアンス] タブには、コンポーネント名、コンポーネント ID、種類などリソース プロバイダー モードに固有の詳細情報が表示されます

Screenshot of Component Compliance dashboard and compliance details for assignments with a Resource Provider mode.

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

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

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

Azure Portal

まず、「 コンプライアンスの詳細 」セクションの同じステップに従って、ポリシー コンプライアンスの詳細を表示します。

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

Screenshot of viewing the auditIfNotExists definition compliance details.

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

Screenshot of the Guest Assignment compliance details.

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

ゲスト構成機能は、Azure Policy の割り当ての外部で使用できます。 たとえば、 Azure Automanage でゲスト構成の割り当てを作成したり、マシンをデプロイするときに構成を割り当てる ことがあります。

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

Screenshot of the Guest Assignment page.

変更履歴 (プレビュー)

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

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

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

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

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

    Screenshot of the Change History tab and detected change times on Resource Compliance page.

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

    Screenshot of the Change History Visual Diff of the before and after state of properties on the Change history page.

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

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

次のステップ