G-genの杉村です。Google Cloud の Identity-Aware Proxy(IAP)で、プロジェクトの所属組織とは異なる Google Workspace 組織の Google アカウントからのアクセスを許可する方法を解説します。

はじめに
Identity-Aware Proxy(IAP)とは
Identity-Aware Proxy(IAP)は、Google Cloud 上で稼働するアプリケーションに対して、ユーザーの ID に基づいた認証機構を提供するサービスです。アプリケーション自体に認証・認可の仕組みを実装しなくても、ロードバランサーや Cloud Run サービスなどのレベルで、安全なアクセス制御を実現します。
IAP を有効化すると、ユーザーはアプリケーションにアクセスする前に Google アカウントでの認証を求められます。認証後、IAM で付与されたロールに基づいてアクセスが許可または拒否されます。
(図)
また IAP は VM への SSH/RDP ログインのための踏み台としても使うことができます。以下の記事も参照してください。
デフォルトの挙動と課題
IAP を有効化すると、デフォルトでは「Google が管理する OAuth クライアント」が自動的に作成され、認証に使用されます。この OAuth クライアントは、認証を求めるユーザーが、その Google Cloud プロジェクトが属する Google Cloud 組織と同じ Google Workspace(または Cloud Identity)組織に所属していることを前提としています。
例えば、example-a.com というドメインを持つ A 社の Google Cloud 組織配下のプロジェクトで動作する Cloud Run でホストされた Web アプリケーションにおいて IAP を有効にした場合、デフォルトでは @example-a.com ドメインの Google アカウントを持つユーザーしか認証を通過できません。アプリケーションを使わせたい顧客である B 社のユーザー(@example-b.com)にアクセスを許可しようとしても、認証画面でエラーとなりアクセスができません。

You don't have access.
If you're signed in with multiple Google accounts, try a different account.
If you should have access, please contact xxx and provide the troubleshooting info above.
カスタム OAuth クライアントの利用
この事象は、IAP で使用する OAuth クライアントを、Google 管理のものではなく自前で作成した「カスタムOAuthクライアント」に切り替えることで解決できます。
カスタム OAuth クライアントを利用することで、認証を許可する Google アカウントのドメイン(組織)に関する制約がなくなります。これにより、任意の Google アカウントを持つユーザーに対して、IAM ポリシーでアクセスを許可できるようになります。
当記事では、このカスタム OAuth クライアントを作成し、IAP に設定するまでの手順を解説します。
注意点
Cloud Run services では、サービスのレベルで IAP を設定可能です。この方法では Cloud Load Balancing を必要としませんが、認証できるのは Google Cloud プロジェクトと同じ組織に所属する Google アカウントのみです。当記事で紹介する方法は使えませんのでご注意ください。当記事の方法で外部組織のアカウントを認証するには、ロードバランサーが必要です。
以下の記事も参考にしてください。
設定手順の概要
設定は大きく分けて以下の4ステップです。
- OAuth 同意画面の設定
- カスタム OAuth クライアントの作成
- IAP にカスタム OAuth クライアントを設定
- アクセス許可の設定
なお前提として、すでに Cloud Load Balancing を使い外部ロードバランサーがセットアップ済みであり、インターネット公開のアプリケーションの準備ができているものとします。バックエンドは Cloud Run でも、Compute Engine でも、種類は問いません。
OAuth 同意画面の設定
カスタム OAuth クライアントを作成する前に、プロジェクトで OAuth同意画面を設定する必要があります。OAuth 同意画面とは、ユーザーがアプリケーションに個人情報へのアクセスを許可する際に表示される画面のことです。
Google Cloud コンソールの上部検索ボックスに「Google Auth Platform」と入力して表示されるサジェストから「Google Auth Platform」画面へ進みます。
同意画面が未設定の場合、「Google Auth Platform はまだ構成されていません」と表示されるので下部ボタン「開始」をクリックします。ここではアプリ名、連絡先のメールアドレスなどを設定します。ここで、「対象(User Type)」として「外部」を選択します。この設定は、OAuth 同意画面の初期設定時のほか、あとからでも変更可能です。

- 参考 : Manage OAuth App Branding
- 参考 : Manage App Audience
カスタム OAuth クライアントの作成
次に、カスタム OAuth クライアントを作成します。
Google Cloud コンソールの「Google Auth Platform」から「クライアント」へ進み、「+ クライアントを作成」を押下します。クライアントは、以下のとおり作成します。
| 設定項目 | 設定値 |
|---|---|
| アプリケーションの種類 | ウェブ アプリケーション |
| 名前 | (任意) |
| 承認済みの JavaScript 生成元 | (何も追加しない) |
| 承認済みのリダイレクト URI | (何も追加しない) |
「作成」をクリックすると、クライアント ID とクライアントシークレットが表示されます。この値は後ほど使用するため、必ず控えておきます。機微な情報のため、注意して扱ってください。
一度クライアントを作成した後、再度そのクライアントの編集画面を開き、「承認済みのリダイレクト URI」を設定します。これは、Google の認証サーバーがユーザーの認証後にリダイレクトさせる宛先を指定するもので、IAP の動作において不可欠な設定です。
「承認済みのリダイレクト URI」の下部にある「URI を追加」をクリックし、以下の形式の URI を入力します。${CLIENT_ID} の部分は、先ほど作成した OAuth クライアントのクライアント IDに置き換えてください(クライアントシークレットではありません)。
https://iap.googleapis.com/v1/oauth/clientIds/${CLIENT_ID}:handleRedirect
URI は、例えば以下のような値になります。
https://iap.googleapis.com/v1/oauth/clientIds/123456789012-abcdefghijklmnopqr.apps.googleusercontent.com:handleRedirect
設定後、「保存」をクリックします。

この URI 指定方法については、IAP で外部組織の Google アカウントを設定する方法としては公式ドキュメントには記載がありませんが、以下の Workforce Identity 連携と IAP の併用に関する公式ドキュメントに記載があり、Google アカウントの場合でも同様です。
IAP にカスタム OAuth クライアントを設定
作成したカスタム OAuth クライアントを IAP で使用するよう設定を変更します。
Google Cloud コンソールの「セキュリティ」から「Identity-Aware Proxy」へ移動します。設定を変更したいバックエンドサービスの「IAP」チェックボックスをオンにし、右側の三点リーダーをクリックすると表示されるプルダウンメニューから「設定」をクリックします。

OAuth クライアントの選択画面で、「カスタム OAuth(特定の制御、ブランディング、外部ユーザー用)」を選択します。
前の手順で控えておいたクライアント IDとクライアントシークレットを入力し、「保存」をクリックします。

アクセス許可の設定
最後に、アクセスを許可したい他組織のユーザーやグループ、ドメインに対して IAM ロールを付与します。
IAP の管理画面で対象のバックエンドサービス等を選択し、右パネルの「プリンシパルを追加」をクリックします。
「新しいプリンシパル」に、アクセスを許可したい Google アカウント(john.doe@example-b.com)、Googleグループ(dev-group@example-b.com)、またはドメイン全体(example-b.com)を入力します。
ロールには、IAP-secured Web App User を選択し、保存します。

以上で設定は完了です。許可した他組織の Google アカウントでアプリケーションにアクセスすると、Google のログイン画面が表示され、認証後にアプリケーションが利用できることが確認できます。

杉村 勇馬 (記事一覧)
執行役員 CTO
元警察官という経歴を持つ IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 認定資格および Google Cloud 認定資格はすべて取得。X(旧 Twitter)では Google Cloud や Google Workspace のアップデート情報をつぶやいています。
Follow @y_sugi_it