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

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

始める前に

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

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

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

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

タグは、組織リソース、フォルダ リソース、プロジェクト リソースの組織のポリシーによってのみ評価されます。サービス リソースに適用されているタグは、組織のポリシーの制約によって無視されます。

リスト型ポリシーの例

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

Console

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

  1. Google Cloud Console で [組織のポリシー] ページを開きます。

    [組織のポリシー] ページを開く

  2. ページの上部にあるプロジェクト選択ツールを選択します。

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

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

  5. このリソース用に組織ポリシーをカスタマイズするには、[編集] をクリックします。

  6. [編集] ページで、[カスタマイズ] を選択します。

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

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

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

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

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

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

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

    2. [説明] フィールドに、条件に説明を入力します。この説明は、必要なタグに関するコンテキストと、リソースに与える影響を示しています。

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

      1. [条件タイプ] プルダウン メニューから [タグ] を選択します。

      2. 条件の [演算子] を選択します。タグ全体を照合するには、matchs 演算子を使用します。タグキーとタグ値を一致させるには、match ID 演算子を使用します。

      3. matches 演算子を選択した場合は、タグの名前空間名の値を入力します。matches ID 演算子を選択した場合は、キーと値の ID を入力します。

      4. [追加] をクリックすると、複数の条件を作成できます。別の条件を追加する場合は、And を切り替えると、すべての条件を要求する条件付きロジックを設定できます。OR を切り替えることで、条件の 1 つのみを true にする必要がある条件付きロジックを設定できます。

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

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

      次の図には、条件を含む組織のポリシーの構成例を示しています。

      組織のポリシーの条件 UI の例。

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

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

gcloud

組織のポリシーを設定するには、次のコマンドを実行します。

gcloud org-policies set-policy POLICY_PATH

ここで、POLICY_PATH は、組織のポリシー JSON ファイルへのフルパスです。出力は次のようになります。

{
  "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"]
        }
      }
    ]
  }
}

ここで

  • RESOURCE_TYPEorganizationsfolders、または 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 制約を適用する組織のポリシー ファイルの設定方法を示します。この組織のポリシーでは、すべてのシリアルポートがリソースにアクセスできるように指定しますが、条件を使用して、一致するタグを持つリソースのみにシリアルポートへのアクセスを制限します。

Console

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

  1. Google Cloud Console で [組織のポリシー] ページを開きます。

    [組織のポリシー] ページを開く

  2. ページの上部にあるプロジェクト選択ツールを選択します。

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

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

  5. このリソース用に組織ポリシーをカスタマイズするには、[編集] をクリックします。

  6. [編集] ページで、[カスタマイズ] を選択します。

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

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

  9. 必要に応じて、組織タグをタグで条件付きにするには、[条件を追加] をクリックします。条件付きルールを組織のポリシーに追加する場合は、無条件ルールを少なくとも 1 つ追加する必要があります。追加しない場合、ポリシーは保存できません。

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

    2. [説明] フィールドに、条件に説明を入力します。この説明は、必要なタグに関するコンテキストと、リソースに与える影響を示しています。

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

      1. [条件タイプ] プルダウン メニューから [タグ] を選択します。

      2. 条件の [演算子] を選択します。タグ全体を照合するには、matchs 演算子を使用します。タグキーとタグ値を一致させるには、match ID 演算子を使用します。

      3. matches 演算子を選択した場合は、タグの名前空間名の値を入力します。matches ID 演算子を選択した場合は、キーと値の ID を入力します。

      4. [追加] をクリックすると、複数の条件を作成できます。別の条件を追加する場合は、And を切り替えると、すべての条件を要求する条件付きロジックを設定できます。OR を切り替えることで、条件の 1 つのみを true にする必要がある条件付きロジックを設定できます。

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

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

      7. 条件が適用された組織のポリシーには、少なくとも 1 つの無条件ルールが必要です。[ルールを追加] をクリックして、この組織のポリシー適用をデフォルトでオンまたはオフにするかどうかを設定します。

      次の図には、条件を含む組織のポリシーの構成例を示しています。

      組織のポリシーの条件 UI の例。

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

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

gcloud

組織のポリシーを設定するには、次のコマンドを実行します。

gcloud org-policies set-policy POLICY_PATH

ここで、POLICY_PATH は、組織のポリシー JSON ファイルへのフルパスです。出力は次のようになります。

{
  "name": "RESOURCE_TYPE/RESOURCE_ID/policies/gcp.disableSerialPortAccess",
  "spec": {
    "rules": [
      {
        "condition": {
          "expression": "resource.matchTag(\"ORGANIZATION_ID/disableSerialAccess\", \"yes\")"
        },
        "enforce": true
      },
      {
        "enforce": false
      }
    ]
  }
}

ここで

  • RESOURCE_TYPEorganizationsfolders または 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

組織のポリシーの継承

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

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

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

次のステップ

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

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