Okta との Workforce Identity 連携を構成してユーザー ログインを行う

このガイドでは、Okta を ID プロバイダ(IdP)として Workforce Identity 連携を構成し、アクセスを管理する方法と、Workforce Identity 連携をサポートする Google Cloud サービスにアクセスできるようにユーザーをログインさせる方法について説明します。

始める前に

  1. Google Cloud 組織を設定する必要があります。

  2. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

    gcloud init

  3. ログインの場合、IdP は署名付き認証情報を提供する必要があります。OIDC IdP は JWT を提供し、SAML IdP レスポンスは署名されている必要があります。

  4. 組織または Google Cloud プロダクトの変更に関する重要な情報を受け取るには、重要な連絡先を指定する必要があります。詳細については、Workforce Identity 連携の概要をご覧ください。

必要なロール

Workforce Identity 連携の構成に必要な権限を取得するには、組織に対する IAM Workforce プール管理者roles/iam.workforcePoolAdmin)の IAM ロールを付与するように管理者に依頼します。ロールの付与の詳細については、アクセスの管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

また、IAM オーナー(roles/owner)の基本ロールには ID 連携を構成する権限も含まれています。本番環境では基本ロールを付与すべきではありません。基本ロールは、開発環境またはテスト環境で付与してください。

Workforce Identity プールを作成する

コンソール

Workforce Identity プールを作成するには、次の操作を行います。

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

    [Workforce Identity プール] に移動

  2. [プールを作成] をクリックして、次の操作を行います。

    1. [名前] にプールの名前を入力します。[プール ID] は、入力した名前から自動的に取得されます。

    2. 省略可: ID を更新するには、[編集] をクリックします。

    3. 省略可: [説明] にプールの説明を入力します。

    4. [セッション継続時間] はデフォルトで設定されています。カスタムのセッション継続時間を入力するには、[編集] をクリックします。セッション継続時間は、この Workforce プールの Google Cloud アクセス トークン、コンソール(連携)ログイン セッション、gcloud CLI ログイン セッションの有効期間を決定します。継続時間は 15 分(900 秒)より長く、12 時間(43,200 秒)より短くする必要があります。セッション継続時間が設定されていない場合、デフォルトで 1 時間(3,600 秒)に設定されます。

    5. プールを有効な状態で作成するには、[有効なプール] がオンになっていることを確認します。

    6. Workforce Identity プールを作成するには、[次へ] をクリックします。

gcloud

Workforce Identity プールを作成するには、次のコマンドを実行します。

gcloud iam workforce-pools create WORKFORCE_POOL_ID \
    --organization=ORGANIZATION_ID \
    --description="DESCRIPTION" \
    --session-duration=SESSION_DURATION \
    --location=global

次のように置き換えます。

  • WORKFORCE_POOL_ID: Google Cloud の Workforce プールを表す ID。ID の形式については、API ドキュメントのクエリ パラメータ セクションをご覧ください。
  • ORGANIZATION_ID: Google Cloud 組織の組織 ID。
  • DESCRIPTION: Workforce Identity プールの説明。
  • SESSION_DURATION: セッション継続時間。この Workforce プールの Google Cloud アクセス トークン、コンソール(連携)ログイン セッション、gcloud CLI ログイン セッションの有効期間を決定します。継続時間は 15 分(900 秒)より長く、12 時間(43,200 秒)より短くする必要があります。セッション継続時間が設定されていない場合、デフォルトで 1 時間(3,600 秒)に設定されます。

Okta アプリ統合を作成する

このセクションでは、Okta 管理コンソールを使用して Okta アプリ統合を作成する手順を説明します。詳細については、カスタムアプリ統合を作成するをご覧ください。

Workforce プールは、OIDC プロトコルと SAML プロトコルの両方を使用した連携をサポートしています。

詳細については、Okta の OIDCSAML の統合ガイドをご覧ください。このセクションでは、基本的な構成について説明します。

OIDC

OIDC プロトコルを使用する Okta アプリ統合を作成するには、次の手順を行います。

  1. Okta 管理コンソールにログインします。
  2. [Applications] > [Applications] に移動します。
  3. アプリ統合の構成を開始するには、次の操作を行います。

    1. [Create App Integration] をクリックします。
    2. [Sign-in method] で [OIDC - OpenID Connect] を選択します。
    3. [Application type] で、アプリケーションの種類([Web Application] など)を選択します。
    4. アプリを作成するには、[Next] をクリックします。
    5. [App integration name] にアプリの名前を入力します。
    6. [Grant type] セクションで、[Implicit (hybrid)] チェックボックスをオンにします。
    7. [Sign-in redirect URIs] セクションのテキスト フィールドに、リダイレクト URL を入力します。ログインに成功すると、この URL にリダイレクトされます。コンソール(連携)へのアクセスを構成する場合は、次の URL 形式を使用します。

      https://auth.cloud.google/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
      

      次のように置き換えます。

      • WORKFORCE_POOL_ID: このガイドで前に作成した Workforce プールの ID。
      • WORKFORCE_PROVIDER_ID: 任意の Workforce Identity プロバイダ ID(例: okta-oidc-provider)。ID の形式については、API ドキュメントのクエリ パラメータ セクションをご覧ください。
    8. [Skip group assignment for now] チェックボックスをオンにします。

    9. アプリ統合を保存するには、[Save] をクリックします。

  4. ユーザーにアプリ統合を割り当てます。

  5. 省略可: Okta ユーザー プロファイルのカスタム属性を追加するには、次の操作を行います。

    1. [Data Type] で [string] を選択します。
    2. [Display name] に「Department」と入力します。
    3. [Variable name] に「department」と入力します。
    4. マッピングを保存するには、[Save] をクリックします。

    カスタム属性の追加に関する詳細は、Okta ユーザー プロフィールにカスタム属性を追加するをご覧ください。

  6. 省略可: OIDC トークンで送信される属性のマッピングを作成するには、[Directory] で [Profile Editor] をクリックし、次の操作を行います。

    1. このガイドで前に作成した OIDC アプリケーションを見つけます。
    2. [Mappings] をクリックします。
    3. [Okta User to App] タブを選択します。
    4. [Okta User User Profile] タブで、使用可能なコンボボックスに「department」を入力します。Okta の予測入力によって「user.department」となります。
    5. マッピングを保存するには、[Save Mappings] をクリックします。詳しくは、属性のマッピングの追加をご覧ください。

    マッピングの詳細については、プロファイル エディタで Okta 属性をアプリ属性にマッピングするをご確認ください。

  7. 省略可: グループ クレームを構成するには、次の操作を行います。

    1. Org Authorization Server を使用する場合は、次の操作を行います。
      1. [Applications] > [Applications] に移動します。
      2. このセクションで前に作成した OpenID Connect クライアント アプリケーションを選択します。
      3. [Sign On] タブに移動します。
      4. [OpenID Connect ID Token] セクションで、[Edit] をクリックします。
      5. [Groups claim type] セクションで、次のいずれかのオプションを選択できます。
        • [Expression] を選択します。
        • [Matches regex] を選択して「.*」と入力します。
      6. グループ クレームを保存するには、[Save] をクリックします。
      7. このガイドの後半で Workforce Identity プール プロバイダを作成する場合は、追加スコープとして groups を追加し、ウェブ シングル サインオン用に Okta からグループ クレームをリクエストします。この手順は、コンソール(連携)または gcloud CLI ブラウザベースのログインフローを使用する場合にのみ必要です。
    2. Custom Authorization Server を使用する場合は、次の操作を行います。
      1. 管理コンソールで、[Security] メニューから [API] を選択します。
      2. 構成するカスタム認可サーバーを選択します。
      3. [Claims] タブに移動し、[Add Claim] をクリックします。
      4. クレームの名前を入力します。この例では、groups という名前を付けます。
      5. クレームの [Include in token type] で、[ID Token] を選択して [Always] を選択します。
      6. [Value type] で [Groups] を選択します。
      7. [Filter] プルダウン ボックスで [Matches regex] を選択し、値として .* を入力します。
      8. [Create] をクリックします。

グループ クレームの詳細については、グループ クレームを追加するをご覧ください。

SAML

SAML プロトコルを使用する Okta アプリ統合を作成するには、次の手順を行います。

  1. Okta 管理コンソールにログインします。
  2. [Applications] > [Applications] に移動します。
  3. [Create App Integration] をクリックします。
  4. [Sign-in method] で [SAML 2.0] を選択し、[次へ] をクリックします。
  5. アプリの名前を入力して [Next] をクリックし、[Configure SAML] オプションに進みます。
  6. [Single Sign On URL] に、リダイレクト URL を入力します。これは、ユーザーがログインに成功した後にリダイレクトされる URL です。コンソールへのアクセスを構成する場合は、次の URL 形式を使用します。

    https://auth.cloud.google/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
    

  7. オーディエンス URISP Entity ID)を入力します。ID の形式は次のとおりです。

    https://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID

    次のように置き換えます。

    • WORKFORCE_POOL_ID: このガイドで前に作成した Workforce プールの ID
    • WORKFORCE_PROVIDER_ID: 任意の Workforce Identity プロバイダ ID(例: okta-saml-provider

    ID の形式については、API ドキュメントのクエリ パラメータ セクションをご覧ください。

  8. (省略可)属性ステートメントを使用して、SAML アサーションで送信するカスタム属性を指定します。設定後、これらの属性を Google Cloud で使用してアクセス管理ポリシーを作成できます。また、attribute_condition でも使用できます。たとえば、このガイドでは、部門を次のようにマッピングします。

    名前
    department user.department

    (省略可)グループ クレーム(このガイドの後半で使用)を追加するには、SAML アサーションでユーザーのグループ メンバーを渡す方法をご覧ください。

  9. Okta アプリ統合の作成を完了します。

Workforce Identity プール プロバイダを作成する

このセクションでは、IdP ユーザーが Google Cloud にアクセスできるように Workforce Identity プール プロバイダを作成する方法について説明します。OIDC または SAML プロトコルを使用するようにプロバイダを構成できます。

OIDC Workforce プール プロバイダを作成する

OIDC プロトコルを使用して、Okta アプリ統合用の Workforce Identity プール プロバイダを作成するには、次の操作を行います。

  1. Okta アプリ統合のクライアント ID を取得するため、次の操作を行います。

    1. Okta アプリ統合に移動します。
    2. [General] タブをクリックします。
    3. [Client ID] フィールドの内容をコピーします。
  2. ウェブベースのログイン用の OIDC Workforce Identity プール プロバイダを作成するには、次の操作を行います。

    コンソール

    コードフロー

    1. Okta で、次の手順を行います。

      1. [Client authentication] で、[Client secret] を選択します。

      2. [Client Secrets] テーブルで、シークレットを見つけて、 [Copy] をクリックします。

    2. Google Cloud コンソールで認証コードフローを使用する OIDC プロバイダを作成するには、次の操作を行います。

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

        [Workforce Identity プール] に移動

      2. [Workforce Identity プール] テーブルで、プロバイダを作成するプールを選択します。

      3. [プロバイダ] テーブルで [プロバイダを追加] をクリックします。

      4. [プロトコルを選択] で、[Open ID Connect(OIDC)] を選択します。

      5. [プール プロバイダの作成] で、次の操作を行います。

        1. [名前] にプロバイダの名前を入力します。
        2. [発行元(URL)] に発行元 URI を入力します。OIDC 発行元 URI は有効な URI 形式で、https で始まる必要があります。(例: https://example.com/oidc)。
        3. クライアント ID(OIDC IdP に登録されている OIDC クライアント ID)を入力します。ID は、IdP によって発行された JWT の aud クレームと一致する必要があります。
        4. 有効なプロバイダを作成するには、[有効なプロバイダ] がオンになっていることを確認します。
        5. [続行] をクリックします。
      6. [レスポンス タイプ] で、次の操作を行います。レスポンス タイプは、ウェブベースのシングル サインオン フローでのみ使用されます。

        1. [レスポンス タイプ] で [コード] を選択します。
        2. [クライアント シークレット] に、IdP のクライアント シークレットを入力します。
        3. [アサーション クレームの動作] で、次のいずれかを選択します。

          • ユーザー情報と ID トークン
          • ID トークンのみ
        4. [続行] をクリックします。

      7. [プロバイダの構成] で、属性のマッピングと属性条件を構成できます。属性のマッピングを作成する手順は次のとおりです。IdP フィールド名、または文字列を返す CEL 形式の式を指定できます。

        1. 必須: [OIDC 1] に、IdP からの件名を入力します(例: assertion.sub)。
        2. 省略可: 属性のマッピングを追加する手順は次のとおりです。

          1. [マッピングを追加] をクリックします。
          2. [Google n](n は数値)で、Google Cloud でサポートされている鍵のいずれかを入力します。
          3. 対応する [OIDC n] フィールドに、マッピングする IdP 固有のフィールドの名前を CEL 形式で入力します。
        3. 属性条件を作成するには、次の操作を行います。

          1. [条件を追加] をクリックします。
          2. [属性条件] に、CEL 形式で条件を入力します。たとえば、前にマッピングされた subject の値に末尾が @example.com のメールアドレスが含まれる場合は assertion.subject.endsWith('@example.com') です。
      8. プロバイダを作成するには、[送信] をクリックします。

    暗黙的フロー

    1. Google Cloud コンソールで次の手順を行います。

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

        [Workforce Identity プール] に移動

      2. [Workforce Identity プール] テーブルで、プロバイダを作成するプールを選択します。

      3. [プロバイダ] テーブルで [プロバイダを追加] をクリックします。

      4. [プロトコルを選択] で、[Open ID Connect(OIDC)] を選択します。

      5. [プール プロバイダの作成] で、次の操作を行います。

        1. [名前] にプロバイダの名前を入力します。
        2. [発行元(URL)] に発行元 URI を入力します。OIDC 発行元 URI は有効な URI 形式で、https で始まる必要があります。(例: https://example.com/oidc)。
        3. クライアント ID(OIDC IdP に登録されている OIDC クライアント ID)を入力します。ID は、IdP によって発行された JWT の aud クレームと一致する必要があります。
        4. 有効なプロバイダを作成するには、[有効なプロバイダ] がオンになっていることを確認します。
        5. [続行] をクリックします。
      6. [レスポンス タイプ] で、次の操作を行います。レスポンス タイプは、ウェブベースのシングル サインオン フローでのみ使用されます。

        1. [レスポンス タイプ] で [ID トークン] を選択します。
        2. [続行] をクリックします。
      7. [プロバイダの構成] で、属性のマッピングと属性条件を構成できます。属性のマッピングを作成する手順は次のとおりです。IdP フィールド名、または文字列を返す CEL 形式の式を指定できます。

        1. 必須: [OIDC 1] に、IdP からの件名を入力します(例: assertion.sub)。

        2. 省略可: 属性のマッピングを追加する手順は次のとおりです。

          1. [マッピングを追加] をクリックします。
          2. [Google n](n は数値)で、Google Cloud でサポートされている鍵のいずれかを入力します。
          3. 対応する [OIDC n] フィールドに、マッピングする IdP 固有のフィールドの名前を CEL 形式で入力します。
        3. 属性条件を作成するには、次の操作を行います。

          1. [条件を追加] をクリックします。
          2. [属性条件] に、CEL 形式で条件を入力します。たとえば、前にマッピングされた subject の値に末尾が @example.com のメールアドレスが含まれる場合は assertion.subject.endsWith('@example.com') です。
      8. プロバイダを作成するには、[送信] をクリックします。

    gcloud

    コードフロー

    Okta で、次の手順を行います。

    1. [Client authentication] で、[Client secret] を選択します。

    2. [Client Secrets] テーブルで、シークレットを見つけて、 [Copy] をクリックします。

    Google Cloud で、ウェブログインに認証コードフローを使用する OIDC プロバイダを作成するには、次のコマンドを実行します。

    gcloud iam workforce-pools providers create-oidc PROVIDER_ID \
        --workforce-pool=WORKFORCE_POOL_ID \
        --display-name="DISPLAY_NAME" \
        --description="DESCRIPTION" \
        --issuer-uri="ISSUER_URI" \
        --client-id="OIDC_CLIENT_ID" \
    --client-secret-value="OIDC_CLIENT_SECRET" \ --web-sso-response-type="code" \ --web-sso-assertion-claims-behavior="merge-user-info-over-id-token-claims" \ --web-sso-additional-scopes="WEB_SSO_ADDITIONAL_SCOPES" \ --attribute-mapping="ATTRIBUTE_MAPPING" \ --attribute-condition="ATTRIBUTE_CONDITION" \ --jwk-json-path="JWK_JSON_PATH" \ --location=global

    次のように置き換えます。

    • PROVIDER_ID: 一意のプロバイダ ID。接頭辞 gcp- は予約されているため、プールやプロバイダ ID では使用できません。
    • WORKFORCE_POOL_ID: IdP を接続する Workforce Identity プール ID。
    • DISPLAY_NAME: プロバイダのわかりやすい表示名。省略可能です。例: idp-eu-employees
    • DESCRIPTION: Workforce プロバイダの説明。省略可能です。例: IdP for Partner Example Organization employees
    • ISSUER_URI: https で始まる有効な URI 形式の OIDC 発行者 URI。例: https://example.com/oidc注: セキュリティ上の理由により、ISSUER_URI では HTTPS スキームを使用する必要があります。
    • OIDC_CLIENT_ID: OIDC IdP に登録されている OIDC クライアント ID。ID は、IdP によって発行された JWT の aud クレームと一致する必要があります。
    • OIDC_CLIENT_SECRET: OIDC クライアント シークレット。
    • WEB_SSO_ADDITIONAL_SCOPES: コンソール(連携)または gcloud CLI ブラウザベースのログイン用に OIDC IdP に送信する任意の追加スコープ。例: Okta の組織認可サーバーを使用している場合に、Okta からグループ クレームをリクエストする groups
    • ATTRIBUTE_MAPPING: 属性マッピング。例:
      google.subject=assertion.sub,
      google.groups=assertion.group1,
      attribute.costcenter=assertion.costcenter
      この例では、OIDC アサーションの IdP 属性 subjectassertion.group1costcenter をそれぞれ google.subjectgoogle.groupsattribute.costcenter の各属性にマッピングしています。
    • ATTRIBUTE_CONDITION: 属性条件。たとえば、前にマッピングされた subject の値に末尾が @example.com のメールアドレスが含まれている場合は assertion.subject.endsWith('@example.com') です。
    • JWK_JSON_PATH: ローカルにアップロードされた OIDC JWK へのパス(省略可)。このパラメータを指定しない場合、代わりに Google Cloud が IdP の /.well-known/openid-configuration パスを使用して、公開鍵を含む JWK を取得します。ローカルにアップロードされた OIDC JWK の詳細については、OIDC JWK を管理するをご覧ください。
    コマンド レスポンスで、POOL_RESOURCE_NAME はプールの名前です。例: locations/global/workforcePools/enterprise-example-organization-employees

    暗黙的フロー

    ウェブログインに暗黙的フローを使用する OIDC プロバイダを作成するには、次のコマンドを実行します。

    gcloud iam workforce-pools providers create-oidc PROVIDER_ID \
        --workforce-pool=WORKFORCE_POOL_ID \
        --display-name="DISPLAY_NAME" \
        --description="DESCRIPTION" \
        --issuer-uri="ISSUER_URI" \
        --client-id="OIDC_CLIENT_ID" \
        --web-sso-response-type="id-token" \
        --web-sso-assertion-claims-behavior="only-id-token-claims" \
        --web-sso-additional-scopes="WEB_SSO_ADDITIONAL_SCOPES" \
        --attribute-mapping="ATTRIBUTE_MAPPING" \
        --attribute-condition="ATTRIBUTE_CONDITION" \
        --jwk-json-path="JWK_JSON_PATH" \
        --location=global
    

    次のように置き換えます。

    • PROVIDER_ID: 一意のプロバイダ ID。接頭辞 gcp- は予約されているため、プールやプロバイダ ID では使用できません。
    • WORKFORCE_POOL_ID: IdP を接続する Workforce Identity プール ID。
    • DISPLAY_NAME: プロバイダのわかりやすい表示名。省略可能です。例: idp-eu-employees
    • DESCRIPTION: Workforce プロバイダの説明。省略可能です。例: IdP for Partner Example Organization employees
    • ISSUER_URI: https で始まる有効な URI 形式の OIDC 発行者 URI。例: https://example.com/oidc注: セキュリティ上の理由により、ISSUER_URI では HTTPS スキームを使用する必要があります。
    • OIDC_CLIENT_ID: OIDC IdP に登録されている OIDC クライアント ID。ID は、IdP によって発行された JWT の aud クレームと一致する必要があります。
    • WEB_SSO_ADDITIONAL_SCOPES: コンソール(連携)または gcloud CLI ブラウザベースのログイン用に OIDC IdP に送信する任意の追加スコープ。例: Okta の組織認可サーバーを使用している場合に、Okta からグループ クレームをリクエストする groups
    • ATTRIBUTE_MAPPING: 属性マッピング。例:
      google.subject=assertion.sub,
      google.groups=assertion.group1,
      attribute.costcenter=assertion.costcenter
      この例では、OIDC アサーションの IdP 属性 subjectassertion.group1costcenter をそれぞれ google.subjectgoogle.groupsattribute.costcenter の各属性にマッピングしています。
    • ATTRIBUTE_CONDITION: 属性条件。たとえば、前にマッピングされた subject の値に末尾が @example.com のメールアドレスが含まれている場合は assertion.subject.endsWith('@example.com') です。
    • JWK_JSON_PATH: ローカルにアップロードされた OIDC JWK へのパス(省略可)。このパラメータを指定しない場合、代わりに Google Cloud が IdP の /.well-known/openid-configuration パスを使用して、公開鍵を含む JWK を取得します。ローカルにアップロードされた OIDC JWK の詳細については、OIDC JWK を管理するをご覧ください。
    コマンド レスポンスで、POOL_RESOURCE_NAME はプールの名前です。例: locations/global/workforcePools/enterprise-example-organization-employees

SAML Workforce プール プロバイダを作成する

  1. SAML IdP で、Google Cloud Workforce Identity 連携用の新しいアプリケーションを登録します。

  2. SAML アサーションのオーディエンスを設定します。通常、これは IdP 構成の SP Entity ID フィールドです。次の URL に設定する必要があります。

    https://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/PROVIDER_ID
    
  3. コンソールへのユーザー アクセスを設定する場合は、SAML IdP で、リダイレクト URL または Assertion Consumer Service(ACS)の URL フィールドを次の URL に設定します。

    https://auth.cloud.google/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
    

    コンソール ログインの構成の詳細については、コンソールへのユーザー アクセスを設定するをご覧ください。

  4. Google Cloud で、IdP の SAML メタデータ ドキュメントを使用して SAML Workforce Identity プール プロバイダを作成します。IdP から SAML メタデータ XML ドキュメントをダウンロードできます。ドキュメントには少なくとも次のものが含まれている必要があります。

    • IdP の SAML エンティティ ID。
    • IdP のシングル サインオン URL。
    • 少なくとも 1 つの署名公開鍵。署名鍵の詳細については、このガイドの後述の鍵の要件をご覧ください。

コンソール

Google Cloud コンソールを使用して SAML プロバイダを構成する手順は次のとおりです。

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

    [Workforce Identity プール] に移動

  2. [Workforce Identity プール] テーブルで、プロバイダを作成するプールを選択します。

  3. [プロバイダ] テーブルで [プロバイダを追加] をクリックします。

  4. [プロトコルを選択] で、[SAML] を選択します。

  5. [プール プロバイダの作成] で、次の操作を行います。

    1. [名前] にプロバイダの名前を入力します。

    2. 省略可: [説明] にプロバイダの説明を入力します。

    3. [IdP メタデータ ファイル(XML)] で、このガイドの前半で生成したメタデータ XML ファイルを選択します。

    4. [有効なプロバイダ] が有効になっていることを確認します。

    5. [続行] をクリックします。

  6. [プロバイダの構成] で、次の操作を行います。

    1. [属性のマッピング] で、google.subject の CEL 式を入力します。

    2. 省略可: 他のマッピングを入力するには、[マッピングを追加] をクリックして他のマッピングを入力します。次に例を示します。

      google.subject=assertion.subject,
      google.groups=assertion.attributes['https://example.com/aliases'],
      attribute.costcenter=assertion.attributes.costcenter[0]
      この例では、IdP 属性 assertion.subjectassertion.attributes['https://example.com/aliases']assertion.attributes.costcenter[0] を Google Cloud 属性 google.subjectgoogle.groupsgoogle.costcenter にそれぞれマッピングしています。

    3. 省略可: 属性条件を追加するには、[条件を追加] をクリックし、属性条件を表す CEL 式を入力します。たとえば、ipaddr 属性を特定の IP 範囲に制限するには、条件 assertion.attributes.ipaddr.startsWith('98.11.12.') を設定します。この例の条件により、98.11.12. で始まる IP アドレスを持つユーザーだけが、この Workforce プロバイダを使用してログインできます。

    4. [続行] をクリックします。

  7. プロバイダを作成するには、[送信] をクリックします。

gcloud

SAML プロトコルを使用して、Okta アプリ統合用の Workforce Identity プール プロバイダを作成するには、次の操作を行います。

  1. Okta アプリに SAML メタデータを保存するには、次の操作を行います。

    1. Okta アプリに移動します。
    2. [Sign On] タブをクリックします。
    3. [SAML Signing Certificates] セクションで、有効な証明書の [Actions] > [View IdP metadata] をクリックします。
    4. 新しいページが開いたら、その中の XML メタデータをコピーします。
    5. メタデータをローカル XML ファイルとして保存します。
  2. Okta アプリ用の Workforce プロバイダを作成するには、次のコマンドを実行します。

    gcloud iam workforce-pools providers create-saml WORKFORCE_PROVIDER_ID \
        --workforce-pool="WORKFORCE_POOL_ID" \
        --attribute-mapping="ATTRIBUTE_MAPPING" \
        --attribute-condition="ATTRIBUTE_CONDITION" \
        --idp-metadata-path="XML_METADATA_PATH" \
        --location="global"
    

    次のように置き換えます。

    • WORKFORCE_PROVIDER_ID: このガイドの前半で作成した Workforce プロバイダ ID。
    • WORKFORCE_POOL_ID: このガイドの前半で作成した Workforce プール ID。
    • ATTRIBUTE_MAPPING: 属性マッピング。次に例を示します。

      google.subject=assertion.subject,
      google.groups=assertion.attributes['https://example.com/aliases'],
      attribute.costcenter=assertion.attributes.costcenter[0]
      この例では、IdP 属性 assertion.subjectassertion.attributes['https://example.com/aliases']assertion.attributes.costcenter[0] を Google Cloud 属性 google.subjectgoogle.groupsgoogle.costcenter にそれぞれマッピングしています。

    • ATTRIBUTE_CONDITION: オプションの属性条件。たとえば、ipaddr 属性を特定の IP 範囲に制限するには、条件 assertion.attributes.ipaddr.startsWith('98.11.12.') を設定します。この例の条件により、98.11.12. で始まる IP アドレスを持つユーザーだけが、この Workforce プロバイダを使用してログインできます。

    • XML_METADATA_PATH: このガイドの前半で作成した Okta アプリの XML 形式のメタデータ ファイルへのパス。

    接頭辞 gcp- は予約されているため、プールやプロバイダ ID では使用できません。

    省略可: IdP から暗号化された SAML アサーションを受け入れる

    SAML 2.0 IdP が Workforce Identity 連携で受け入れられる暗号化された SAML アサーションを生成できるようにするには、次のようにします。

    • Workforce Identity 連携で、次の操作を行います。
      • Workforce Identity プールのプロバイダ用に非対称鍵ペアを作成します。
      • 公開鍵を含む証明書ファイルをダウンロードします。
      • 公開鍵を使用して、発行する SAML アサーションが暗号化されるように SAML IdP を構成します。
    • IdP で次の操作を行います。
      • アサーション暗号化(トークン暗号化)を有効にします。
      • Workforce Identity 連携で作成した公開鍵をアップロードします。
      • IdP が暗号化された SAML アサーションを生成することを確認します。
    SAML 暗号化プロバイダの鍵が構成されている場合でも、Workforce Identity 連携は平文のアサーションを処理できます。

    Workforce Identity 連携の SAML アサーション暗号鍵を作成する

    このセクションでは、Workforce Identity 連携で暗号化された SAML アサーションを受け入れる非対称鍵ペアの作成について説明します。

    Google Cloud は秘密鍵を使用して、IdP が発行する SAML アサーションを復号します。SAML 暗号化で使用する非対称鍵ペアを作成するには、次のコマンドを実行します。詳細については、サポートされている SAML 暗号化アルゴリズムをご覧ください。

    gcloud iam workforce-pools providers keys create KEY_ID \
        --workforce-pool WORKFORCE_POOL_ID \
        --provider PROVIDER_ID \
        --location global \
        --use encryption \
        --spec KEY_SPECIFICATION
    

    次のように置き換えます。

    • KEY_ID: 任意の鍵名
    • WORKFORCE_POOL_ID: プール ID
    • PROVIDER_ID: プロバイダ ID
    • KEY_SPECIFICATION: 鍵仕様(rsa-2048rsa-3072rsa-4096 のいずれか)。

    鍵ペアを作成したら、次のコマンドを実行して、公開鍵を証明書ファイルにダウンロードします。秘密鍵にアクセスできるのは Workforce Identity 連携だけです。

    gcloud iam workforce-pools providers keys describe KEY_ID \
        --workforce-pool WORKFORCE_POOL_ID \
        --provider PROVIDER_ID \
        --location global \
        --format "value(keyData.key)" \
        > CERTIFICATE_PATH
    

    次のように置き換えます。

    • KEY_ID: 鍵名
    • WORKFORCE_POOL_ID: プール ID
    • PROVIDER_ID: プロバイダ ID
    • CERTIFICATE_PATH: 証明書を書き込むパス(例: saml-certificate.cersaml-certificate.pem

    暗号化された SAML アサーションを発行するように SAML 2.0 準拠の IdP を構成する

    SAML アサーションを暗号化するように Okta を構成する手順は次のとおりです。

    • Okta ダッシュボードに移動してログインします。
    • [Applications] > [Applications] に移動します。
    • アプリをクリックします。
    • [General] タブの [SAML Settings] セクションで、[Edit] をクリックします。
    • [Next] をクリックして [SAML Settings] を表示します。
    • [Show advanced settings] をクリックします。
    • [SAML Settings] で、次の操作を行います。
      • [Response](推奨)または [Assertion Signature] で、[Signed] を選択します。
      • [Signature Algorithm] と [Digest Algorithm] で任意のオプションを選択します。
      • 次の値を設定します。
        • Assertion Encryption: 暗号化されます。
        • Encryption Algorithm: 選択したアルゴリズム。
        • Encryption Certificate: このガイドの前半で生成した証明書ファイルをアップロードします。
    • 構成を保存するには、[Next]、[Finish] の順にクリックします。

    SAML アサーションを暗号化するように IdP を構成したら、IdP によって生成されるアサーションが実際に暗号化されていることを確認することをおすすめします。SAML アサーションの暗号化が構成されている場合でも、Workforce Identity 連携は平文のアサーションを処理できます。

    Workforce Identity 連携の暗号鍵を削除する

    SAML 暗号鍵を削除するには、次のコマンドを実行します。
      gcloud iam workforce-pools providers keys delete KEY_ID \
          --workforce-pool WORKFORCE_POOL_ID \
          --provider PROVIDER_ID \
          --location global
    

    次のように置き換えます。

    • KEY_ID: 鍵名
    • WORKFORCE_POOL_ID: プール ID
    • PROVIDER_ID: プロバイダ ID

    サポートされている SAML 暗号化アルゴリズム

    Workforce Identity 連携は、次の主要なトランスポート アルゴリズムをサポートしています。

    Workforce Identity 連携は、次のブロック暗号化アルゴリズムをサポートしています。

Google Cloud リソースへのアクセスを管理する

このセクションでは、例として、Workforce Identity 連携ユーザーによる Google Cloud リソースへのアクセスを管理する方法を説明します。

この例では、サンプル プロジェクトに対して Identity and Access Management(IAM)のロールを付与します。これにより、ユーザーはログインしてこのプロジェクトを使用し、Google Cloud プロダクトにアクセスできます。

単一の ID、ID のグループ、プール全体で IAM ロールを管理できます。詳細については、IAM ポリシーで Workforce Identity プールユーザーを表すをご覧ください。

単一の ID の場合

プロジェクト TEST_PROJECT_ID の単一の ID にストレージ管理者(roles/storage.admin)ロールを付与するには、次のコマンドを実行します。

gcloud projects add-iam-policy-binding TEST_PROJECT_ID \
    --role="roles/storage.admin" \
    --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"

次のように置き換えます。

  • TEST_PROJECT_ID: プロジェクトの ID
  • WORKFORCE_POOL_ID: Workforce Identity プールの ID
  • SUBJECT_VALUE: ユーザー ID

マッピングされた部門属性の使用

プロジェクト TEST_PROJECT_ID の特定の部門内のすべての ID にストレージ管理者(roles/storage.admin)のロールを付与するには、次のコマンドを実行します。

gcloud projects add-iam-policy-binding TEST_PROJECT_ID \
    --role="roles/storage.admin" \
    --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/attribute.department/DEPARTMENT_VALUE"

次のように置き換えます。

  • TEST_PROJECT_ID: プロジェクトの ID
  • WORKFORCE_POOL_ID: Workforce プール ID
  • DEPARTMENT_VALUE: マッピングされた attribute.department

マッピングされたグループの使用

プロジェクト TEST_PROJECT_ID の特定のグループ内のすべての ID にストレージ管理者(roles/storage.admin)ロールを付与するには、次のコマンドを実行します。

gcloud projects add-iam-policy-binding TEST_PROJECT_ID \
    --role="roles/storage.admin" \
    --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"

次のように置き換えます。

  • TEST_PROJECT_ID: プロジェクトの ID
  • WORKFORCE_POOL_ID: Workforce プール ID
  • GROUP_ID: マッピングされた google.groups クレーム内のグループ。

ログインしてアクセスをテストする

このセクションでは、Workforce Identity プールユーザーとしてログインし、Google Cloud プロダクトにアクセスできることを確認します。

ログイン

このセクションでは、連携ユーザーとしてログインし、Google Cloud リソースにアクセスする方法について説明します。

コンソール(連携)ログイン

Google Cloud Workforce Identity 連携コンソール(連携)にログインするには、次の操作を行います。

  1. コンソール(連携)のログインページに移動します。

    コンソール(連携)に移動

  2. プロバイダ名を入力します。形式は次のとおりです。
    locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
    1. 入力を求められたら、Okta アプリ統合にユーザー認証情報を入力します。

    IdP を起点とするログインを開始する場合は、ネストされた Default RelayState パラメータの SAML 設定で URL https://console.cloud.google/ を使用します。

gcloud CLI ブラウザベースのログイン

ブラウザベースのログインフローを使用して gcloud CLI にログインする方法は次のとおりです。

構成ファイルを作成する

ログイン構成ファイルを作成するには、次のコマンドを実行します。必要に応じて、--activate フラグを使用することで、このファイルを gcloud CLI のデフォルトとして有効にできます。

gcloud iam workforce-pools create-login-config \
    locations/global/workforcePools/WORKFORCE_POOL_ID/providers/PROVIDER_ID \
    --output-file=LOGIN_CONFIG_FILE

次のように置き換えます。

  • WORKFORCE_POOL_ID: Workforce プール ID
  • PROVIDER_ID: プロバイダ ID
  • LOGIN_CONFIG_FILE: 指定した構成ファイルのパス(例: login.json

このファイルには、gcloud CLI でブラウザベースの認証フローを有効にし、このガイドの前半で作成したプロバイダにオーディエンスを設定するために使用するエンドポイントが含まれています。ファイルに機密情報は含まれていません。

出力は次のようになります。

{
  "type": "external_account_authorized_user_login_config",
  "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/PROVIDER_ID",
  "auth_url": "https://auth.cloud.google/authorize",
  "token_url": "https://sts.googleapis.com/v1/oauthtoken",
  "token_info_url": "https://sts.googleapis.com/v1/introspect",
}

ブラウザベースの認証を使用してログインする

ブラウザベースのログイン認証を使用して認証するには、次のいずれかの方法を使用します。

  • 構成ファイルの作成時に --activate フラグを使用した場合、または gcloud config set auth/LOGIN_CONFIG_FILE で構成ファイルを有効にした場合、gcloud CLI は構成ファイルを自動的に使用します。

    gcloud auth login
    
  • 構成ファイルの場所を指定してログインするには、次のコマンドを実行します。

    gcloud auth login --login-config=LOGIN_CONFIG_FILE
    
  • 環境変数を使用して構成ファイルの場所を指定するには、CLOUDSDK_AUTH_LOGIN_CONFIG_FILE を構成パスに設定します。

ブラウザベースのログインを無効にする

ログイン構成ファイルの使用を停止するには、次の手順を行います。

  • 構成ファイルの作成時に --activate フラグを使用した場合、または gcloud config set auth/LOGIN_CONFIG_FILE で構成ファイルを有効にした場合は、次のコマンドを実行して設定を解除する必要があります。

    gcloud config unset auth/login_config_file
    
  • CLOUDSDK_AUTH_LOGIN_CONFIG_FILE 環境変数が設定されている場合は、クリアします。

gcloud CLI ヘッドレス ログイン

ヘッドレス フローを使用して gcloud CLI にログインする方法は次のとおりです。

OIDC

  1. Okta アプリにユーザーをログインさせ、Okta から OIDC トークンを取得します。

  2. Okta から返された OIDC トークンをローカルマシンの安全な場所に保存します。

  3. 次のように構成ファイルを生成します。次のコマンドを実行します。

    gcloud iam workforce-pools create-cred-config \
        locations/global/workforcePools/WORKFORCE_POOL_ID/providers/PROVIDER_ID \
        --subject-token-type="urn:ietf:params:oauth:token-type:id_token" \
        --credential-source-file="PATH_TO_OIDC_ID_TOKEN" \
        --workforce-pool-user-project="WORKFORCE_POOL_USER_PROJECT" \
        --output-file="config.json"
    

次のように置き換えます。

  • WORKFORCE_POOL_ID: Workforce プール ID
  • PROVIDER_ID: プロバイダ ID
  • PATH_TO_OIDC_TOKEN: OIDC IdP 認証情報ファイルのパス
  • WORKFORCE_POOL_USER_PROJECT: Workforce プール ユーザー プロジェクトに関連付けられたプロジェクト番号。

プリンシパルには、このプロジェクトに対する serviceusage.services.use 権限が必要です。

このコマンドを実行すると、次のような形式の OIDC IdP 構成ファイルが生成されます。

{
  "type": "external_account",
  "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/PROVIDER_ID",
  "subject_token_type": "urn:ietf:params:oauth:token-type:id_token",
  "token_url": "https://sts.googleapis.com/v1/token",
  "workforce_pool_user_project": "WORKFORCE_POOL_USER_PROJECT",
  "credential_source": {
    "file": "PATH_TO_OIDC_CREDENTIALS_FILE"
  }
}

SAML

  1. Okta アプリにユーザーをログインさせ、Okta から SAML レスポンスを取得します。

  2. Okta から返された SAML レスポンスをローカルマシンの安全な場所に保存し、次のようにパスを保存します。

    SAML_ASSERTION_PATH=SAML_ASSERTION_PATH
    
  3. 次のコマンドを実行して、構成ファイルを生成します。

    gcloud iam workforce-pools create-cred-config \
        locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
        --subject-token-type="urn:ietf:params:oauth:token-type:saml2" \
        --credential-source-file="SAML_ASSERTION_PATH"  \
        --workforce-pool-user-project="PROJECT_ID"  \
        --output-file="config.json"
    

    次のように置き換えます。

    • WORKFORCE_PROVIDER_ID: このガイドの前半で作成した Workforce プロバイダ ID。
    • WORKFORCE_POOL_ID: このガイドの前半で作成した Workforce プール ID。
    • SAML_ASSERTION_PATH: SAML アサーション ファイルのパス。
    • PROJECT_ID: プロジェクト ID

    生成された構成ファイルは次のようになります。

    {
      "type": "external_account",
      "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
      "subject_token_type": "urn:ietf:params:oauth:token-type:saml2",
      "token_url": "https://sts.googleapis.com/v1/token",
      "credential_source": {
        "file": "SAML_ASSERTION_PATH"
      },
      "workforce_pool_user_project": "PROJECT_ID"
    }
    

トークン交換を使用して gcloud にログインするには、次のコマンドを実行します。

gcloud auth login --cred-file="config.json"

次に、gcloud は、Okta の認証情報を一時的な Google Cloud アクセス トークンと透過的に交換して、Google Cloud に対する他の gcloud 呼び出しを許可します。

次のような出力が表示されます。

Authenticated with external account user credentials for:
[principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/USER_ID].

認証されたアカウントと現在アクティブなアカウントを一覧表示するには、次のコマンドを実行します。

gcloud auth list

テストアクセス

Workforce Identity 連携をサポートする Google Cloud サービスと、アクセス権を持つ対象にアクセスできるようになりました。このガイドでは、プロジェクト TEST_PROJECT_ID の特定の部門内のすべての ID にストレージ管理者(roles/storage.admin)ロールを付与しました。ここでは、Cloud Storage バケットを一覧表示して、そこへアクセスできるかどうかをテストします。

コンソール(連携)

コンソール(連携)を使用して Cloud Storage バケットを一覧表示するには、次のようにします。

  • Cloud Storage ページに移動します。
  • TEST_PROJECT_ID の既存バケットの一覧が表示できることを確認します。

gcloud CLI

アクセス権を持っているプロジェクトの Cloud Storage バケットとオブジェクトを一覧表示するには、次のコマンドを実行します。

gcloud alpha storage ls --project="TEST_PROJECT_ID"

プリンシパルには、指定したプロジェクトに対する serviceusage.services.use 権限が必要です。

ユーザーを削除する

Workforce Identity 連携は、連携ユーザー ID のユーザー メタデータとリソースを作成します。たとえば、IdP でユーザーを削除する場合は、Google Cloud でこれらのリソースも明示的に削除する必要があります。詳しくは、Workforce Identity 連携ユーザーとそのデータを削除するをご覧ください。

削除されたユーザーにリソースが引き続き関連付けられていることがあります。これは、ユーザーのメタデータとリソースの削除には長時間実行オペレーションが必要になるためです。ユーザー ID の削除を開始した後、削除前にユーザーが開始したプロセスは、プロセスが完了するかキャンセルされるまで引き続き実行されます。

次のステップ