ステップ 3: アクセスを構成する
このセクションでは、ニーズに応じて MDE デプロイメントへのアクセス権を付与するさまざまな方法について説明します。
IAP 経由の SSH トンネリング
MDE サービスのプライベート IP に接続するには、プロキシ VM への SSH トンネルを使用します。このアプローチでは、Postman などのローカルツールを使用して MDE API を操作できます。
標準の MDE デプロイメントでは、mde-proxy というプロキシ VM が作成されます。このマシンは、MDE API ゲートウェイまたは MDE ウェブ インターフェースへの受信リクエストをプロキシできます。この VM
にはプライベート IP のみがありますが、IAP を使用すると、Identity-Aware Proxy(IAP)TCP 転送を使用して、このマシンへの安全な SSH
トンネルを作成できます
。
このセクションの残りの部分では、mde-proxy にトラフィックをトンネリングするように IAP を構成する方法と、ワークステーションからトンネルを作成する方法について説明します。
コンソールで、IAP に移動して [**API を有効にする**] をクリックします。 Google Cloud 完了までに数分かかることがあります。
コンソールで、 IAP に移動して [SSH と TCP リソース] をクリックします。 Google Cloud
IAP を使用して
mde-proxyに接続する権限を、IAP の使用が許可されているユーザーに付与します。ユーザーが IAP を使用して
mde-proxyに接続できるようにするには、次の手順でroles/iap.tunnelResourceAccessorロールを付与します。リストから [mde-proxy] を選択します。
右側のパネルで [プリンシパルを追加] をクリックします。
アクセス権を付与するプリンシパルのメールアドレスを入力します。
[
IAP-secured Tunnel User] ロールを選択します。
次のコマンドを使用して、MDE API へのトンネルを作成します。
export MDE_PROXY_ZONE=$(gcloud compute instances list --filter="mde-proxy" \ --format="value(zone)") gcloud compute ssh mde-proxy \ --zone "$MDE_PROXY_ZONE" --tunnel-through-iap \ -- -N -L 8080:api.mde.cloud.google.com:80コマンドを実行すると、
http://localhost:8080で MDE API にアクセスできるようになります。MDE ウェブ インターフェースへのトンネルを作成します。
ステップ 3 で MDE API へのトンネルを作成した場合は、新しいターミナルを開いて後でコマンドを実行できます。MDE API と MDE ウェブ インターフェースへの SSH トンネルは並行して実行できます。
export MDE_PROXY_ZONE=$(gcloud compute instances list --filter="mde-proxy" \ --format="value(zone)") gcloud compute ssh mde-proxy \ --zone "$MDE_PROXY_ZONE" --tunnel-through-iap \ -- -N -L 8081:ui.mde.cloud.google.com:80コマンドを実行すると、
http://localhost:8081で MDE ウェブ インターフェースにアクセスできるようになります。
Identity-Aware Proxy を構成する
Identity-Aware Proxy(IAP)を使用すると、MDE API とウェブ インターフェースの内部 IP に安全に接続できます。また、外部ロードバランサ オプションを使用してデプロイした場合は、MDE ウェブ インターフェースへの外部アクセスを承認されたユーザーのみに制限できます。
IAP を使用するには、まず IAP サービス API を有効にして(まだ有効にしていない場合)、OAuth 画面を構成する必要があります。
コンソールで、IAP に移動して [**API を有効にする**] をクリックします。 Google Cloud 完了までに数分かかることがあります。
IAP の OAuth 同意画面を構成します。
コンソールで、 Google Auth Platform ページに移動し、プロンプトが表示されたら MDE デプロイ プロジェクトを選択します。 Google Cloud
- [概要] ページで [OAuth クライアントを作成] をクリックします。
- アプリケーションの種類として [ウェブ アプリケーション] を選択します。
- 表示するアプリケーション名 (
MDEなど)を入力します。 - ポップアップ ウィンドウで [作成]、[OK] をクリックします。
- [ブランディング] ページで、[**アプリ名**]、[**ユーザー サポートメール**]、[**デベロッパーの連絡先情報**] が表示されていることを確認します。
プロダクト名やメールアドレスなど、OAuth 同意画面の情報を後で変更する場合は、上記の手順を繰り返して同意画面を構成します。
ウェブ インターフェースの外部 HTTP ロードバランサへのアクセスを構成する
このセクションでは、IAP を使用して MDE ウェブ インターフェースの外部 HTTP ロードバランサへのアクセスを構成します。
MDE ウェブ インターフェースで外部 HTTP ロードバランサを有効にした場合は、IAP を使用して、承認されたユーザーのみがアプリケーションにアクセスできるように制限する必要があります。
始める前に
次の前提条件を満たしていることを確認してください。
- MDE ウェブ インターフェースを使用して MDE をデプロイした。
- 外部 HTTP ロードバランサを使用して MDE ウェブ インターフェースをデプロイした。
- 一般的な IAP 構成の手順を完了した。
手順
コンソールで、 [IAP] ページに移動します。 Google Cloud
外部 UI サービスに対応するリソースを見つけます(
mde-ui-ext-serviceを探します)。そのリソースの [IAP] 列で、スイッチを [有効] に切り替えます。
確認ダイアログで [有効にする] をクリックします。
リソース名の横にあるチェックボックスをオンにします。
右側のパネルで [プリンシパルを追加] をクリックします。
アクセス権を付与するユーザーまたはグループのメールアドレスを入力します。
[ロール] プルダウンで、[Cloud IAP] > [IAP で保護されたウェブアプリ ユーザー] を選択します。
[保存] をクリックします。
組織間アクセス(省略可)
デフォルトでは、IAP は Google 管理の OAuth クライアントを使用します。これにより、プロジェクトと同じ Google Cloud 組織内のユーザーへのアクセスが厳しく 制限されます。 デプロイメントで外部ユーザー(別のドメインを使用するパートナー)からのアクセスが必要な場合は、[外部] ユーザータイプで構成されたカスタム OAuth クライアント を使用する必要があります。
詳細については、IAP でカスタム OAuth クライアントを使用すると GKE での IAP の有効化に関する公式 Google Cloud ドキュメントをご覧ください。
これは、次のいずれかの方法で構成できます。
方法 A: コンソールで直接構成する(GKE Secret を使用しない)
GKE BackendConfig が IAP 設定を管理していない場合(iap ブロックがなく、GKE Ingress が既存の設定を継承できる場合)、コンソールでカスタム クライアントを直接構成できます。
- プロジェクトのOAuth 同意画面 を [外部] に構成します(上記の OAuth 同意画面を構成する セクションをご覧ください)。 アプリが [テスト] ステータスの場合は、外部ユーザーを [テストユーザー] リストに追加してください。
- IAP ページに移動します。
mde-ui-ext-serviceリソースの [アクション] 列で [その他のオプション](3 つのドット)をクリックし、[設定] を選択します。- [カスタム OAuth] を選択します。
- [認証情報を自動生成] をクリックします(API とサービスで手動で作成した既存の認証情報がある場合は、その認証情報を指定します)。
- [保存] をクリックします。
方法 B: GKE 管理の構成(Kubernetes Secret を使用する)
Kubernetes マニフェスト(GitOps)を使用して IAP 構成を管理する場合は、認証情報を Secret に保存し、BackendConfig で参照する必要があります。
- OAuth 同意画面 を [外部] に構成し、[API とサービス] > [認証情報] でOAuth クライアント認証情報 を手動で作成します(ウェブ アプリケーション タイプ)。
- クラスタで Kubernetes Secret を作成します:
sh kubectl create secret generic iap-oauth-secret \ --namespace=mde \ --from-literal=client_id=YOUR_CLIENT_ID \ --from-literal=client_secret=YOUR_CLIENT_SECRET - Secret を参照するように、サービスの
BackendConfigを更新します:yaml spec: iap: enabled: true oauthclientCredentials: secretName: iap-oauth-secret
MDE ウェブ インターフェースの DNS を構成する
MDE ウェブ インターフェースで外部 HTTP ロードバランサを有効にした場合は、input.tfvars の変数 MDE_UI_DOMAIN_NAME に割り当てたドメイン名の A レコードを、Google 管理の SSL 証明書のプロビジョニングを完了するためにデプロイされた外部 HTTP ロードバランサの IP アドレスに設定する必要があります。
外部 HTTP バランサの IP アドレスは、次のコマンドで確認できます。
gcloud compute addresses list --filter="name~'.*mde-ui.*'" --format="value(address)" --global
A レコードの作成方法については、DNS ホストにお問い合わせください。