このページでは、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
IAP ページに移動して、プロジェクトがまだ選択されていない場合は選択します。
[SSH と TCP のリソース] タブで、[移行先グループを作成する] をクリックします。
グループ名の名前を入力します。グループ名に使用できるのは、小文字(a-z)とダッシュ(-)のみです。
プルダウン リストから、宛先グループを作成するリージョンを選択します。
[IP アドレス] セクションで [行を追加する] をクリックしてから、リソースの IP アドレスまたは完全修飾ドメイン名(FQDN)を入力します。
IP 範囲は、CIDR 表記を使用したカンマ区切りの範囲で構成されます(例:
10.1.2.0/24,172.0.0.0/8
)。FQDN リストは、
*.internal.company.com
などのホスト名のカンマ区切りのリストです。FQDN エントリでワイルドカードを使用できます。[移行先グループを作成する] をクリックします。
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
IAP ページに移動し、[SSH と TCP のリソース] タブをクリックします。
宛先グループの詳細を表示するには、宛先グループの名前をクリックします。
宛先グループを変更するには、宛先グループを選択してから、鉛筆アイコンをクリックして、[宛先グループを編集する] パネルを開きます。このパネルから宛先グループを削除することもできます。
宛先グループを削除するには、宛先グループを選択してから、ごみ箱アイコンをクリックします。
gcloud CLI
gcloud CLI を使用してデスティネーション グループを管理する方法については、デスティネーション グループの gcloud コマンドをご覧ください。
トンネルの権限の構成
トンネルを作成するには、関連する宛先グループに対して iap.tunnelDestGroups.accessViaIAP
権限が必要です。iap.tunnelResourceAccessor
ロールでその権限を付与できます。
宛先グループの権限を構成するには、iap.tunnelDestGroups.setIamPolicy
権限が必要です。これは、iap.admin
ロールで付与できます。
Console
IAP ページに移動します。
[SSH と TCP のリソース] タブで、権限を構成する宛先グループを選択します。
表示されたパネルで [プリンシパルを追加する] をクリックし、ユーザーのメールアドレスを入力します。
[ロールを割り当てる] セクションで、プリンシパルに割り当てるロールを選択します。
[保存] をクリックします。
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-tunnel、SSH、SCP です。
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