タグを使用した組織のポリシーの設定

タグを使用すると、リソースに特定のタグが付加されているかどうかに基づいて、条件付きでポリシーの許可や拒否を行えます。タグと組織のポリシーの条件付き適用を使用すると、階層内のリソースを集中管理できます。

始める前に

タグとその仕組みのより詳しい説明は、タグの概要をご覧ください。

タグの使用方法について詳しくは、タグの作成と管理をご覧ください。

必要なロール

組織のポリシーを管理するために必要な権限を取得するには、組織に対する組織のポリシー管理者roles/orgpolicy.policyAdmin)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

組織ポリシーの管理を委任するには、組織ポリシー管理者ロール バインディングに IAM 条件を追加します。プリンシパルが組織のポリシーを管理できるリソースを制御するには、特定のタグを条件としてロール バインディングを作成します。詳細については、制約の使用をご覧ください。

タグを使用した組織のポリシーの設定

タグを使用して組織のポリシーを有効にする場所を決定するには、組織のポリシーの YAML ファイルで条件を指定する必要があります。特定のタグ Key-Value ペアに一致するように条件を設定し、組織のポリシーを適用するために特定のタグ値を設定することが要求できます。

タグキーに一致するように条件を設定することもできます。これにより、タグ値に関係なく、そのタグキーを持つすべてのリソースに対して適用を有効または無効にできます。

ほとんどの組織のポリシーは、リソースの作成時または更新時に評価され、適用されます。必須タグを使用すると、リソースの作成時にリソースを管理できます。

リストルールの例

次の例は、gcp.resourceLocations レガシー マネージド制約を適用する組織のポリシーを設定する方法を示しています。この組織のポリシーでは、同じポリシー ファイルに設定された条件付き値と無条件の値の両方が使用されます。

コンソール

組織のポリシーを設定する手順は次のとおりです。

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. プロジェクト選択ツールから、組織のポリシーを設定するプロジェクトを選択します。

  3. [組織のポリシー] ページで、リストから制約を選択します。その制約の [ポリシーの詳細] ページが表示されます。

  4. このリソースの組織のポリシーを更新するには、[ポリシーを管理] をクリックします。

  5. [ポリシーの編集] ページで、[親のポリシーをオーバーライドする] を選択します。

  6. [ポリシーの適用] で、適用オプションを選択します。

    • 組織のポリシーを結合してまとめて評価するには、[親と結合する] を選択します。継承とリソース階層の詳細については、階層評価についてをご覧ください。

    • 親リソースから継承されたポリシーをオーバーライドするには、[置換] を選択します。

  7. [ルールを追加] をクリックします。

  8. [ポリシー値] で、この組織のポリシーですべての値を許可するか、すべての値を拒否するか、または値のカスタムセットを指定するかを選択します。

    • ポリシーで使用できる特定の値は、ポリシーが適用されるサービスによって異なります。使用可能な制約と値の一覧については、組織のポリシーの制約をご覧ください。
  9. タグで組織のポリシーに条件を設定するには、[条件を追加] をクリックします。

    1. [タイトル] フィールドに、条件の名前を入力します。

    2. [説明] フィールドに、条件の説明を入力します。この説明では、必須タグとそれらがリソースに及ぼす影響について説明します。

    3. 条件作成ツールを使用して、制約を有効にするために特定のタグを必要とする条件を作成できます。

      1. [条件タイプ] ボックスで、[タグ] を選択します。

      2. 条件の演算子を選択します。

        • タグ全体を照合するには、タグの名前空間付き名で has value 演算子を使用するか、タグのキー ID と値 ID で has value ID 演算子を使用します。

        • タグキーのみを照合するには、タグキーの名前空間付き名で has key 演算子を使用するか、タグキー ID で has key ID 演算子を使用します。

      3. [追加] をクリックすると、複数の条件を作成できます。別の条件を追加する場合は、[And] を切り替えることで、すべての条件が満たされるように条件ロジックを設定できます。[Or] を切り替えることで、条件のいずれか 1 つだけが正になるように条件ロジックを設定できます。

      4. 条件フィールドの右側にある大きな [X] をクリックして、式を削除できます。

      5. 条件の編集が完了したら、[保存] をクリックします。

    4. 条件エディタを使用して、条件式をプログラムで作成できます。現在の条件セットのプログラムによるレンダリングも表示されます。

      条件式には、|| または && 演算子で結合された 1 ~ 10 個のサブ式を含める必要があります。各サブ式は、次のいずれかの関数である必要があります。

      • "resource.matchTag('KEY_NAME', 'VALUE_SHORT_NAME')"

        次のように置き換えます。

        • KEY_NAME: タグキーの名前空間付きの名前。例: 123456789012/env

        • VALUE_SHORT_NAME は、タグ値の短縮名に置き換えます。例: prod

        例: resource.matchTag('123456789012/environment, 'prod')

      • "resource.matchTagId('KEY_ID', 'VALUE_ID')"

        次のように置き換えます。

        • KEY_ID は、タグキーの永続 ID に置き換えます。例: tagKeys/123456789012

        • VALUE_ID は、タグ値の永続 ID に置き換えます。例: tagValues/567890123456

        例: resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')

      • "resource.hasTagKey('KEY_NAME')"

        KEY_NAME は、タグキーの名前空間付きの名前に置き換えます。例: 123456789012/env

        例: resource.matchTag('123456789012/environment, 'prod')

      • "resource.hasTagKeyId('KEY_ID')"

        KEY_ID は、タグキーの永続 ID に置き換えます。例: tagKeys/123456789012

        例: resource.matchTagId('tagKeys/123456789012')

      1. 条件エディタを使用して、! 論理演算子を適用できます。たとえば、クエリ !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') は、us-west1 タグのないリソースに組織のポリシーの制約を適用します。
  10. ポリシーを適用するには、[ポリシーを設定] をクリックします。

gcloud

組織のポリシーを設定するには、組織のポリシーを保存する YAML ファイルを作成します。

name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.resourceLocations
spec:
  rules:
  # As there is no condition specified, this allowedValue is enforced unconditionally.
  - values:
      allowedValues:
      - us-east1-locations
  # This condition applies to the values block.
  - condition:
      expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-west1')"
    values:
      allowedValues:
      - us-west1-locations

タグの Namespace 名で resource.matchTag 演算子を使用すると、条件にタグ全体を一致させることができます。

タグキーのみを照合するには、タグキーの名前空間名で resource.hasTagKey 演算子を使用します。特定のタグキーの任意のタグ値を照合するには、resource.hasTagKeyID 演算子とタグキー ID を使用します。

set-policy コマンドを実行します。

gcloud org-policies set-policy POLICY_PATH

以下を置き換えます。

  • POLICY_PATH: 組織のポリシーの YAML ファイルのパスに置き換えます

  • RESOURCE_TYPE: organizations, folders または projects

  • RESOURCE_ID: RESOURCE_TYPE で指定されたリソースのタイプに応じた、組織 ID、フォルダ ID、プロジェクト ID またはプロジェクト番号に置き換えます

  • ORGANIZATION_ID: タグキーの親組織

この組織のポリシーの場合、リソースとそのすべての子リソースには gcp.resourceLocations レガシー マネージド制約が適用され、allowedValuesus-east1-locations のみになります。タグ location: us-west1 が設定されているリソースには、gcp.resourceLocations レガシー マネージド制約が適用され、allowedValuesus-east1-locationsus-west1-locations です。

このようにして、1 つの組織のポリシー内の制約に条件付きと無条件の両方の値のセットを適用できます。

ブール値ルールの例

次の例は、compute.disableSerialPortAccess レガシー マネージド制約を適用する組織のポリシーを設定する方法を示しています。この組織のポリシーでは、すべてのシリアルポートがリソースにアクセスできるように指定しますが、条件を使用して、一致するタグを持つリソースのみにシリアルポートへのアクセスを制限します。

コンソール

組織のポリシーを設定する手順は次のとおりです。

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. プロジェクト選択ツールから、組織のポリシーを設定するプロジェクトを選択します。

  3. [組織のポリシー] ページのリストから制約を選択します。 その制約の [ポリシーの詳細] ページが表示されます。

  4. このリソースの組織のポリシーを更新するには、[ポリシーを管理] をクリックします。

  5. [ポリシーの編集] ページで、[親のポリシーをオーバーライドする] を選択します。

  6. [ルールを追加] をクリックします。

  7. [適用] で、この組織のポリシーの適用を有効にするかどうかを選択します。

  8. タグで組織のポリシーに条件を設定するには、[条件を追加] をクリックします。組織のポリシーに条件付きルールを追加する場合は、無条件のルールを 1 つだけ追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。

    1. [タイトル] フィールドに、条件の名前を入力します。

    2. [説明] フィールドに、条件の説明を入力します。この説明では、必須タグとそれらがリソースに及ぼす影響について説明します。

    3. 条件作成ツールを使用して、制約を有効にするために特定のタグを必要とする条件を作成できます。

      1. [条件タイプ] ボックスで、[タグ] を選択します。

      2. 条件の演算子を選択します。

        • タグ全体を照合するには、タグの名前空間付き名で has value 演算子を使用するか、タグのキー ID と値 ID で has value ID 演算子を使用します。

        • タグキーのみを照合するには、タグキーの名前空間付き名で has key 演算子を使用するか、タグキー ID で has key ID 演算子を使用します。

      3. [追加] をクリックすると、複数の条件を作成できます。別の条件を追加する場合は、[And] を切り替えることで、すべての条件が満たされるように条件ロジックを設定できます。[Or] を切り替えることで、条件のいずれか 1 つだけが正になるように条件ロジックを設定できます。

      4. 条件フィールドの右側にある大きな [X] をクリックして、式を削除できます。

      5. 条件の編集が完了したら、[保存] をクリックします。

      6. 条件が適用される組織ポリシーには、無条件のルールが 1 つだけ必要です。[ルールを追加] をクリックし、この組織のポリシーの適用をデフォルトでオンにするかオフにするかを設定します。

    4. 条件エディタを使用して、条件式をプログラムで作成できます。現在の条件セットのプログラムによるレンダリングも表示されます。

      条件式には、|| または && 演算子で結合された 1 ~ 10 個のサブ式を含める必要があります。各サブ式は、次のいずれかの形式にする必要があります。

      • "resource.matchTag('KEY_NAME', 'VALUE_SHORT_NAME')"

        次のように置き換えます。

        • KEY_NAME: タグキーの名前空間付きの名前。例: 123456789012/env

        • VALUE_SHORT_NAME は、タグ値の短縮名に置き換えます。例: prod

      • "resource.matchTagId('KEY_ID', 'VALUE_ID')"

        次のように置き換えます。

        • KEY_ID は、タグキーの永続 ID に置き換えます。例: tagKeys/123456789012

        • VALUE_ID は、タグ値の永続 ID に置き換えます。例: tagValues/567890123456

      1. 条件エディタを使用して、! 論理演算子を適用できます。たとえば、クエリ !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') は、us-west1 タグのないリソースに組織のポリシーの制約を適用します。
  9. 組織ポリシーを完成させて適用するには、[保存] をクリックします。

gcloud

組織のポリシーを設定するには、組織のポリシーを保存する YAML ファイルを作成します。

name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.disableSerialPortAccess
spec:
  rules:
  - condition:
      expression: "resource.matchTag('ORGANIZATION_ID/disableSerialAccess', 'yes')"
    enforce: true
  - enforce: false

タグの Namespace 名で resource.matchTag 演算子を使用すると、条件にタグ全体を一致させることができます。

タグキーのみを照合するには、タグキーの名前空間名で resource.hasTagKey 演算子を使用します。特定のタグキーの任意のタグ値を照合するには、resource.hasTagKeyID 演算子とタグキー ID を使用します。

set-policy コマンドを実行します。

gcloud org-policies set-policy POLICY_PATH

以下を置き換えます。

  • POLICY_PATH: 組織のポリシーの YAML ファイルのパスに置き換えます

  • RESOURCE_TYPE: organizations, folders または projects

  • RESOURCE_ID: 組織 ID、フォルダ ID、プロジェクト ID、またはプロジェクト番号です

  • ORGANIZATION_ID: タグキーの親組織

この組織ポリシーでは、リソースとそのすべての子リソースに gcp.disableSerialPortAccess レガシー マネージド制約が適用されます。タグ disableSerialAccess: yes のあるリソースは、組織のポリシーで拒否されます。タグ disableSerialAccess: yes がないリソースには、以前のマネージド制約は適用されません。

組織のポリシーに条件付きでルールを追加する

タグを使用すると、リソースに付加されたタグに基づいて、条件付きで制約ルールをリソースに追加できます。同じ組織のポリシー内に複数の条件を追加できます。これにより、組織のポリシーを適用するリソースをきめ細かく制御できます。

Common Expression Language(CEL)は、条件式を指定するために使用する式言語です。条件式は、論理演算子(&&||!)を使用して結合された 1 つ以上のステートメントで構成されます。詳細については、CEL 仕様とその言語の定義をご覧ください。

リソースに適用されるタグに基づいて、リソースを作成できるロケーションを制限する組織のポリシーについて考えてみます。これを行うには、gcp.resourceLocations レガシー マネージド制約を適用する組織のポリシーを作成し、条件を使用して特定のリソースのみに適用されるように制限します。

まず、組織のポリシーを含む一時ファイル /tmp/policy.yaml を作成します。

name: organizations/ORGANIZATION_ID/policies/gcp.resourceLocations
spec:
  rules:
  - condition:
      expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-east')"
    values:
      allowedValues:
      - in:us-east1-locations
  - condition:
      expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-west')"
    values:
      allowedValues:
      - in:us-west1-locations
  - values:
      deniedValues:
      - in:asia-south1-locations

ORGANIZATION_ID は、タグキーの親組織に置き換えます。

この例では、location: us-east タグが付いているリソースは、us-east1-locations 値グループ内の場所に制限されます。location: us-west タグが付いているリソースは、us-west1-locations 値グループ内の場所に制限されます。組織内のすべてのリソースは、asia-south1-locations 値グループ内の場所からブロックされます。

次に、set-policy コマンドを使用してポリシーを設定します。

gcloud org-policies set-policy /tmp/policy.yaml

タグ付けされていないリソースの制限

タグと条件付き組織のポリシーを使用すると、特定のタグを使用していないリソースを制限できます。サービスに制限を設ける組織のポリシーをリソースに設定し、タグの有無を条件にした場合、そのリソースから派生する子リソースは、タグ付けされていない限り使用できません。このように、ガバナンス計画に従って使用前にリソースを設定する必要があります。

タグ付けされていない組織、フォルダ、またはプロジェクトのリソースを制限するには、組織のポリシーを作成するときに条件付きクエリで ! 論理演算子を使用します。

たとえば、sqladmin=enabled タグを持つプロジェクトでのみ sqladmin.googleapis.com の使用を許可するには、sqladmin=enabled タグがないプロジェクトで sqladmin.googleapis.com を拒否する組織ポリシーを作成します。

  1. リソースに適切なガバナンスが適用されているかどうかを識別するタグを作成します。たとえば、キー sqlAdmin と値 enabled を含むタグを作成し、このリソースで Cloud SQL Admin API の使用を許可するように指定できます。次に例を示します。

    タグキーと値の作成

  2. 新しく作成したタグの名前をクリックします。次のステップでは、[タグキーのパス] に一覧表示されているタグキーの名前空間名が必要です。

  3. 組織リソースのレベルでリソース サービスの使用を制限する組織ポリシーを作成して、Cloud SQL Admin API へのアクセスを拒否します。次に例を示します。

    リソースの制限に関する組織のポリシーを作成する

  4. 上記の組織のポリシーに条件を追加し、ガバナンス タグが存在しない場合にポリシーが適用されるように指定します。論理 NOT 演算子は条件作成ツールでサポートされていないため、この条件を条件エディタで作成する必要があります。次に例を示します。

    条件付き組織のポリシーを作成する

    !resource.matchTag("012345678901/sqlAdmin", "enabled")

これで、デベロッパーがそのプロジェクトで Cloud SQL Admin API を使用するには、sqlAdmin=enabled タグをプロジェクトに接続するか、プロジェクトに継承する必要があります。

リソースへの必須タグの適用

カスタムの組織のポリシーを使用して、リソースに必須タグを適用できます。必須タグを適用すると、組織のタグ付けポリシーに準拠するリソースのみを作成できます。つまり、リソースは、ポリシーで指定された必須タグキーのタグ値に関連付けられます。詳細については、タグを適用するカスタム制約を設定するをご覧ください。

組織のポリシーの継承

タグを使用して有効になっているリストルールの制約は、継承の通常のルールに従って、既存の組織のポリシーと結合されます。これらの条件付きルールは、条件が true の場合にのみ適用されます。

タグを使用して有効になっているブール型ルールを含む制約は、既存の組織のポリシーをオーバーライドします。また、ブール型ルールに設定できるのは true または false の 2 つの状態のみであるため、複数のタグが互いに競合しないようにするには、すべての条件ステートメントを条件付きではないステートメントの反対にする必要があります。

たとえば、disableSerialPortAccess レガシー カスタム制約を適用する組織のポリシーについて考えてみます。無条件の値は、条件によってオーバーライドされない場合に使用する値であり、true です。したがって、このポリシーの他の条件ステートメントは、競合しないように false に設定する必要があります。

次のステップ

タグの使用方法の詳細については、タグの作成と管理ページをご覧ください。

組織のポリシー制約の作成と管理の方法の詳細については、制約の使用をご覧ください。