コントロール プレーン アクセス用の承認済みネットワークの追加


このページでは、承認済みネットワークを使用して、Google Kubernetes Engine(GKE)クラスタのコントロール プレーンにアクセスできるオリジンを制限する方法について説明します。承認済みネットワークは、信頼できる IP アドレスの特定のセットにコントロール プレーンへのアクセス権を付与し、GKE クラスタの保護とセキュリティ上の利点を向上させます。

承認済みネットワークの仕組み

承認済みネットワークは、GKE コントロール プレーンへのアクセスを制御する IP ベースのファイアウォールを備えています。コントロール プレーンへのアクセスは、GKE クラスタのタイプと送信元 IP アドレスによって異なります。承認済みネットワークを使用して、GKE クラスタのコントロール プレーン エンドポイントへのアクセスを許可する IP アドレスを CIDR ブロックリストとして構成します。

次の用語は、適用されている IP ベースのファイアウォール ルールをクラスタのタイプに応じて区別するために使用されます。

IP アドレスの区別:

  • Google Cloud のすべての Compute Engine VM のパブリック IP アドレス: Google Cloud でホストされている顧客によって使用される VM に割り当てられたパブリック IP アドレス。Google Cloud はこれらの IP アドレスを所有しています。詳細については、Compute Engine の IP 範囲はどこで確認できますか?をご覧ください。
  • Google Cloud Platform の IP アドレス: Cloud Run や Cloud Functions などの Google Cloud プロダクトで使用される IP アドレス。Google Cloud でホストされているあらゆるクライアントは、これらの IP アドレスをインスタンス化できます。Google Cloud はこれらの IP アドレスを所有しています。
  • Google で予約された IP アドレス: GKE クラスタを管理するためのパブリック IP アドレス。これらの IP アドレスには、GKE マネージド プロセスと他の本番環境の Google サービスが含まれています。Google はこれらの IP アドレスを所有しています。
  • インターネット パブリック IP アドレス: RFC 1918 以外のパブリック IP アドレスと Google 以外のパブリック IP アドレス。Google と Google Cloud のいずれのプロダクトも、これらのパブリック IP アドレスを所有していません。
  • GKE クラスタの IP アドレス範囲: GKE がクラスタのノード、Pod、Service に使用するクラスタに割り振られた IP アドレス。
  • プライベートで使用される IP アドレス: クラスタの VPC ネットワークの IP アドレス。これらの IP アドレスには、クラスタ IP アドレス、オンプレミス ネットワーク、RFC 1918 範囲、または RFC 1918 以外の範囲を含むプライベートで使用されるパブリック IP(PUPI)アドレスを配置できます。

クラスタの種類:

  • レガシー パブリック クラスタ: レガシー ネットワークまたはノードに割り当てられているパブリック IP アドレスを持つ VPC ネットワークで実行されており、Private Service Connect アーキテクチャに移行されていない一般公開クラスタ。
  • レガシー限定公開クラスタ: プライベート IP アドレスのみを持つノードからのコントロール プレーン接続用の VPC ネットワーク ピアリングに基づくクラスタ。
  • パブリックまたは限定公開として作成された PSC ベースのクラスタ: GKE クラスタ コントロール プレーンとノード間の通信に Private Service Connect アーキテクチャを使用するクラスタ。クラスタで Private Service Connect を使用しているかどうかを確認するには、GKE コントロール プレーンをご覧ください。

コントロール プレーン エンドポイントへのアクセス

次の表に、クラスタ作成時の承認済みネットワークのデフォルトのステータスを示します。GKE クラスタとコントロール プレーン エンドポイントのタイプに基づいて、次の対象を決定できます。

  • GKE コントロール プレーンに常にアクセスできるプリセット IP アドレス。
  • 承認済みネットワークが有効になっているクラスタのコントロール プレーンにアクセスするように構成できる IP アドレス。

構成可能な IP アドレスは、それらを許可リストに登録し、承認済みネットワークを有効にすると、クラスタのコントロール プレーンにアクセスできます。

GKE クラスタとコントロール プレーン エンドポイントのタイプ コントロール プレーン承認済みネットワークのデフォルト ステータス GKE コントロール プレーンに常にアクセスできるプリセット IP アドレス1 承認済みネットワークが有効に設定されており、GKE コントロール プレーンにアクセスできる構成可能な IP アドレス2
VPC ネットワーク ピアリングに基づくレガシー パブリック クラスタまたはレガシー限定公開クラスタ
パブリック エンドポイントを持つレガシー パブリック クラスタ 無効
  • Google Cloud 内のすべての Compute Engine VM のパブリック IP アドレス
  • Google Cloud Platform の IP アドレス
  • Google が予約した IP アドレス
  • GKE クラスタの IP アドレス範囲
  • 許可リストに登録されており、クラスタのパブリック IP エンドポイントにアクセスできるインターネット パブリック IP アドレス。
パブリック エンドポイントと限定公開エンドポイントを持つレガシー限定公開クラスタ 有効
  • Google が予約した IP アドレス
  • GKE クラスタの IP アドレス範囲(ノード、Pod、Service はプライベート IP アドレスのみを持ちます)。
  • 許可リストに登録されており、クラスタのプライベート エンドポイントにアクセスできる限定公開で使用されているクラスタ ネットワークの IP アドレス。
  • 許可リストに登録されており、--enable-private-endpoint フラグが無効になっている場合にクラスタのパブリック エンドポイントにアクセスできるインターネット パブリック IP アドレス。
Private Service Connect を使用するクラスタ
パブリックとして作成されたクラスタ 無効
  • クラスタのネットワークのすべてのプライベート IP アドレス(学習された VPC ネットワーク ピアリング ルートを除く)。

–enable-google-cloud フラグが設定されている場合(デフォルト)は、次の IP アドレスが GKE コントロール プレーンにアクセスできます。

  • Google Cloud 内のすべての Compute Engine VM のパブリック IP アドレス
  • Google Cloud Platform の IP アドレス
  • Google が予約した IP アドレス
  • GKE クラスタノードのパブリック IP アドレス。

–no-enable-google-cloud フラグを設定すると、次の IP アドレスが GKE コントロール プレーンにアクセスできます。

  • Google が予約した IP アドレス
  • GKE クラスタの IP アドレス範囲(ノード、Pod、Service はプライベート IP アドレスのみを持ちます)。

詳細については、クラスタの分離を変更するをご覧ください。

  • 許可リストに登録されており、クラスタのパブリック エンドポイントにアクセスできるインターネット パブリック IP アドレス
限定公開として作成されたクラスタ 有効

GKE クラスタの IP アドレス範囲(ノード、Pod、Service など)は、プライベート IP アドレスのみを持ちます。

デフォルトでは、クラスタの作成時に –enable-google-cloud は無効になります。ただし、–enable-google-cloud フラグを設定すると、次の IP アドレスが GKE コントロール プレーンにアクセスできます。

  • Google Cloud 内のすべての Compute Engine VM のパブリック IP アドレス
  • Google Cloud Platform の IP アドレス
  • Google が予約した IP アドレス
  • GKE クラスタノードのパブリック IP アドレス。

–no-enable-google-cloud フラグを設定すると、次の IP アドレスが GKE コントロール プレーンにアクセスできます。

  • Google が予約した IP アドレス
  • GKE クラスタの IP アドレス範囲(ノード、Pod、Service はプライベート IP アドレスのみを持ちます)。

詳細については、クラスタの分離を変更するをご覧ください。

  • 許可リストに登録されており、--enable-private-endpoint フラグが無効になっている場合にクラスタのパブリック エンドポイントにアクセスできるインターネット パブリック IP アドレス。
  • 許可リストに登録されており、クラスタのプライベート エンドポイントにアクセスできる限定公開で使用されているクラスタ ネットワークの IP アドレス
  1. 承認済みネットワークが有効か無効かにかかわらず、GKE コントロール プレーンに常にアクセスできる IP アドレス

  2. クラスタ コントロール プレーンにアクセスするには、これらの構成可能な IP アドレスを許可リストに登録する必要があります。

制限事項

  • 承認済みネットワークを持つクラスタが使用しているサブネットを拡張する場合は、拡張された IP アドレス範囲を含むように承認済みネットワーク構成を更新する必要があります。
  • パブリック IP アドレスとプライベート IP アドレスに指定できる承認済み IP アドレス範囲の数は、クラスタのタイプによって異なります。

    • パブリック クラスタ: 50 個の IP アドレス範囲
    • 限定公開クラスタ: 100 個の IP アドレス範囲
    • PSC ベースのクラスタ: 100 個の IP アドレス範囲

始める前に

作業を始める前に、次のことを確認してください。

  • Google Kubernetes Engine API を有効にします。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得します。

承認済みネットワークを使用するクラスタを作成する

1 つ以上の承認済みネットワークを使用するクラスタを作成するには、Google Cloud CLI、Google Cloud コンソール、または GKE API を使用します。

gcloud

次のコマンドを実行します。

gcloud container clusters create-auto CLUSTER_NAME \
    --enable-master-authorized-networks \
    --master-authorized-networks CIDR1,CIDR2,...

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

  • CLUSTER_NAME: クラスタの名前。
  • CIDR1,CIDR2,...: 承認済みネットワークの CIDR 値のカンマ区切りリスト。例: 8.8.8.8/32,8.8.8.0/24

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. [ 作成] をクリックします。

  3. [Autopilot] セクションまたは [Standard] セクションで、[構成] をクリックします。

  4. 必要に応じてクラスタを構成します。

  5. ナビゲーション メニューで、[ネットワーキング] をクリックします。

  6. [高度なネットワーキングのオプション] で [コントロール プレーン承認済みネットワークを有効にする] チェックボックスをオンにします。

  7. [承認済みネットワークを追加] をクリックします。

  8. ネットワークの名前を入力します。

  9. [ネットワーク] に、クラスタ コントロール プレーンへのアクセス権を付与する CIDR 範囲を入力します。

  10. [完了] をクリックします。必要に応じて、承認済みネットワークを追加します。

  11. [作成] をクリックします。

API

クラスタ create リクエストmasterAuthorizedNetworksConfig オブジェクトを指定します。

"masterAuthorizedNetworksConfig": {
  "enabled": true,
  "cidrBlocks": [
    {
      "displayName": string,
      "cidrBlock": string
    }
  ]
}

詳細については、MasterAuthorizedNetworksConfig をご覧ください。

1 つ以上の承認済みネットワークを使用して限定公開クラスタを構成できます。詳細については、限定公開クラスタをご覧ください。

コントロール プレーン アクセスを制限したクラスタを作成する

GKE は、一般公開クラスタ内のコントロール プレーンにパブリック IP アドレス(外部エンドポイント)を割り当てます。Private Service Connect を使用する一般公開クラスタでは、より詳細なクラスタ分離を設定して、ノードとコントロール プレーンをプライベート接続できます。クラスタで Private Service Connect を使用しているかどうかを確認するには、Private Service Connect を使用する一般公開クラスタをご覧ください。

クラスタを作成して、次の送信元からコントロール プレーンへのアクセスをブロックするように GKE に指示できます。

クラスタを作成し、コントロール プレーンへのアクセスを定義するには、Google Cloud CLI または Google Cloud コンソールを使用します。

gcloud

次のコマンドを実行します。

gcloud container clusters create-auto CLUSTER_NAME
    --no-enable-google-cloud-access

CLUSTER_NAME は、GKE クラスタの名前に置き換えます。

このコマンドを使用すると、no-enable-google-cloud-access フラグにより、Google Cloud が所有する IP アドレスからコントロール プレーンにアクセスできなくなります。

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. [ 作成] をクリックします。

  3. [Autopilot] セクションまたは [Standard] セクションで、[構成] をクリックします。

  4. 必要に応じてクラスタを構成します。

  5. ナビゲーション メニューで、[ネットワーキング] をクリックします。

  6. [高度なネットワーキングのオプション] で [コントロール プレーン承認済みネットワークを有効にする] チェックボックスをオンにします。

  7. [Google Cloud のパブリック IP アドレスを介したアクセスを許可する] チェックボックスをオフにして、Google Cloud が所有する IP アドレスからコントロール プレーンにアクセスできないようにします。

  8. [承認済みネットワークを追加] をクリックします。

  9. ネットワークの名前を入力します。

  10. [ネットワーク] に、クラスタ コントロール プレーンへのアクセス権を付与する CIDR 範囲を入力します。

  11. [完了] をクリックします。必要に応じて、承認済みネットワークを追加します。

  12. [作成] をクリックします。

承認済みネットワークを既存のクラスタに追加する

既存のクラスタに承認済みネットワークを追加するには、gcloud CLI または Google Cloud コンソールを使用します。

gcloud

次のコマンドを実行します。

gcloud container clusters update CLUSTER_NAME \
    --enable-master-authorized-networks \
    --master-authorized-networks CIDR1,CIDR2,...

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

  • CLUSTER_NAME: 既存のクラスタの名前。
  • CIDR1,CIDR2,...: 承認済みネットワークの CIDR 値のカンマ区切りリスト。例: 8.8.8.8/32,8.8.8.0/24

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. 変更するクラスタの名前をクリックします。

  3. [ネットワーキング] の [コントロール プレーン承認済みネットワーク] フィールドで、[コントロール プレーン承認済みネットワークの編集] をクリックします。

  4. [コントロール プレーン承認済みネットワークを有効にする] チェックボックスをオンにします。

  5. [承認済みネットワークを追加] をクリックします。

  6. ネットワークの名前を入力します。

  7. [ネットワーク] に、クラスタ コントロール プレーンへのアクセス権を付与する CIDR 範囲を入力します。

  8. [完了] をクリックします。必要に応じて、承認済みネットワークを追加します。

  9. [変更を保存] をクリックします。

API

クラスタの update リクエストdesiredMasterAuthorizedNetworksConfig フィールドを指定します。このフィールドで、MasterAuthorizedNetworksConfig オブジェクトを次のように指定します。

"desiredMasterAuthorizedNetworksConfig": {
    object(MasterAuthorizedNetworksConfig)
  }

承認済みネットワークを確認する

既存のクラスタの承認済みネットワークを確認するには、gcloud CLI または Google Cloud コンソールを使用します。

gcloud

次のコマンドを実行します。

gcloud container clusters describe CLUSTER_NAME

出力は次のようになります。

...
masterAuthorizedNetworksConfig:
  cidrBlocks:
  - cidrBlock: 8.8.8.8/32
  - cidrBlock: 8.8.4.4/32
  enabled: true
...

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. 変更するクラスタの名前をクリックします。

  3. [ネットワーキング] の [コントロール プレーン承認済みネットワーク] フィールドに、許可された CIDR が表示されます。

API

get リクエストを送信します。masterAuthorizedNetworksConfig フィールドの下で CIDR ブロックを探します。次に例を示します。

"masterAuthorizedNetworksConfig": {
"enabled": true,
 "cidrBlocks": [
  {
    "displayName": "Office",
    "cidrBlock": "192.0.2.0/24"
  }
]
}

承認済みネットワークの無効化

既存クラスタの承認済みネットワークを無効にするには、gcloud CLI または Google Cloud コンソールを使用します。

gcloud

次のコマンドを実行します。

gcloud container clusters update CLUSTER_NAME \
  --no-enable-master-authorized-networks

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. 変更するクラスタの名前をクリックします。

  3. [ネットワーキング] の [コントロール プレーン承認済みネットワーク] フィールドで、[コントロール プレーン承認済みネットワークの編集] をクリックします。

  4. [コントロール プレーン承認済みネットワークを有効にする] チェックボックスをオフにします。

  5. [変更を保存] をクリックします。

承認済みネットワークを削除する

gcloud

次のコマンドを実行します。

gcloud container clusters update CLUSTER_NAME \
    --enable-master-authorized-networks

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. 変更するクラスタの名前をクリックします。

  3. [ネットワーキング] の [コントロール プレーン承認済みネットワーク] フィールドで、[コントロール プレーン承認済みネットワークの編集] をクリックします。

  4. [削除] をクリックします。

  5. [変更を保存] をクリックします。

トラブルシューティング

以降のセクションでは、承認済みネットワークに関連する一般的な問題の解決方法について説明します。

CIDR ブロックが多すぎる

50 個を超える CIDR ブロックがあるクラスタを作成または更新しようとすると、gcloud は次のエラーを返します。

ERROR: (gcloud.container.clusters.update) argument --master-authorized-networks: too many args

この問題を解決するには、クラスタが公開されている場合は指定する CIDR ブロックの数を 50 個以下にしてください。クラスタが非公開の場合は、指定する CIDR ブロックの数を 100 個以下にしてください。

サーバーに接続できない

CIDR ブロックの指定に誤りがあると、kubectl コマンドはタイムアウトになります。

Unable to connect to the server: dial tcp MASTER_IP: getsockopt: connection timed out

クラスタを作成または更新するときは、CIDR ブロックを正しく指定するよう注意してください

次のステップ