階層評価について

リソースに組織のポリシーを設定すると、そのリソースのすべての子孫はデフォルトでその組織のポリシーを継承します。組織リソースに組織のポリシーを設定すると、それらの制限はすべての子リソースに継承されます。

子リソースに異なる構成で同じ組織のポリシーを設定できます。このポリシーは、階層評価のルールと組織のポリシーで定義された制約のタイプに基づいて、継承されたポリシーを上書きするか、継承されたポリシーと結合されます。

始める前に

階層の例

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

継承図

制約は、Google Cloud サービスまたは Google Cloud サービスのリストに適用される特定のタイプの制限です。上記の例では、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 のポリシーは継承されず、デフォルトの制約動作が使用されるため、実際に適用されるポリシーは、 すべて許可するものと評価されます。

階層評価ルール

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

自動的に適用される制約

組織のポリシーが適用されていない場合、組織のポリシーが適用されている最下位の祖先から継承されます。祖先階層のどこにも組織のポリシーが適用されていない場合、制約の Google 管理のデフォルトの動作が適用されます。

組織のポリシーの制約の Google 管理のデフォルトの動作によってオペレーションが制限されている場合、組織のポリシーを明示的に定義していなくても、そのオペレーションは制限されます。これらのオペレーションを許可するには、親ポリシーをオーバーライドする組織のポリシーを作成する必要があります。

オペレーションを制限する Google 管理のデフォルト動作がある組織のポリシーの制約の一覧については、組織のポリシーの制約をご覧ください。

継承

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

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

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

デフォルトの動作を継承する

デフォルトの動作は統合されません。ポリシーが設定されると、常にデフォルトの動作が置き換えられます。次に例を示します。

  • constraints/iam.allowServiceAccountCredentialLifetimeExtension は、組織レベルでデフォルトで DENY に設定されています。
  • この制約では、その組織の直下にあるプロジェクトで「SomeServiceAccount」という値を許可します。

デフォルトの動作はマージされず、常に置き換えられるため、SomeServiceAccount を許可する有効なポリシーが生成されます。一方、組織レベルでポリシーが DENY明示的に設定されている場合、「DENY 値が優先される」ルールが適用され、有効なポリシーは DENY になります。

継承を禁止する

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

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

リソースが組織のポリシーを継承すると、継承されたポリシーが親リソースの組織のポリシーと結合され、調整されます。リストルールの組織のポリシーを評価する場合、DENY 値が常に優先されます。次に例を示します。

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

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

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

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

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

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

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

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