Google Cloud または Google Cloud 以外の環境で IP アドレスまたはホスト名で IAP TCP 転送を設定する

このページでは、IP アドレスまたはホスト名機能で Identity-Aware Proxy(IAP)TCP 転送を設定して使用する方法について説明します。

概要

Google Cloud CLI を使用して、リソースのプライベート IP アドレスまたはホスト名を使用してリソースへのトンネルを作成できます。Cloud Interconnect または VPN を介して Google Cloud に接続されているGoogle Cloud 以外の外部リソースがある場合は、それらのリソースで IAP TCP 転送を使用できます。

始める前に

Google Cloudの外部リソースにトンネリングする必要がある場合は、ハイブリッド接続を構成する必要があります。Google Cloud に接続するには、Google Cloudに接続する必要があります。詳細については、Cloud Interconnect または Cloud VPN のドキュメントをご覧ください。

Cloud Router は IAP-TCP IP 範囲 35.235.240.0/20 をアドバタイズする必要があります。これにより、宛先がインターネット経由ではなく、Cloud VPN または Cloud Interconnect を介してレスポンス トラフィックを返送できるようになります。この構成がない場合、 Google Cloud プロジェクトの外部リソースへのトンネルを作成できません。

IAP-TCP IP 範囲 35.235.240.0/20 をアドバタイズするように Cloud Router を構成するには、カスタム IP 範囲のアドバタイズの手順に沿ってください。

次の手順では、タスクを完了するための gcloud の例を示します。API を使用して宛先グループを操作する方法については、REST リソース: projects.iap_tunnel.locations.destGroups をご覧ください。

トンネルの宛先グループを作成する

トンネルを構成するときに、権限チェックに使用する宛先グループを指定します。トンネルの宛先グループは、同じトンネル アクセス制限を持つリソースを表します。任意の数の宛先グループを作成できます。それぞれのグループに、任意の数の一致する IP 範囲または FQDN があります。デスティネーション グループは重複させることもできるので、より柔軟に設定できます。

宛先グループを作成する際に、リージョンを指定する必要があります。最適な結果を得るには、指定するリージョンが宛先リソースのロケーションと一致している必要があります。たとえば、リソースが VPN で接続されている場合は、VPN ゲートウェイのリージョンを使用する必要があります。

宛先グループを作成するには、iap.tunnelDestGroups.create 権限が必要です。これは、iap.tunnelDestGroupEditor ロールで付与できます。単一のロールを付与するには、IAM ドキュメントの単一のロールを付与するをご覧ください。

Console

  1. IAP ページに移動して、プロジェクトがまだ選択されていない場合は選択します。

  2. [SSH と TCP のリソース] タブで、[移行先グループを作成する] をクリックします。

  3. グループ名の名前を入力します。グループ名に使用できるのは、小文字(a-z)とダッシュ(-)のみです。

  4. プルダウン リストから、宛先グループを作成するリージョンを選択します。

  5. [IP アドレス] セクションで [行を追加する] をクリックしてから、リソースの IP アドレスまたは完全修飾ドメイン名(FQDN)を入力します。

    IP 範囲は、CIDR 表記を使用したカンマ区切りの範囲で構成されます(例: 10.1.2.0/24,172.0.0.0/8)。

    FQDN リストは、*.internal.company.com などのホスト名のカンマ区切りのリストです。FQDN エントリでワイルドカードを使用できます。

  6. [移行先グループを作成する] をクリックします。

gcloud CLI

gcloud iap tcp dest-groups create YOUR_GROUP_NAME \
  --region=REGION \
  --ip-range-list=IP_RANGE_LIST \
  --fqdn-list=FQDN_LIST

以下を置き換えます。

  • YOUR_GROUP_NAME: グループ名。グループ名に使用できるのは、小文字(a-z)とダッシュ(-)のみです。
  • REGION: us-central1 などの宛先グループを作成するリージョン。
  • IP_RANGE_LIST: 省略可。IP 範囲のリスト。これは、10.1.2.0/24,172.0.0.0/8 などのCIDR 表記を使用したカンマ区切りの範囲で構成されます。
  • FQDN_LIST: 省略可。FQDN リストは、*.internal.company.com などのホスト名のカンマ区切りのリストです。FQDN エントリにワイルドカード接頭辞が含まれている場合、指定された末尾を含むホスト名と一致します。それ以外の場合は完全一致が必要です。リクエストが IP 範囲または FQDN と一致する場合、一致と見なされます。

すでに存在するグループがわからない場合は、次のコマンドを実行してグループを一覧表示します。

gcloud iap tcp dest-groups list \
  --region=REGION

トンネルの宛先グループの管理

宛先グループの詳細の確認、移行先グループの変更と削除が可能です。

Console

  1. IAP ページに移動し、[SSH と TCP のリソース] タブをクリックします。

    • 宛先グループの詳細を表示するには、宛先グループの名前をクリックします。

    • 宛先グループを変更するには、宛先グループを選択してから、鉛筆アイコンをクリックして、[宛先グループを編集する] パネルを開きます。このパネルから宛先グループを削除することもできます。

    • 宛先グループを削除するには、宛先グループを選択してから、ごみ箱アイコンをクリックします。

gcloud CLI

gcloud CLI を使用してデスティネーション グループを管理する方法については、デスティネーション グループの gcloud コマンドをご覧ください。

トンネルの権限の構成

トンネルを作成するには、関連する宛先グループに対して iap.tunnelDestGroups.accessViaIAP 権限が必要です。iap.tunnelResourceAccessor ロールでその権限を付与できます。

宛先グループの権限を構成するには、iap.tunnelDestGroups.setIamPolicy 権限が必要です。これは、iap.admin ロールで付与できます。

Console

  1. IAP ページに移動します。

  2. [SSH と TCP のリソース] タブで、権限を構成する宛先グループを選択します。

  3. 表示されたパネルで [プリンシパルを追加する] をクリックし、ユーザーのメールアドレスを入力します。

  4. [ロールを割り当てる] セクションで、プリンシパルに割り当てるロールを選択します。

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

gcloud CLI

gcloud iap tcp dest-groups add-iam-policy-binding \
  --member=MEMBER \
  --role=ROLE \
  --dest-group=GROUP_NAME \
  --region=REGION

以下を置き換えます。

  • MEMBER: ユーザーのメールアドレス(例: user:exampleuser@company.com)。
  • ROLE: 必要な IAP ロール roles/iap.tunnelResourceAccessor
  • GROUP_NAME: 宛先グループ名。
  • REGION: リージョン名(例: us-central1)。

トンネルの使用方法について

IAP-TCP の操作時に使用できる gcloud CLI コマンドには次の 3 つがあります。start-iap-tunnelSSHSCP です。

IAP-TCP コマンドが更新され、IP ベースと FQDN ベースのトンネルがサポートされるようになりました。IP アドレスまたは FQDN に切り替えるには、コマンドを使用するときに次の操作を行います。

  • インスタンス名の代わりに IP アドレスまたは FQDN を指定します。
  • そのためには、--zone ではなく --region を使用します。
  • --dest-group を使用して、使用する宛先グループを指定します。
  • --network を使用して、使用する VPC ネットワークの名前を指定します。

指定する IP アドレスは宛先のプライベート IP アドレスにする必要があります。パブリック IP アドレスを持つ IAP-TCP を使用することはできません。FQDN を使用する場合、宛先の IP アドレスに解決する必要があります。名前解決は、クライアントのネットワークからではなく、指定した VPC ネットワーク内から行われます。たとえば、vm.corp.company.com へのトンネルを作成しようとすると、vm.corp.company.com を IP アドレスに変換するステップが VPC ネットワーク内で発生します。

指定するリージョンは、宛先グループのリージョンと一致している必要があります。

指定するネットワークは、宛先へのアクセス権を持つ VPC ネットワークの名前と一致している必要があります。一般的なネットワーク名は default です。 Google Cloud コンソールの [VPC ネットワーク] ページでネットワーク名のリストを表示できます。また、次のコマンドを実行してネットワーク名のリストを取得することもできます。

gcloud compute networks list --format='value(name)'

次の例では、IP アドレスの例として 172.16.1.2 を使用しています。各コマンドは、IP アドレスの代わりに FQDN(example.internal.company.com など)を使用することもできます。

SSH の例

172.16.1.2 への SSH セッションを開始するには、次のコマンドを実行します。

gcloud compute ssh 172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

DESTINATION_GROUP_NAME は、宛先グループ名に置き換えます。

--plain が暗黙で指定されているため、IP アドレスの使用時に SSH 認証鍵の自動的な管理や push は試行されません。

エラー Permission denied (publickey) を受信した場合、コマンドで SSH 認証鍵を含むファイルを見つけられませんでした。この問題を解決するには、次の例に示すように、SSH コマンドのパラメータとして SSH 秘密鍵を含むファイルへのパスを追加します。

gcloud compute ssh 172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap \
    -- -i ~/.ssh/google_compute_engine

DESTINATION_GROUP_NAME は、宛先グループ名に置き換えます。

特定のユーザーとしてログインする場合は、IP のみを指定せずに USER@IP という形式を使用します。

gcloud compute ssh user@172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

アカウントがパスワードで保護されている場合は、パスワードを入力する必要があります。アカウントが秘密鍵または公開鍵の SSH 認証鍵ペアで保護されている場合は、上記のように -- -i フラグを使用して指定する必要があります。

トンネルの例

別の TCP ポートへのトンネルを確立するには、start-iap-tunnel コマンドを使用します。localhost:8022 からポート 172.16.1.2:8085 へのトンネルを作成するには、次のコマンドを実行します。

gcloud compute start-iap-tunnel 172.16.1.2 8085 \
    --local-host-port=localhost:8022 \
    --region=us-central1 \
    --dest-group=destination-group-name \
    --network=default

ターゲット マシンがこの例のポート 8085 をリッスンしている必要があります。

トンネルを確立したら、PuTTy などのツールを使用して接続を確立できます。

SCP の例

ファイルを 172.16.1.2 に SCP するには、次のコマンドを実行します。

gcloud compute scp file.txt 172.16.1.2:~/ \
    --region=us-central1 \
    --dest-group=destination-group-name \
    --network=default \
    --tunnel-through-iap

--plain が暗黙で指定されているため、IP アドレスの使用時に SSH 認証鍵の自動的な管理や push は試行されません。

SSH ProxyCommand の例

常に 172.16.1.2 にトンネリングする ProxyCommand としてコマンドを使用するには、次の例で示すように、~/.ssh/config 構成(または同等の構成)にエントリを追加します。

Host example
ProxyCommand gcloud compute start-iap-tunnel 172.16.1.2 '%p' \
    --listen-on-stdin \
    --region=us-central1 \
    --dest-group=destination-group-name \
    --network=default \
    --verbosity=warning
  

ProxyCommand は、次のコマンドを実行すると有効になります。ssh example

次の例のように、多数のホスト名を処理するように ProxyCommand を設定することもできます。

Host *.internal.company.com
ProxyCommand gcloud compute start-iap-tunnel '%h' '%p' 
--listen-on-stdin
--region=us-central1
--dest-group=destination-group-name
--network=default --verbosity=warning

ProxyCommand は、次のコマンドを実行すると有効になります。ssh example.internal.company.com