Cloud Load Balancing の組織のポリシーに関する制約

組織のポリシー サービスを使用すると、組織のリソースをプログラマティックに一元管理できます。組織のポリシー管理者は組織のポリシーを定義できます。組織のポリシーは、Google Cloud リソース階層内のGoogle Cloud リソースやそれらのリソースの子孫に適用される、制約と呼ばれる一連の制限です。

このページでは、Cloud Load Balancing に適用される組織のポリシーの制約に関する補足情報を提供します。組織のポリシーの制約を使用して、設定をプロジェクト、フォルダ、組織全体に適用できます。

組織のポリシーは新しいリソースにのみ適用されます。制約が過去にさかのぼって適用されることはありません。既存のロード バランシング リソースが新しい組織のポリシーに違反している場合は、このような違反に手動で対処する必要があります。

使用可能な制約の一覧については、組織のポリシーの制約をご覧ください。

ロードバランサ タイプを制限する

組織のポリシーを使用して、組織内で作成できる Cloud Load Balancing のタイプを制限します。次の組織のポリシーの制約を設定します。

  • 名前: ロードバランサの種類に基づいてロードバランサの作成を制限します。
  • ID: constraints/compute.restrictLoadBalancerCreationForTypes

compute.restrictLoadBalancerCreationForTypes 制約を設定するときに、Cloud Load Balancing タイプの許可リストまたは拒否リストを指定します。許可または拒否される値のリストには、次のリストにある値のみを含めることができます。

  • アプリケーション ロードバランサ

    • GLOBAL_EXTERNAL_MANAGED_HTTP_HTTPS: グローバル外部アプリケーション ロードバランサの場合
    • EXTERNAL_HTTP_HTTPS: 従来のアプリケーション ロードバランサの場合
    • GLOBAL_INTERNAL_MANAGED_HTTP_HTTPS: クロスリージョン内部アプリケーション ロードバランサの場合
    • EXTERNAL_MANAGED_HTTP_HTTPS: リージョン外部アプリケーション ロードバランサの場合
    • INTERNAL_HTTP_HTTPS: リージョン内部アプリケーション ロードバランサの場合
  • プロキシ ネットワーク ロードバランサ

    • GLOBAL_EXTERNAL_MANAGED_TCP_PROXY: TCP プロキシを使用するグローバル外部プロキシ ネットワーク ロードバランサの場合
    • GLOBAL_EXTERNAL_MANAGED_SSL_PROXY: SSL プロキシを使用するグローバル外部プロキシ ネットワーク ロードバランサの場合
    • EXTERNAL_TCP_PROXY: TCP プロキシを使用する従来のプロキシ ネットワーク ロードバランサの場合
    • EXTERNAL_SSL_PROXY: SSL プロキシを使用する従来のプロキシ ネットワーク ロードバランサの場合
    • GLOBAL_INTERNAL_MANAGED_TCP_PROXY: TCP プロキシを使用するクロスリージョン内部プロキシ ネットワーク ロードバランサの場合
    • REGIONAL_EXTERNAL_MANAGED_TCP_PROXY: TCP プロキシを使用するリージョン外部プロキシ ネットワーク ロードバランサの場合
    • REGIONAL_INTERNAL_MANAGED_TCP_PROXY: TCP プロキシを使用するリージョン内部プロキシ ネットワーク ロードバランサの場合
  • パススルー ネットワーク ロードバランサ

    • EXTERNAL_NETWORK_TCP_UDP: 外部パススルー ネットワーク ロードバランサの場合
    • INTERNAL_TCP_UDP: 内部パススルー ネットワーク ロードバランサの場合

すべての内部または外部のロードバランサを含めるには、in: 接頭辞の後に INTERNAL または EXTERNAL を使用します。たとえば、in:INTERNAL を許可すると、上のリストにあるすべての内部ロードバランサが許可されます。

この制約の使用方法の例については、組織のポリシーを使用したリスト型制約を設定するをご覧ください。

ポリシーを設定すると、それぞれのGoogle Cloud 転送ルールを追加するときにポリシーが適用されます。この制約は、既存の Cloud Load Balancing 構成には適用されません。

制約に違反するタイプのロードバランサを作成しようとすると、処理に失敗し、エラー メッセージが生成されます。エラー メッセージの形式は次のとおりです。

Constraint constraints/compute.restrictLoadBalancerCreationForTypes
violated for projects/PROJECT_NAME. Forwarding Rule projects/PROJECT_NAME/region/REGION/forwardingRules/FORWARDING_RULE_NAME
of type SCHEME is not allowed.

異なるリソースレベルで複数の restrictLoadBalancerCreationForTypes 制約を設定すると、これらの制約は階層的に適用されます。このため、上位層のポリシーも考慮されるように、inheritFromParent フィールドを true に設定することをおすすめします。

GKE のエラー メッセージ

Google Kubernetes Engine(GKE)ServiceIngress オブジェクトを使用している場合、この組織のポリシーを使用してロードバランサの作成結果を制限すると、次のようなエラー メッセージが表示されます。

Warning  Sync    28s   loadbalancer-controller  Error during sync: error running
load balancer syncing routine: loadbalancer FORWARDING_RULE_NAME
does not exist: googleapi: Error 412:
Constraint constraints/compute.restrictLoadBalancerCreationForTypes violated for
projects/PROJECT_ID. Forwarding Rule
projects/PROJECT_ID/global/forwardingRules/FORWARDING_RULE_NAME
of type LOAD_BALANCER_TYPE is not allowed, conditionNotMet

GKE のエラー メッセージを確認するには、次のコマンドを実行します。

kubectl get events -w
kubectl describe RESOURCE_KIND NAME

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

  • RESOURCE_KIND: ロードバランサの種類(ingress または service
  • NAME: ロードバランサの名前

グローバル ロード バランシングを無効にする

このブール型制約は、グローバル ロード バランシング サービスの作成を無効にします。これを適用すると、グローバルな依存関係のないリージョン ロード バランシング サービスのみを作成できます。

  • 名前: グローバル ロード バランシングを無効にします。
  • ID: constraints/compute.disableGlobalLoadBalancing

デフォルトでは、ユーザーはグローバル ロード バランシング サービスを作成できます。

この制約の使用方法の例については、組織のポリシーを使用したブール型制約を設定するをご覧ください。

プロトコル転送デプロイの種類を制限する

組織のポリシーを使用して、組織で作成できるプロトコル転送デプロイメントのタイプ(内部または外部)を制限します。次の組織のポリシーの制約を設定します。

  • 名前: IP アドレスの種類に基づいてプロトコル転送を制限します。
  • ID: constraints/compute.restrictProtocolForwardingCreationForTypes

compute.restrictProtocolForwardingCreationForTypes 制約を構成するには、許可または拒否するプロトコル転送デプロイメントのタイプの許可リストまたは拒否リストを指定します。許可または拒否される値のリストには、次の値のみを含めることができます。

  • INTERNAL
  • EXTERNAL

デフォルトでは、新しく作成された組織では、INTERNAL プロトコル転送のみを許可するようにこのポリシーが構成されています。つまり、ターゲット インスタンスに関連付けられた転送ルールは、内部 IP アドレスのみを使用できます。外部 IP アドレスでプロトコル転送を使用する場合、またはユーザーが内部 IP アドレスでプロトコル転送を使用することを禁止する場合は、この組織のポリシーを更新する必要があります。

ポリシーを更新すると、ターゲット インスタンスに関連付けられた新しい転送ルールを作成するときに、変更が適用されます。この制約は、既存のプロトコル転送構成に遡って適用されることはありません。

この制約の使用方法の例については、組織のポリシーを使用したリスト型制約を設定するをご覧ください。

制約に違反するタイプのプロトコル転送デプロイを作成しようとすると失敗し、エラー メッセージが生成されます。エラー メッセージの形式は次のとおりです。

Constraint constraints/compute.restrictProtocolForwardingCreationForTypes
violated for projects/PROJECT_NAME. Forwarding Rule
projects/PROJECT_NAME/region/REGION/forwardingRules/FORWARDING_RULE_NAME
of type SCHEME is not allowed.

異なるリソースレベルで複数の restrictProtocolForwardingCreationForTypes 制約を設定し、inheritFromParent フィールドを true に設定すると、制約は階層的に適用されます。

共有 VPC 制限を適用する

次の組織のポリシーを使用して、ユーザーに共有 VPC デプロイの設定を制限します。

共有 VPC ホスト プロジェクトを制限する

このリスト型制約を使用すると、リソースで接続できる共有 VPC ホスト プロジェクトを制限できます。

  • 名前: 共有 VPC ホスト プロジェクトを制限します。
  • ID: constraints/compute.restrictSharedVpcHostProjects

デフォルトでは、プロジェクトは同じ組織内の任意のホスト プロジェクトに接続して、サービス プロジェクトにすることができます。compute.restrictSharedVpcHostProjects 制約を設定する際は、次の方法でホスト プロジェクトの許可リストまたは拒否リストを指定します。

  • 次の形式でプロジェクトを指定します。
    • projects/PROJECT_ID
  • プロジェクト、フォルダ、または組織を指定します。この制約は、リソース階層の指定されたリソースに含まれるすべてのプロジェクトに適用されます。次の形式を使用します。
    • under:organizations/ORGANIZATION_ID
    • under:folders/FOLDER_ID

この制約の使用方法の例については、組織のポリシーを使用したリスト型制約を設定するをご覧ください。

共有 VPC サブネットワークを制限する

このリスト型制約は、適格リソースで使用できる一連の共有 VPC サブネットを定義します。この制約は、同じプロジェクト内のリソースには適用されません。

  • 名前: 共有 VPC サブネットワークを制限します。
  • ID: constraints/compute.restrictSharedVpcSubnetworks

デフォルトでは、適格リソースはすべての共有 VPC サブネットを使用できます。compute.restrictSharedVpcSubnetworks 制約を設定する際は、次の方法でサブネットの制限リストを指定します。

  • 次の形式でサブネットを指定します。
    • projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
  • プロジェクト、フォルダ、または組織を指定します。この制約は、リソース階層の指定されたリソースに含まれるすべてのサブネットに適用されます。次の形式を使用します。
    • under:organizations/ORGANIZATION_ID
    • under:folders/FOLDER_ID
    • under:projects/PROJECT_ID

この制約の使用方法の例については、組織のポリシーを使用したリスト型制約を設定するをご覧ください。

プロジェクト間のバックエンド サービスを制限する

この制約を使用して、URL マップが参照できるバックエンド サービスを制限できます。この制約は、URL マップと同じプロジェクト内のバックエンド サービスには適用されません。

  • 名前: プロジェクト間のバックエンド サービスを制限します。
  • ID: constraints/compute.restrictCrossProjectServices

デフォルトでは、すべてのホストまたはサービス プロジェクトの URL マップは、アクションを実行するユーザーが compute.backendServices.use 権限を持っている場合に、他のサービス プロジェクトや同じ共有 VPC デプロイ内のホスト プロジェクトから互換性があるバックエンド サービスを参照できます。restrictCrossProjectServices 制約を設定する際は、次の方法でバックエンド サービスの許可リストまたは拒否リストを指定します。

  • バックエンド サービスを次の形式で指定します。
    • projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME
  • プロジェクト、フォルダ、または組織を指定します。この制約は、リソース階層内の指定リソースの下にあるすべてのバックエンド サービスに適用されます。次の形式を使用します。
    • under:organizations/ORGANIZATION_ID
    • under:folders/FOLDER_ID
    • under:projects/PROJECT_ID

この制約を使用して組織のポリシーを設定すると、次回 gcloud compute url-maps コマンドを使用してバックエンド サービスを URL マップに接続する際に、制約が有効になります。この制約は、プロジェクト間のバックエンド サービスへの既存の参照に溯って適用されることはありません。

この制約の使用方法の例については、組織のポリシーを使用したリスト型制約を設定するをご覧ください。

共有 VPC プロジェクト リーエンの削除を制限する

このブール型制約がすでに True に設定されていると、組織レベルの権限なしで共有 VPC ホスト プロジェクト リーエンを削除できるユーザーが制限されます。

  • 名前: 共有 VPC プロジェクト リーエンの削除を制限します。
  • ID: constraints/compute.restrictXpnProjectLienRemoval

デフォルトでは、リーエンの更新権限を持つすべてのユーザーに共有 VPC ホスト プロジェクト リーエンの削除が許可されます。この制約を適用するには、組織レベルで権限を付与する必要があります。

この制約の使用方法の例については、組織のポリシーを使用したブール型制約を設定するをご覧ください。

カスタム制約を使用して TLS 機能を制限する

コンプライアンス要件を満たし、特定の Transport Layer Security(TLS)機能を制限するには、次の組織のポリシー制約を作成して、SSL ポリシー リソースのカスタム制約と一緒に使用します。

  • 名前: SSL ポリシーを必須にする
  • ID: constraints/compute.requireSslPolicy

constraints/compute.requireSslPolicy 制約と独自の SSL ポリシー フィールドのカスタム制約を使用すると、デプロイメントに合わせて制限を作成できます。たとえば、次のことを行えます。

  • 以前の TLS バージョン(1.0 や 1.1 など)と暗号スイートの使用を制限して、セキュリティを強化し、コンプライアンス要件を満たします。
  • 必要な handshake の数を減らし、ロードバランサとクライアントの互換性を向上させることで、パフォーマンスを改善します。
  • 特定のリソースノードとその子に制限を適用します。たとえば、組織で TLS バージョン 1.0 を拒否すると、その組織の子孫であるすべてのフォルダとプロジェクト(子)でも拒否されます。

アプリケーション ロードバランサまたはプロキシ ネットワーク ロードバランサに SSL ポリシーを適用するには、ロードバランサのターゲット HTTPS プロキシまたはターゲット SSL プロキシに SSL ポリシーを適用する必要があります。

既存の SSL ポリシーを更新するには、ターゲット プロキシに適用されている既存の SSL ポリシーを更新するをご覧ください。

組織のポリシーでブール型制約を設定する

このタスクを行うには、次の権限が必要です。

コンソールgcloud

コンソールから組織のポリシーを設定するには、次の操作を行います。

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

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

  2. [フィルタ] フィールドで、名前または ID を指定して制約を検索します。
  3. 制約の名前をクリックします。
  4. [編集] をクリックして、制約を編集します。
  5. [編集] ページで、[カスタマイズ] を選択します。
  6. [適用] で、次のように適用オプションを選択します。
    • この制約の適用を有効にするには、[オン] を選択します。
    • この制約の適用を無効にするには、[オフ] を選択します。
  7. 変更を加えたら、[保存] をクリックして制約の設定を適用します。

Google Cloud コンソールを使用して組織のポリシーをカスタマイズする詳細な手順については、ブール型制約用のポリシーのカスタマイズをご覧ください。

組織のポリシーにブール型制約の適用を有効にするには、次のように gcloud resource-manager org-policies enable-enforce コマンドを使用します。

共有 VPC プロジェクト リーエンの削除の制限を有効にするには:

gcloud resource-manager org-policies enable-enforce \
    --organization ORGANIZATION_ID \
    constraints/compute.restrictXpnProjectLienRemoval

グローバル ロード バランシングを無効にするには:

gcloud resource-manager org-policies enable-enforce \
    --organization ORGANIZATION_ID \
    constraints/compute.disableGlobalLoadBalancing

gcloud でブール型制約を使用する方法について詳しくは、制約の使用をご覧ください。

組織のポリシーでリスト型制約を設定する

このタスクを行うには、次の権限が必要です。

コンソールgcloud

コンソールから組織のポリシーを設定するには、次の操作を行います。

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

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

  2. [フィルタ] フィールドで、名前または ID を指定して制約を検索します。 たとえば、共有 VPC ホスト プロジェクトを制限するには、ID constraints/compute.restrictSharedVpcHostProjects を検索します。
  3. 制約の名前をクリックします。
  4. [編集] をクリックして、制約を編集します。
  5. カスタム ポリシーを作成するには、[カスタマイズ] を選択して、リソースの許可リストまたは拒否リストを指定します。Google Cloud コンソールを使用して組織のポリシーをカスタマイズする詳しい手順については、リスト型制約用のポリシーのカスタマイズをご覧ください。
  6. 変更を加えたら、[保存] をクリックして制約の設定を適用します。

このセクションでは、リスト型制約を設定した組織のポリシー ファイルを作成して設定する方法を示す構成例を示します。gcloud でリスト制約と組織のポリシーを操作する詳しい方法については、制約の使用をご覧ください。

  1. ポリシー ファイルを作成します。次の JSON 構成サンプルを使用して、要件に基づいて独自のポリシー ファイルを作成します。

    • ロードバランサ タイプを制限する

      • 一部のロードバランサのみを許可する

        {
        "constraint": "constraints/compute.restrictLoadBalancerCreationForTypes",
        "listPolicy": {
          "allowedValues": [
            "INTERNAL_TCP_UDP",
            "EXTERNAL_NETWORK_TCP_UDP"
          ]
        }
        }
        
      • すべての外部ロードバランサを拒否する

        {
        "constraint": "constraints/compute.restrictLoadBalancerCreationForTypes",
        "listPolicy": {
          "deniedValues": [
            "in:EXTERNAL"
          ]
        }
        }
        
      • すべてのロードバランサを拒否する

        {
        "constraint": "constraints/compute.restrictLoadBalancerCreationForTypes",
        "listPolicy": {
          "allValues": "DENY"
        }
        }
        
    • プロトコル転送タイプを制限する

      • すべてのプロトコル転送を拒否する

        {
        "constraint": "constraints/compute.restrictProtocolForwardingCreationForTypes",
        "listPolicy": {
          "allValues": "DENY"
        }
        }
        
      • 内部プロトコル転送のみを許可する

        {
        "constraint": "constraints/compute.restrictProtocolForwardingCreationForTypes",
        "listPolicy": {
          "deniedValues": [
            "EXTERNAL"
          ]
        }
        }
        
    • 共有 VPC 構成を制限する

      • 共有 VPC ホスト プロジェクトを制限する

        {
        "constraint": "constraints/compute.restrictSharedVpcHostProjects",
        "listPolicy": {
          "allowedValues": [
            "under:folders/FOLDER_ID",
            "under:projects/PROJECT_ID"
          ]
        }
        }
        
      • 共有 VPC サブネットワークを制限する

        {
        "constraint": "constraints/compute.restrictSharedVpcSubnetworks",
        "listPolicy": {
          "deniedValues": [
            "under:organizations/ORGANIZATION_ID",
            "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"
          ]
        }
        }
        
      • 共有 VPC バックエンド サービスを制限する

        {
        "constraint": "constraints/compute.restrictCrossProjectServices",
        "listPolicy": {
          "allowedValues": [
            "under:folders/FOLDER_ID",
            "under:projects/PROJECT_ID",
            "projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME"
          ]
        }
        }
        
  2. リソース、組織、フォルダ、プロジェクトのいずれかに制約を適用します。

    組織の場合は、次のコマンドを実行します。

    gcloud resource-manager org-policies set-policy POLICY_FILE \
        --organization=ORGANIZATION_ID
    

    フォルダの場合は、次のコマンドを実行します。

    gcloud resource-manager org-policies set-policy POLICY_FILE \
        --folder=FOLDER_ID
    

    プロジェクトの場合は、次のコマンドを実行します。

    gcloud resource-manager org-policies set-policy POLICY_FILE \
        --project=PROJECT_ID
    

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

ターゲット HTTPS プロキシとターゲット SSL プロキシに SSL ポリシーを適用する組織のポリシーを設定する

このタスクを行うには、次の権限が必要です。

コンソールgcloud

コンソールから組織のポリシーを設定するには、次の操作を行います。

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

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

  2. [フィルタ] フィールドで、名前または ID を指定して制約を検索します。

  3. 制約の名前をクリックします。

  4. [編集] をクリックして、制約を編集します。

  5. カスタム ポリシーを作成するには、[カスタマイズ] を選択して、リソースの許可リストまたは拒否リストを指定します。

  6. 変更を加えたら、[保存] をクリックして制約の設定を適用します。

このセクションでは、いくつかの構成例を示して、constraints/compute.requireSslPolicy 制約を含む組織のポリシー ファイルを作成して設定する方法について説明します。

  • SSL ポリシーの使用を禁止するポリシー ファイルを作成します。

    {
      "constraint": "constraints/compute.requireSslPolicy",
      "listPolicy": {
        "allValues": "DENY"
      }
    }
    
  • リソース階層で指定されたリソースのすべてのターゲット HTTPS と SSL プロキシに SSL ポリシーを適用するポリシー ファイルを作成します。

    {
      "constraint": "constraints/compute.requireSslPolicy",
      "listPolicy": {
        "allowedValues": [
          "under:folders/FOLDER_ID",
          "under:projects/PROJECT_ID"
        ]
      }
    }
    
  • ターゲットの HTTPS プロキシと SSL プロキシ(組織、フォルダ、プロジェクト)に制約を適用します。

    組織の場合は、次のコマンドを実行します。

    gcloud resource-manager org-policies set-policy PATH_TO_POLICY_FILE \
        --organization=ORGANIZATION_ID
    

    フォルダの場合は、次のコマンドを実行します。

    gcloud resource-manager org-policies set-policy PATH_TO_POLICY_FILE \
        --folder=FOLDER_ID
    

    プロジェクトの場合は、次のコマンドを実行します。

    gcloud resource-manager org-policies set-policy PATH_TO_POLICY_FILE \
        --project=PROJECT_ID
    

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

  • 有効なポリシーを取得して、リソース(組織、フォルダ、プロジェクト)のデフォルトの動作を確認するには、次のコマンドを実行します。

    組織の場合:

    gcloud resource-manager org-policies describe compute.requireSslPolicy \
        --effective \
        --organization=ORGANIZATION_ID
    

    フォルダの場合:

    gcloud resource-manager org-policies describe compute.requireSslPolicy \
        --effective \
        --folder=FOLDER_ID
    

    プロジェクトの場合:

    gcloud resource-manager org-policies describe compute.requireSslPolicy \
        --effective \
        --project=PROJECT_ID
    
  • リソース(組織、フォルダ、プロジェクト)からポリシーを削除するには、次のコマンドを実行します。

    組織の場合:

    gcloud resource-manager org-policies delete compute.requireSslPolicy \
        --organization=ORGANIZATION_ID
    

    フォルダの場合:

    gcloud resource-manager org-policies delete compute.requireSslPolicy \
        --folder=FOLDER_ID
    

    プロジェクトの場合:

    gcloud resource-manager org-policies delete compute.requireSslPolicy \
        --project=PROJECT_ID
    

カスタム制約を設定するには、カスタム制約を使用するをご覧ください。

次のステップ