IAP の OAuth クライアントをプログラムで作成

このページでは、IAP と使用する OAuth クライアントをプログラムで作成し、内部アプリケーション用にプログラムでエンドツーエンドに IAP を設定できるようにする方法について説明します。

既知の制限事項

プログラムで作成された OAuth クライアントには、いくつかの既知の制限事項があります。

  • API によって作成された OAuth クライアントは、API を使用してのみ変更できます。API を使用して OAuth クライアントを作成した場合は、Cloud Console では OAuth クライアントを変更できません。
  • API を使用した場合、プロジェクトごとに許可される OAuth クライアントの数は 500 のみです。
  • API によって作成された OAuth 同意画面のブランドには特定の制限があります。詳しくは下記のセクセクションをご覧ください。

ブランドとブランドの状態について理解する

ユーザーのブランド情報が含まれるOAuth 同意画面は、ブランドとして知られています。ブランドは、内部ユーザーまたはパブリック ユーザーに限定できます。内部ブランドを使用すると、プロジェクトと同じ Google Workspace 組織に属するユーザーが OAuth フローにアクセスできるようになります。パブリック ブランドにより、インターネット上の誰もが OAuth フローを利用できるようになります。

ブランドは API を介して手動またはプログラムで作成できます。API で作成されたブランドは、異なる設定で自動的に構成されます。

  • これらは内部に設定されており、必要に応じて手動でパブリックに設定する必要があります
  • これらは「未確認」状態に設定されており、ブランド レビューをトリガーする必要があります

内部ブランドを手動でパブリックに設定するには:

  1. OAuth 同意画面を開きます。
  2. プルダウン メニューから目的のプロジェクトを選択します。
  3. [OAuth 同意画面] ページで、[ユーザータイプ] が [内部] に自動的に設定されていることに注意してください。[パブリック] に設定するには、[アプリを編集する] をクリックします。より多くの構成オプションが利用可能になります。
  4. [アプリケーション タイプ] で [パブリック] をクリックします。

未審査の API で作成されたブランドのブランド レビューをトリガーするには:

  1. OAuth 同意画面を開きます。
  2. プルダウン メニューから目的のプロジェクトを選択します。
  3. [OAuth 同意画面] ページで、必要な情報を入力して、[確認のため送信] をクリックします。

この確認プロセスは数週間かかる場合があります。進捗に関する最新情報はメールで通知されます。詳しくは、確認プロセスの詳細をご覧ください。確認プロセスの進行中も、Google Workspace 組織内でアプリケーションを使用できます。確認前のアプリケーションの動作については、こちらをご覧ください。

始める前に

クライアントを作成する前に、呼び出し元に次の権限が付与されていることをまず確認してください。

  • clientauthconfig.brands.list
  • clientauthconfig.brands.create
  • clientauthconfig.brands.get
  • clientauthconfig.clients.create
  • clientauthconfig.clients.listWithSecrets
  • clientauthconfig.clients.getWithSecret
  • clientauthconfig.clients.delete
  • clientauthconfig.clients.update

これらの権限は編集者(roles/editor)とオーナー(roles/owner)の基本ロールに含まれていますが、代わりに、これらの権限を含むカスタムロールを作成し、呼び出し元に付与することをおすすめします。

OAuth for IAP を設定する

次の手順では、同意画面を構成し、IAP 用のクライアントを作成、認証する方法について説明します。

  1. list コマンドを使用して、既存のブランドがあるかどうかを確認します。1 つのプロジェクトで使用できるブランドは 1 つだけです。

    gcloud alpha iap oauth-brands list
    

    ブランドがある場合の gcloud のレスポンスは次のとおりです。

    name: projects/[PROJECT_NUMBER]/brands/[BRAND_ID]
    applicationTitle: [APPLICATION_TITLE]
    supportEmail: [SUPPORT_EMAIL]
    orgInternalOnly: true
    
  2. ブランドが存在しない場合は、create コマンドを使用します。

    gcloud alpha iap oauth-brands create --application_title=APPLICATION_TITLE --support_email=SUPPORT_EMAIL
    

    上記のフィールドは、この API を呼び出すときに必要になります。

    • supportEmail: OAuth 同意画面に表示されるサポートメール。このメールアドレスは、ユーザーのアドレスでも、Google グループのエイリアスでもかまいません。サービス アカウントにもメールアドレスがありますが、これは実際のメールアドレスではないため、ブランドの作成には使用できません。ただし、サービス アカウントは Google グループのオーナーに設定できます。新しい Google グループを作成するか、既存のグループを構成し、目的のサービス アカウントをそのグループのオーナーに設定します。

    • applicationTitle: OAuth 同意画面に表示されるアプリケーション名。

    レスポンスには、次のフィールドが含まれます。

    name: projects/[PROJECT_NUMBER]/brands/[BRAND_ID]
    applicationTitle: [APPLICATION_TITLE]
    supportEmail: [SUPPORT_EMAIL]
    orgInternalOnly: true
    

IAP OAuth クライアントの作成

  1. create コマンドを使用してクライアントを作成します。前のステップのブランド name を使用します。

    gcloud alpha iap oauth-clients create projects/PROJECT_ID/brands/BRAND-ID --display_name=NAME
    

    レスポンスには、次のフィールドが含まれます。

    name: projects/[PROJECT_NUMBER]/brands/[BRAND_NAME]/identityAwareProxyClients/[CLIENT_ID]
    secret: [CLIENT_SECRET]
    displayName: [NAME]
    
  2. クライアント ID(上記の例ではclient_id)と secret を使用して IAP を有効にします。作成した認証情報を使用して IAP を有効にする方法の詳細については、次のトピックをご覧ください。

認証

アプリに IAP を構成したら、すべてのリクエストを認証する必要があります。次の手順では、IAP で保護されたアプリケーションにプログラムでアクセスする方法について説明します。

エンドユーザー認証

上記の手順に従った後、OAuth 2.0 を使用して認証する方法の詳細については、このトピックをご覧ください。自動化が許可されるように、更新トークンを必ず要求してください。OAuth フロー中に手動で同意する必要がありますが、更新トークンを使用してプログラムで新しいアクセス トークンを取得できます。

サービス アカウントと gcloud

サービス アカウントと gcloud を使用して認証するには:

  1. サービス アカウントを作成し、必要な権限を付与します。
  2. サービス アカウントキーを作成し、目的のパスにダウンロードします。
  3. サービス アカウントキーへのパスを指定して、次の gcloud コマンドを実行します。

    gcloud auth activate-service-account [ACCOUNT-NAME]
        --key-file=/path/to/service-key.json --project=[PROJECT_ID]
    
  4. gcloud auth print-access-token を使用して API リクエストを作成します。

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)"
        https://iap.googleapis.com/v1/projects/[PROJECT_ID_OR_NUMBER]/brands