階層評価について

組織ポリシーをリソース階層ノードに設定すると、そのリソース階層ノードのすべての子孫はデフォルトでその組織ポリシーを継承します。 ルート組織ノードで組織のポリシーを設定した場合、制限は、子であるすべてのフォルダ、プロジェクト、リソースに継承されます。

子ノードには、同じ組織のポリシーを別の構成で設定できます。このポリシーは、階層評価のルールに基づき、継承されたポリシーを上書きするか、継承されたポリシーと結合されます。

準備

階層の例

以下のリソース階層図では、各ノードが組織のポリシーを設定し、設定したポリシーが親ノードのポリシーを継承するかどうかを定義しています。色付きの図形は、組織のポリシーで許可または拒否する値を表します。

継承図

Constraint は、組織のポリシーによって制御される動作の定義です。上の例では、Constraint は制約のデフォルトを表します。これは、制約に対する組織ポリシーがない場合の動作を定義します。この例の制約のデフォルトでは、 のすべての値が許可されます。その下のノードは、値を許可または拒否することによって、制約のデフォルトをオーバーライドする組織のポリシーを定義します。

各ノードでの有効なポリシーは、継承のルールに基づいて評価されます。組織のポリシーが設定されていない場合、ノードはデフォルトの制約動作を継承します。組織のポリシーを設定すると、設定したポリシーが代わりに使用されます。上の例では、Organization Node 赤色の四角と 緑色の円を許可するポリシーを定義しています。

Organization Node の下の階層にあるリソースノードは、次のように評価されます。

  1. Resource 1 は、inheritFromParentTRUE に設定して 青色のひし形を許可するポリシーを定義します。Organization Node のポリシーは継承され、Resource 1 に設定されたポリシーと結合されます。実際に適用されるポリシーは、 赤色の四角、 緑色の円、および 青色のひし形を許可するものと評価されます。

  2. Resource 2 は、inheritFromParentTRUE に設定して 緑色の円を拒否するポリシーを定義します。ポリシーの調整中は、拒否する値のほうが常に優先されます。Organization Node のポリシーは継承され、Resource 2 に設定されたポリシーと結合されます。実際に適用されるポリシーは、 赤色の四角のみを許可するものと評価されます。

  3. Resource 3 は、inheritFromParentFALSE に設定して 黄色の六角形を許可するポリシーを定義します。Organization Node のポリシーは継承されないため、実際に適用されるポリシーは 黄色の六角形のみを許可するものと評価されます。

  4. Resource 4 は、inheritFromParentFALSE に設定して restoreDefault 値を含めるポリシーを定義します。Organization Node のポリシーは継承されず、デフォルトの制約動作が使用されるため、実際に適用されるポリシーは、 すべて許可するものと評価されます。

階層評価ルール

特定のリソースで組織ポリシーがどのように評価されるかは、次のルールによって決まります。組織のポリシーを設定するには、組織ポリシー管理者の役割が必要です。

組織のポリシーが設定されていない

組織のポリシーを設定しない場合、リソースノードはポリシーセットが設定されている最下位の祖先から継承します。祖先階層のどこにもポリシーが設定されていない場合は、制約のデフォルトの動作が適用されます。

継承

デフォルトで組織のポリシーセットが設定されているリソースノードは、階層内の親ノードによって設定されたポリシーよりも優先されます。ただし、リソースノードで inheritFromParent = true が設定されている場合は、親リソースの有効なポリシーが継承、結合、調整され、その結果有効なポリシーが評価されます。次に例を示します。

  • あるフォルダで「projects/123」という値を拒否する。
  • そのフォルダの下にあるプロジェクトで「projects/456」という値を拒否する。

この 2 つのポリシーは結合され、実際に適用されるポリシーでは projects/123projects/456 の両方が拒否されます。

継承を禁止する

inheritFromParent = false が含まれるポリシーがリソース階層ノードに設定されている場合、そのノードは親から組織のポリシーを継承しません。代わりに、ポリシーで許可または拒否する値を設定しない限り、ノードは制約のデフォルトの動作を継承します。

ポリシーの競合を調整する

子ノードがリスト型制約に基づく組織ポリシーを継承すると、継承されたポリシーがノードの組織ポリシーと結合され、調整されます。リスト型ポリシーの評価では、DENY 値が常に優先されます。次に例を示します。

  • あるフォルダで「projects/123」という値を拒否する。
  • そのフォルダの下にあるプロジェクトで「projects/123」という値を許可する。

これらのポリシーが結合されると、DENY 値が優先されます。実際に適用されるポリシーではすべての値が拒否されます。値を拒否しているのが親ノードであるか子ノードであるかにかかわらず、評価は同じです。許可リストと拒否リストの両方に値を含めないことをおすすめします。両方に値を含めると、ポリシーを理解するのが難しくなる可能性があります。

ブール型制約から派生した組織ポリシーの場合、ポリシーの結合や調整は行われません。リソースノードでポリシーが指定されている場合、TRUE 値や FALSE 値を使用して、実際に適用されるポリシーが決定されます。次に例を示します。

  • あるフォルダで constraints/compute.disableSerialPortAccess に対して enforced: true を設定する。

  • そのフォルダの下にあるプロジェクトで constraints/compute.disableSerialPortAccess に対して enforced: false を設定する。

プロジェクトでは enforced: false が定義されているため、フォルダに設定された enforced: true 値は無視されます。組織のポリシーは、そのプロジェクトに対して制約を適用しません。

デフォルト ポリシーにリセット

RestoreDefault を呼び出すと、組織のポリシーは現在のリソース階層ノードの制約のデフォルト動作を使用します。子ノードもこの動作を継承します。