Keycloak のシングル サインオン

Last reviewed 2024-04-29 UTC

このガイドでは、SAML フェデレーションを使用して、Cloud Identity または Google Workspace アカウントと Keycloak との間にシングル サインオン(SSO)を設定する方法について説明します。このドキュメントは、Keycloak をインストールして使用していることを前提としています。

目標

  • Cloud Identity または Google Workspace で ID プロバイダ(IdP)として使用されるように Keycloak サーバーを構成する。
  • SSO に Keycloak を使用するように Cloud Identity または Google Workspace アカウントを構成する。

始める前に

  1. Cloud Identity アカウントをお持ちでない場合は、アカウントを登録します。
  2. Cloud Identity アカウントに特権管理者権限があることを確認します。
  3. Keycloak サーバーで複数のレルムを管理している場合は、フェデレーションに使用するレルムを決めます。
  4. 選択したレルムに対する管理者権限があることを確認します。

SAML プロファイルを作成する

Keycloak でシングル サインオンを構成するには、まず Cloud Identity または Google Workspace アカウントに SAML プロファイルを作成します。SAML プロファイルには、Keycloak サーバーに関連する設定(URL や署名証明書など)が含まれています。

SAML プロファイルは、後で特定のグループまたは組織部門に割り当てます。

Cloud Identity や Google Workspace アカウントに新しい SAML プロファイルを作成するには、次の操作を行います。

  1. 管理コンソールで、[セキュリティ] > [認証] > [サードパーティの IdP による SSO] に移動します。

    [サードパーティの IdP による SSO] に移動

  2. [サードパーティの SSO プロファイル] > [SAML プロファイルを追加] をクリックします。

  3. [SAML SSO プロファイル] ページで、次の設定を行います。

    • 名前: Keycloak
    • IDP エンティティ ID:

      Keycloak 17 以降

      https://KEYCLOAK/realms/REALM
      

      Keycloak 16 以前

      https://KEYCLOAK/auth/realms/REALM
      
    • ログインページの URL:

      Keycloak 17 以降

      https://KEYCLOAK/realms/REALM/protocol/saml
      

      Keycloak 16 以前

      https://KEYCLOAK/auth/realms/REALM/protocol/saml
      
    • ログアウト ページの URL:

      Keycloak 17 以降

      https://KEYCLOAK/realms/REALM/protocol/openid-connect/logout
      

      Keycloak 16 以前

      https://KEYCLOAK/auth/realms/REALM/protocol/openid-connect/logout?redirect_uri=https://KEYCLOAK/auth/realms/REALM/account/
      
    • パスワード変更用 URL:

      Keycloak 17 以降

      https://KEYCLOAK/realms/REALM/account
      

      Keycloak 16 以前

      https://KEYCLOAK/auth/realms/REALM/account
      

    すべての URL で次のように置き換えます。

    • KEYCLOAK: Keycloak サーバーの完全修飾ドメイン名
    • REALM: 選択したレルムの名前

    確認証明書はまだアップロードしないでください。

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

    表示される [SAML SSO プロファイル] ページには、次の 2 つの URL が含まれています。

    • エンティティ ID
    • ACS の URL

    これらの URL は、次のセクションで Keycloak を構成するときに必要になります。

Keycloak を構成する

Keycloak サーバーは、クライアントを作成することで構成します。

クライアントの作成

Keycloak に新しい SAML クライアントを作成します。

  1. Keycloak にログインして管理コンソールを開きます。
  2. フェデレーションに使用するレルムを選択します。
  3. メニューで [Clients] を選択します。
  4. [Create client] をクリックします。
  5. クライアントで次の設定を構成します。

    Keycloak 19 以降

    • クライアントの種類: SAML
    • クライアント ID: SSO プロファイルのエンティティ URL
    • 名前: Google Cloud

    Keycloak 18 以前

    • クライアント ID: SSO プロファイルのエンティティ URL
    • Client Protocol: saml
    • Client SAML Endpoint: 空欄
  6. [保存] をクリックします。

  7. 次の設定を構成することで、クライアントの詳細を指定します。

    Keycloak 19 以降

    [Settings] タブで次の操作を行います。

    • 有効なリダイレクト URI: SSO プロファイルの ACS URL
    • Name ID Format: メール
    • Force Name ID Format: オン
    • Sign documents: オフ
    • Sign Assertions: オン

    [Keys] タブで次の操作を行います。

    • Client Signature Required: オフ

    Keycloak 18 以前

    • Name: Google Cloud などの名前
    • Sign Assertions: オン
    • Client Signature Required: オフ
    • Force Name ID Format: オン
    • Name ID Format: メール
    • 有効なリダイレクト URI: SSO プロファイルの ACS URL

    その他の設定はデフォルトのままにします。

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

署名証明書をエクスポートする

ユーザーの認証後、Keycloak は SAML アサーションを Cloud Identity または Google Workspace に渡します。Cloud Identity と Google Workspace がそのアサーションの整合性と信頼性を検証できるように、Keycloak は特別なトークン署名鍵を使用してアサーションに署名し、証明書を提供します。Cloud Identity または Google Workspace は、この証明書を使用して署名の検証を行います。

ここで、Keycloak から署名証明書をエクスポートします。

  1. メニューで [Realm settings] を選択します。
  2. [キー] タブを選択します。
  3. [アルゴリズム: RS256] の行を見つけます。複数の行がある場合は、Use: SIG の行を使用します。[証明書] を選択します。

    base64 でエンコードされた証明書がダイアログに表示されます。

  4. base64 でエンコードされた証明書の値をクリップボードにコピーします。

署名証明書を使用する前に、ヘッダーとフッターを追加して、署名証明書を PEM 形式に変換する必要があります。

  1. メモ帳や vim などのテキスト エディタを開きます。
  2. 次のヘッダーを貼り付けてから改行します。

    -----BEGIN CERTIFICATE-----
    
  3. base64 でエンコードされた証明書をクリップボードから貼り付けます。

  4. 改行を追加し、次のフッターを貼り付けます。

    -----END CERTIFICATE-----
    

    変更後のファイルは次のようになります。

    -----BEGIN CERTIFICATE-----
    MIICmzCCAYMCBgF7v8/V1TANBgkq...
    -----END CERTIFICATE-----
    
  5. ファイルをパソコンの一時的な場所に保存します。

SAML プロファイルを入力する

署名証明書を使用して、SAML プロファイルの構成を完了します。

  1. 管理コンソールに戻り、[セキュリティ] > [認証] > [サードパーティの IdP による SSO] に移動します。

    [サードパーティの IdP による SSO] に移動

  2. 先ほど作成した Keycloak SAML プロファイルを開きます。

  3. [IDP の詳細] セクションをクリックして設定を編集します。

  4. [証明書をアップロード] をクリックして、前にダウンロードしたトークン署名証明書を選択します。

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

SAML プロファイルは完成しましたが、まだそれを割り当てる必要があります。

SAML プロファイルを割り当てる

新しい SAML プロファイルを適用するユーザーを選択します。

  1. 管理コンソールの [サードパーティの IdP による SSO] ページで、[SSO プロファイルの割り当ての管理] > [管理] をクリックします。

    [SSO プロファイルの割り当ての管理] に移動

  2. 左側のペインで、SSO プロファイルを適用するグループまたは組織部門を選択します。すべてのユーザーにプロファイルを適用するには、ルート組織部門を選択します。

  3. 右側のペインで、[別の SSO プロファイル] を選択します。

  4. メニューで、先ほど作成した Keycloak - SAML SSO プロファイルを選択します。

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

手順を繰り返して、別のグループまたは組織部門に SAML プロファイルを割り当てます。

シングル サインオンをテストする

シングル サインオンの構成が完了しました。では、SSO が意図したとおりに機能するか確認してみましょう。

  1. 次の条件を満たす Keycloak ユーザーを選択します。

    • ユーザーにメールアドレスがある。
    • メールアドレスが、Cloud Identity の既存のユーザーまたは Google Workspace アカウントのメインのメールアドレスに対応している。
    • Cloud Identity ユーザーに特権管理者の権限がない。

      特権管理者権限が割り当てられているユーザー アカウントは Google 認証情報を使用してログインする必要があるため、シングル サインオンのテストには適していません。

  2. 新しいブラウザ ウィンドウを開き、Google Cloud コンソールに移動します。

  3. Google ログインページで、ユーザー アカウントのメールアドレスを入力し、[次へ] をクリックします。

    Google ログインページ。

    Keycloak にリダイレクトされます。

  4. Keycloak の認証情報を入力して [Sign in] をクリックします。

    認証に成功すると、Keycloak から Google Cloud コンソールにリダイレクトされます。このユーザーがログインするのは今回が初めてのため、Google 利用規約とプライバシー ポリシーへの同意が求められます。

  5. 利用規約に同意する場合は、[同意する] をクリックします。

  6. Google Cloud コンソールにリダイレクトされ、設定を確認して Google Cloud の利用規約に同意するよう求められます。利用規約に同意する場合は、[はい] をクリックしてから [同意して続行] をクリックします。

  7. アバターのアイコンをクリックして、[ログアウト] をクリックします。

    Keycloak にリダイレクトされます。

ログインできない場合、特権管理者の権限を持つユーザー アカウントは SSO を回避できることに注意してください。引き続き管理コンソールで設定の検証または変更を行うことができます。

省略可: ドメイン固有サービスの URL のリダイレクトを構成する

内部ポータルまたはドキュメントから Google Cloud コンソールにリンクする場合は、ドメイン固有のサービス URL を使用してユーザー エクスペリエンスを向上させることができます。

通常のサービス URL(https://console.cloud.google.com/ など)とは異なり、ドメイン固有のサービス URL にはプライマリ ドメインの名前が含まれます。認証されていないユーザーがドメイン固有のサービス URL へのリンクをクリックすると、Google ログインページが表示される前に Keycloak にリダイレクトされます。

ドメイン固有のサービス URL の例を次に示します。

Google サービス URL Logo
Google Cloud コンソール https://www.google.com/a/DOMAIN/ServiceLogin?continue=https://console.cloud.google.com Google Cloud ロゴ
Google ドキュメント https://docs.google.com/a/DOMAIN Google ドキュメントのロゴ
Google スプレッドシート https://www.google.com/a/DOMAIN/ServiceLogin?continue=https://sheets.google.com Google スプレッドシートのロゴ
Google サイト https://www.google.com/a/DOMAIN/ServiceLogin?continue=https://slides.google.com Google サイトのロゴ
Google ドライブ https://drive.google.com/a/DOMAIN Google ドライブのロゴ
Gmail https://mail.google.com/a/DOMAIN Gmail のロゴ
Google グループ https://www.google.com/a/DOMAIN/ServiceLogin?continue=https://groups.google.com Google グループのロゴ
Google Keep https://www.google.com/a/DOMAIN/ServiceLogin?continue=https://keep.google.com Google Keep のロゴ
Looker Studio https://www.google.com/a/DOMAIN/ServiceLogin?continue=https://lookerstudio.google.com Looker Studio のロゴ

ドメイン固有のサービス URL を Keycloak にリダイレクトするように構成するには、以下の操作を行います。

  1. 管理コンソールの [サードパーティの IdP による SSO] ページで、[ドメイン固有のサービスの URL] > [編集] をクリックします。

    [ドメイン固有のサービスの URL] に移動

  2. [ユーザーを以下の SSO プロファイルに含まれるサードパーティ IdP に自動的にリダイレクトする] を [有効] に設定します。

  3. [SSO プロファイル] を Keycloak に設定します。

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

省略可: ログイン時の本人確認を構成する

Google ログインでは、不明なデバイスからログインした場合や、他の理由でログインに不審な点がある場合に、追加の確認を求めることがあります。こうしたログイン時の本人確認は、セキュリティの向上に役立つため、ログイン時の本人確認を有効のままにしておくことをおすすめします。

ログイン時の本人確認が原因でログインに時間がかかる場合は、次の手順でログイン時の本人確認を無効にできます。

  1. 管理コンソールで、[セキュリティ] > [認証] > [ログイン時の本人確認] に移動します。
  2. 左側のペインで、ログイン時の本人確認を無効にする組織部門を選択します。すべてのユーザーのログイン時の本人確認を無効にするには、ルート組織部門を選択します。
  3. [他の SSO プロファイルを使用してログインするユーザーの設定] で、[Google による追加の確認をユーザーに要求しない] を選択します。
  4. [保存] をクリックします。

次のステップ