ポリシーと階層評価について

組織ポリシーは、リソースに対する組織の設定制限を定義します。組織ポリシーはリソース階層の下位レベルに継承され、組織ポリシーが設定可能な任意のレベルで拡張または上書きできます。

下の図では、組織レベルで組織ポリシーを設定し、その設定をプロジェクト レベルまで継承しています。プロジェクトに直接ポリシーを適用することもできます。特定のリソースに対する結果は、階層内でのポリシーの定義方法によって変わります。詳細については、下の階層評価をご覧ください。

ポリシー階層

組織ポリシーの種類

リスト型制約とブール型制約があるように、組織ポリシーにもリスト型ポリシーとブール型ポリシーがあります。リスト型ポリシーはリスト型制約のみに、ブール型ポリシーはブール型制約のみに設定できます。また、ポリシー内で RestoreDefault メッセージを使用し、継承されたポリシーを制約のデフォルトで置き換えることもできます。

リスト型ポリシー

リスト型ポリシーを使用すると、特定のサービス アスペクトに許可または拒否する値を定義できます。また、サービスがアスペクトに定義したすべての値を許可または拒否することもできます。ListPolicy メッセージを使用して、リスト型制約でポリシーを適用する方法を構成します。

特定の値のセットを許可する場合、ListPolicy.allowed_values に許可文字列を設定し、ListPolicy.all_valuesALL_VALUES_UNSPECIFIED を設定します。同様に、拒否する値のセットを指定する場合には、ListPolicy.denied_values を設定するときに拒否する文字列を指定し、ListPolicy.all_valuesALL_VALUES_UNSPECIFIED を設定します。

制約に関連するサービス アスペクトのすべての値を許可または拒否する場合には、ListPolicy.all_valuesALLOW または DENY を設定します。このいずれかの文字列を使用する場合、ListPolicy.denied_values または ListPolicy.allowed_values プロパティを設定する必要はありません。

任意のポリシー アタッチ ポイントで、階層内の上下のポリシーで使用されている値の型に関わらず、組織ポリシー管理者は自由に allowed または denied の値を使用できます。階層内のポリシーの評価については、以下のセクションで詳しく説明します。

ブール型ポリシー

ブール型ポリシーは、ブール型制約に対応し、特定のサービス アスペクトを有効または無効にします。Policy.enforcedTrue に設定すると、制約を適用できます。

階層評価

デフォルトでは、リソースにポリシーを設定すると、リソース階層で上位にあるポリシーは無効になります。ただし、リスト型制約の場合、inherit_from_parenttrue に設定すると、親リソースのポリシーから値が継承されます。つまり、ポリシーに設定された値が、上の階層からの値に追加されます。

通常、設定を簡単にし、理解しやすくするため、許可値と拒否値の両方を継承するポリシー設定はおすすめしません。ただし、denied_values が設定されたポリシーを継承するように、allowed_values を設定したポリシーを適用することもできます。この場合、allowed_values で許可する値が denied_values に含まれていてはなりません。

たとえば、constraints/serviceuser.services というリスト型制約を設定しているとします。これは、許可するサービスのリストが指定されたリスト型制約です。この制約のデフォルトは ALLOW に設定されています。

この制約から派生したポリシーが組織レベルに適用されているとします。このポリシーは、サービスの有効化を {compute.googleapis.com, datastore.googleapis.com} に限定しています。inherit_from_parentfalse に指定し、all_valuesDENY に設定したポリシーを組織のプロジェクトに適用すると、API compute.googleapis.com および datastore.googleapis.com(またはその他すべての API)をアクティブにする試みはいずれも拒否されます。

では、いくつかの例を挙げながら、階層でのポリシーの評価方法を説明しましょう。

階層評価の例

以下では、階層によってポリシーの評価方法が変わる例を説明します。

継承値のないプロジェクト

最初に、継承値がない場合について見てみましょう。この組織のポリシーには、次の値が設定されています。

{
  allowed_values: "compute.googleapis.com"
  allowed_values: "datastore.googleapis.com"
}

この組織のプロジェクトには次の値が設定されています。

{
  allowed_values: "dns.googleapis.com"
  allowed_values: "endpoints.googleapis.com"
  inherit_from_parent: false
}

この場合、組織レベルで許可される値は compute.googleapis.comdatastore.googleapis.com です。プロジェクトが親から継承しないように設定されているため、プロジェクト レベルで許可される値は dns.googleapis.comendpoints.googleapis.com になります。

継承値があるプロジェクト

次の例では、プロジェクトが値を継承しています。

前の例と同様に、組織のポリシーには次の値が設定されています。

{
  allowed_values: "compute.googleapis.com"
  allowed_values: "datastore.googleapis.com"
}

プロジェクトの値も同じですが、今回は継承が true に設定されています。

{
  allowed_values: "dns.googleapis.com"
  allowed_values: "endpoints.googleapis.com"
  inherit_from_parent: true
}

この場合、組織レベルで許可される値は compute.googleapis.comdatastore.googleapis.com です。プロジェクトは親から継承するように設定されているため、プロジェクト レベルで許可される値は compute.googleapis.comdatastore.googleapis.comdns.googleapis.comendpoints.googleapis.com となります。

許可値と拒否値のある継承

次の例は少し複雑になります。プロジェクトは許可値を継承し、継承された値の 1 つを拒否します。

今回も組織のポリシーには次の値が設定されています。

{
  allowed_values: "compute.googleapis.com"
  allowed_values: "datastore.googleapis.com"
}

プロジェクトには、組織レベルで許可される値の 1 つを拒否するポリシーが設定されています。

{
  denied_values: "compute.googleapis.com"
}

組織レベルで許可される値は compute.googleapis.comdatastore.googleapis.com です。プロジェクト レベルで許可される値は datastore.googleapis.com だけです。

RestoreDefault によるリセット

RestoreDefault を使用すると、制約のデフォルトの設定にポリシーをリセットできます。

たとえば、組織のポリシーに次の値が設定されているとします。

 {
   allowed_values: "compute.googleapis.com"
   allowed_values: "datastore.googleapis.com"
 }

プロジェクトのポリシーには次の値が設定されています。

 {
   RestoreDefault: {}
 }

この場合、組織レベルで許可される値は compute.googleapis.comdatastore.googleapis.com で、プロジェクト レベルで許可される値は制約のデフォルト値によって異なります(すべて許可かすべて拒否)。制約のデフォルトが ALLOW の場合、すべての値が許可されます。デフォルトが DENY の場合、どの値も許可されません。

ポリシーがないプロジェクト

プロジェクトにポリシーが設定されていない場合は、親のポリシーを継承します。

組織にポリシーが設定されない場合、プロジェクトにポリシーが設定されていないと、各レベルで許可される値は制約のデフォルトによって変わります。制約のデフォルトが ALLOW の場合、すべての値が許可されますが、デフォルトが DENY の場合はどの値も許可されません。

組織にポリシーが設定され、その直下のプロジェクトにポリシーが設定されていない場合、このプロジェクトは組織のポリシーを継承します。

ユニバーサルな ALLOW / DENY で制限を上書きする

組織レベルのポリシーで値を制限し、プロジェクト レベルですべての値を許可するリスト型制約もあります。

組織のポリシーに次の値が設定されているとします。

 {
   allowed_values: "compute.googleapis.com"
   allowed_values: "datastore.googleapis.com"
 }

プロジェクトには次の値が設定されています。

 {
   all: ALLOW
 }

この場合、組織レベルで許可される値は compute.googleapis.comdatastore.googleapis.com に限定されますが、プロジェクト レベルでは任意の値が許可されます。つまり、プロジェクト レベルのポリシーが組織レベルのポリシーを上書きしています。

同様に、組織レベルで許可されている値をプロジェクトで拒否することもできます。たとえば、組織のポリシーに次の値が設定されているとします。

 {
   allowed_values: "compute.googleapis.com"
   allowed_values: "datastore.googleapis.com"
 }

プロジェクトには次のポリシーが設定されています。

 {
   all: DENY
 }

この場合、組織レベルで許可される値は compute.googleapis.comdatastore.googleapis.com になりますが、プロジェクト レベルで許可される値はありません。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Resource Manager のドキュメント