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

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

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

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

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

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

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

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

  • アプリケーション ロードバランサ
    • GLOBAL_EXTERNAL_MANAGED_HTTP_HTTPS: グローバル外部アプリケーション ロードバランサの場合
    • EXTERNAL_HTTP_HTTPS: 従来のアプリケーション ロードバランサの場合
    • EXTERNAL_MANAGED_HTTP_HTTPS: リージョン外部アプリケーション ロードバランサの場合
    • GLOBAL_INTERNAL_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 プロキシを使用する従来のプロキシ ネットワーク ロードバランサの場合
    • REGIONAL_EXTERNAL_MANAGED_TCP_PROXY: TCP プロキシを使用するリージョン外部プロキシ ネットワーク ロードバランサの場合
    • REGIONAL_INTERNAL_MANAGED_TCP_PROXY: TCP プロキシを使用するリージョン内部プロキシ ネットワーク ロードバランサの場合
    • GLOBAL_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

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

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

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

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 ホスト プロジェクト リーエンの削除が許可されます。この制約を適用するには、組織レベルで権限を付与する必要があります。

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

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

コンソール

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

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

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

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

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

gcloud

組織のポリシーにブール型制約の適用を有効にするには、次のように 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 でブール型制約を使用する方法について詳しくは、制約の使用をご覧ください。

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

コンソール

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

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

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

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

gcloud

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

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

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

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

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

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

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

次のステップ