このページでは、Identity-Aware Proxy(IAP)で保護されたリソースをユーザー アカウントまたはサービス アカウントから認証する方法について説明します。
- ユーザー アカウントは、個々のユーザーに属します。ユーザーの代わりにアプリケーションが IAP で保護されたリソースにアクセスする必要がある場合、ユーザー アカウントを認証します。ユーザー アカウント認証情報をご覧ください。
- サービス アカウントは、個々のユーザーではなくアプリケーションに属します。アプリケーションから IAP で保護されたリソースにアクセスできるようにする場合、サービス アカウントを認証します。サービス アカウントについての説明をご覧ください。
始める前に
始める前に、次のものが必要になります。
- デベロッパー アカウント、サービス アカウント、モバイルアプリの認証情報を使用してプログラムで接続する、IAP で保護されたアプリケーション。
ユーザー アカウントの認証
デスクトップまたはモバイルアプリからアプリへのユーザー アクセスを有効にすると、プログラムから IAP で保護されたリソースを操作できます。
モバイルアプリからの認証
- IAP で保護されたリソースと同じプロジェクトで、モバイルアプリの OAuth 2.0 クライアント ID を作成します。
- [認証情報] ページに移動します。
[認証情報] ページに移動 - IAP で保護されたリソースを含むプロジェクトを選択します。
- [認証情報を作成] をクリックし、[OAuth クライアント ID] を選択します。
- 認証情報を作成する [アプリケーションの種類] を選択します。
- 必要に応じて [名前] と [制限事項] を追加し、[作成] をクリックします。
- [認証情報] ページに移動します。
- 表示される [OAuth クライアント] ウィンドウで、接続先の IAP で保護されたリソースの [クライアント ID] をメモします。
- IAP で保護されたクライアント ID の ID トークンを取得します。
- Android: Google Sign-In API を使用して OpenID Connect(OIDC)トークンをリクエストします。
requestIdToken
クライアント ID を接続先のリソースのクライアント ID に設定します。 - iOS: Google ログインを使用して ID トークンを取得します。
serverClientID
を接続先のリソースのクライアント ID に設定します。
- Android: Google Sign-In API を使用して OpenID Connect(OIDC)トークンをリクエストします。
Authorization: Bearer
ヘッダーに ID トークンを含めて、IAP で保護されたリソースに認証済みリクエストを送信します。
デスクトップ アプリからの認証
このセクションでは、デスクトップ コマンドラインからユーザー アカウントを認証する方法について説明します。
クライアント ID の設定
デベロッパーがコマンドラインからアプリケーションにアクセスできるようにするには、まず [デスクトップ アプリ] タイプの OAuth クライアント ID 認証情報を作成する必要があります。
- [認証情報] ページに移動します。
[認証情報] ページに移動 - IAP で保護されたリソースを含むプロジェクトを選択します。
- [認証情報を作成] をクリックし、[OAuth クライアント ID] を選択します。
- [アプリケーションの種類] で [デスクトップ アプリ] を選択し、[名前] を追加して、[作成] をクリックします。
- 表示される [OAuth クライアント] ウィンドウで、[クライアント ID] と [クライアント シークレット] をメモします。認証情報を管理したり、デベロッパーと共有したりするには、これらをスクリプトで使用する必要があります。
- [認証情報] ウィンドウに、アプリケーションへのアクセスに使用するメイン クライアント ID とともに、新しい [デスクトップ アプリ] の認証情報が表示されます。
アプリケーションへのログイン
個々のデベロッパーが IAP で保護されたアプリにアクセスするには、まずログインする必要があります。Cloud SDK を使用するなどの方法で、プロセスをスクリプトにパッケージ化できます。次に、curl を使用してログインし、アプリケーションにアクセスするために使用できるトークンを生成する例を示します。
- Google Cloud リソースにアクセスできるアカウントにログインします。
-
下記の URI に移動します。
DESKTOP_CLIENT_ID
は、上記で作成した [デスクトップ アプリ] のクライアント ID です。https://accounts.google.com/o/oauth2/v2/auth?client_id=DESKTOP_CLIENT_ID&response_type=code&scope=openid%20email&access_type=offline&redirect_uri=urn:ietf:wg:oauth:2.0:oob
- 表示されるウィンドウで、次に示す
AUTH_CODE
を置き換える [認証コード] と、上記で作成した [デスクトップ アプリ] のクライアント ID とシークレットをメモします。curl --verbose \ --data client_id=DESKTOP_CLIENT_ID \ --data client_secret=DESKTOP_CLIENT_SECRET \ --data code=AUTH_CODE \ --data redirect_uri=urn:ietf:wg:oauth:2.0:oob \ --data grant_type=authorization_code \ https://oauth2.googleapis.com/token
このコードは、アプリケーションにアクセスするためのログイン トークンとして保存できる
refresh_token
フィールドを含む JSON オブジェクトを返します。
アプリケーションへのアクセス
アプリケーションにアクセスするには、ID トークンのログインフローで生成した refresh_token
を交換します。ID トークンは約 1 時間有効です。その間、特定のアプリに対して複数のリクエストを行うことができます。curl を使用してトークンを使用し、アプリケーションにアクセスする例を次に示します。
- 以下のコードを使用します。
REFRESH_TOKEN
はログインフローで生成したトークン、IAP_CLIENT_ID
はアプリケーションへのアクセスに使用するメイン クライアント ID、DESKTOP_CLIENT_ID
とDESKTOP_CLIENT_SECRET
は上記のクライアント ID の設定時に作成したクライアント ID とシークレットです。curl --verbose \ --data client_id=DESKTOP_CLIENT_ID \ --data client_secret=DESKTOP_CLIENT_SECRET \ --data refresh_token=REFRESH_TOKEN \ --data grant_type=refresh_token \ --data audience=IAP_CLIENT_ID \ https://oauth2.googleapis.com/token
このコードは、アプリにアクセスするために使用できる
id_token
フィールドを含む JSON オブジェクトを返します。 - アプリにアクセスするには、次のように
id_token
を使用します。curl --verbose --header 'Authorization: Bearer ID_TOKEN' URL
サービス アカウントからの認証
OpenID Connect(OIDC)トークンを使用して、IAP で保護されたリソースに対してサービス アカウントを認証します。以下の手順に沿って、クライアント ID を確認します。
- IAP ページに移動します。
アクセスするリソースを見つけて、[詳細] > [OAuth クライアントを編集] をクリックします。
表示される [認証情報] ページで、クライアント ID をメモします。
また、IAP で保護されたプロジェクトのアクセスリストにもサービス アカウントを追加する必要があります。次のコードサンプルは、OIDC トークンを取得する方法を示しています。どれを選択するかにかかわらず、Authorization: Bearer
ヘッダーにトークンを含めて、IAP で保護されたリソースに認証済みリクエストを送信する必要があります。
デフォルトのサービス アカウント用に OIDC トークンを取得する
Compute Engine、App Engine、Cloud Run のデフォルトのサービス アカウント用 OIDC トークンを取得する場合は、以下のコードサンプルを使用してアクセス トークンを生成し、IAP で保護されたリソースにアクセスします。
C#
Go
Java
Node.js
PHP
Python
Ruby
ローカルのサービス アカウント キー ファイルから OIDC トークンを取得する
サービス アカウント キー ファイルがある場合は、上記のサンプルコードでサービス アカウント キー ファイルを指定できます。
OIDC トークンを取得するほかのケース
上記以外の場合は、IAP で保護されたリソースにアクセスする直前に、IAM Credentials API を使用し、別のサービス アカウントのアクセス トークンに基づいて OIDC トークンを生成します。
- 対象のアカウントに対する
service account token creator
というロールを、アクセス トークンのアカウントに追加します。これにより、対象のサービス アカウントの OIDC トークンを作成するために必要な IAM 権限が付与されることになります。 - アクセス トークンを使用して、対象のサービス アカウントで generateIdToken を呼び出します。
audience
フィールドにクライアント ID を設定する場合は特に注意が必要です。
次のステップ
- Authorization: Bearer トークンの詳細を確認する。
- Android 用のログインまたは iOS 用のログインを試す。