ステップ 3: アクセスを構成する

このセクションでは、ニーズに応じて MDE デプロイへのアクセス権を付与するさまざまな方法について説明します。

IAP 経由の SSH トンネリング

MDE サービスのプライベート IP に接続するには、プロキシ VM への SSH トンネルを使用します。このアプローチでは、MDE API とのやり取りに Postman などのローカル ツールを使用できます。

標準の MDE デプロイでは、mde-proxy というプロキシ VM が作成されます。このマシンは、MDE API ゲートウェイまたは MDE ウェブ インターフェースへの受信リクエストをプロキシできます。この VM にはプライベート IP のみがありますが、IAP を使用すると、TCP 転送用の Identity-Aware Proxy(IAP)を使用して、このマシンへの安全な SSH トンネルを作成できます。このセクションの残りの部分では、mde-proxy にトラフィックをトンネリングするように IAP を構成する方法と、ワークステーションから mde-proxy へのトンネルを作成する方法について説明します。

  1. Google Cloud コンソールで、[IAP] に移動し、[API を有効にする] をクリックします。完了までに数分かかることがあります。

  2. Google Cloud コンソールで、[IAP] に移動して、[SSH と TCP のリソース] をクリックします。

  3. IAP の使用が承認されているユーザーに、IAP 経由で mde-proxy に接続する権限を付与します。

    ユーザーが IAP を使用して mde-proxy に接続できるようにするには、次の手順で roles/iap.tunnelResourceAccessor ロールを付与します。

    1. リストから [mde-proxy] を選択します。

    2. 右側のサイドパネルで [プリンシパルを追加] をクリックします。

    3. アクセス権を付与するプリンシパルのメールアドレスを入力します。

    4. IAP-secured Tunnel User ロールを選択します。

  4. 次のコマンドを使用して、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
    

    コマンドを実行すると、MDE API に http://localhost:8080 でアクセスできるようになります。

  5. 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
    

    コマンドを実行すると、MDE ウェブ インターフェースに http://localhost:8081 でアクセスできるようになります。

Identity-Aware Proxy の構成

Identity-Aware Proxy(IAP)を使用すると、MDE API とウェブ インターフェースの内部 IP に安全に接続できます。また、外部ロードバランサ オプションを使用してデプロイした場合は、MDE ウェブ インターフェースへの外部アクセスを承認済みユーザーのみに制限できます。

IAP を使用するには、まず IAP サービス API を有効にして(まだ有効にしていない場合)、OAuth 画面を構成する必要があります。

  1. Google Cloud コンソールで、[IAP] に移動し、[API を有効にする] をクリックします。完了までに数分かかることがあります。

  2. IAP の OAuth 同意画面を構成します。

    1. Google Cloud コンソールで [Google Auth Platform] ページに移動し、プロンプトが表示されたら MDE デプロイ プロジェクトを選択します。
    2. [概要] ページで、[使ってみる] をクリックします。
    3. 表示するアプリケーション名(例: MDE)を入力します。
    4. メールアドレスを [ユーザー サポートメール] として追加し、[次へ] をクリックします。
    5. [対象] で [外部] を選択し、[次へ] をクリックします。
    6. メールアドレスを [連絡先情報] として追加し、[次へ] をクリックします。
    7. Google API サービス ユーザーデータに関するポリシーを読んで同意し、[続行] をクリックします。
    8. [作成] をクリックします。

ウェブ インターフェースの外部 HTTP ロードバランサへのアクセスを構成する

このセクションでは、IAP を使用して MDE ウェブ インターフェースの外部 HTTP ロードバランサへのアクセスを構成します。

MDE ウェブ インターフェースで外部 HTTP ロードバランサを有効にした場合は、IAP を使用して、承認されたユーザーのみにアプリケーションへのアクセスを制限する必要があります。

始める前に

次の前提条件を満たしていることを確認してください。

  • MDE ウェブ インターフェースを使用して MDE をデプロイした。
  • 外部 HTTP ロードバランサを使用して MDE ウェブ インターフェースをデプロイしました。
  • 一般的な IAP 構成の手順を完了している。

手順

  1. Google Cloud コンソールで、[IAP] ページに移動します。

  2. 外部 UI サービスに対応するリソースを見つけます(mde-ui-ext-service を探します)。

  3. そのリソースの [IAP] 列で、スイッチを [有効] に切り替えます。

  4. 確認ダイアログで、構成要件を読んで同意し、[有効にする] をクリックします。

  5. 有効にしたら、リソース名(mde-ui-ext-service)の横にあるチェックボックスをオンにします。

  6. 右側のサイドパネルで、[プリンシパルを追加] をクリックします。

  7. アクセス権を付与するユーザーまたはグループのメールアドレスを入力します。

  8. [ロール] プルダウンで、[Cloud IAP] > [IAP で保護されたウェブアプリ ユーザー] を選択します。

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

組織間のアクセス(省略可)

デフォルトでは、IAP は Google が管理する OAuth クライアントを使用します。これにより、プロジェクトと同じ Google Cloud 組織内のユーザーへのアクセスが厳しく制限されます。デプロイで外部ユーザー(別のドメインを使用するパートナー)からのアクセスが必要な場合は、[ユーザータイプ] が [外部] に設定されたカスタム OAuth クライアントを使用する必要があります。

詳細については、IAP でカスタム OAuth クライアントを使用するGKE での IAP の有効化に関する Google Cloud 公式ドキュメントをご覧ください。

これは、次のいずれかの方法で構成できます。

方法 A: コンソールでの直接構成(GKE Secret なし)

GKE BackendConfig が IAP 設定を管理していない場合(iap ブロックがなく、GKE Ingress が既存の設定を継承できる場合)、コンソールでカスタム クライアントを直接構成できます。

  1. IAP ページに移動します。
  2. mde-ui-ext-service リソースの [操作] 列で、[その他のオプション](3 つのドット)をクリックし、[設定] を選択します。
  3. [カスタム OAuth] を選択します。
  4. [認証情報を自動生成] をクリックします(または、API とサービスで手動で作成した既存の認証情報を指定します)。
  5. [保存] をクリックします。

方法 B: GKE 管理構成(Kubernetes Secret を使用)

Kubernetes マニフェスト(GitOps)を使用して IAP 構成を管理する場合は、認証情報をシークレットに保存し、BackendConfig で参照する必要があります。

  1. OAuth 同意画面を [外部] に設定し、[API とサービス] > [認証情報](ウェブ アプリケーション タイプ)で OAuth クライアント認証情報を手動で作成します。
  2. クラスタに 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
  3. サービス用の BackendConfig を更新して、シークレットを参照します。 yaml spec: iap: enabled: true oauthclientCredentials: secretName: iap-oauth-secret

MDE ウェブ インターフェースの DNS を構成する

MDE ウェブ インターフェースで外部 HTTP ロードバランサを有効にした場合は、input.tfvars の変数 MDE_UI_DOMAIN_NAME に割り当てたドメイン名の A レコードを、デプロイされた外部 HTTP ロードバランサの IP アドレスに設定して、Google マネージド SSL 証明書のプロビジョニングを完了する必要があります。

次のコマンドを使用して、外部 HTTP バランサの IP アドレスを調べることができます。

gcloud compute addresses list --filter="name~'.*mde-ui.*'" --format="value(address)" --global

A レコードの作成方法について詳しくは、DNS ホストにお問い合わせください。