SSOの実装例

この例では、3つのエンドポイントをSUSE Managerで公開し、Keycloak 21.0.1以降をIDサービスプロバイダ(IdP)として使用することによってSSOが実装されています。

まずKeycloak IdPをインストールしてから、SUSE Managerサーバを設定します。 次に、エンドポイントをKeycloakクライアントとして追加し、ユーザを作成できます。

この例は、説明のみを目的としています。 SUSEは、サードパーティのIDサービスプロバイダを推奨またはサポートしておらず、Keycloakとは提携していません。 Keycloakのサポートについては、https://www.keycloak.org/を参照してください。

Keycloakは、マシンに直接インストールすることも、コンテナ内で実行することもできます。 この例では、PodmanコンテナでKeycloakを実行します。 Keycloakのインストールの詳細については、https://www.keycloak.org/guides#getting-startedにあるKeycloakのドキュメントを参照してください。

プロシージャ: IDサービスプロバイダの設定
  1. Keycloakのドキュメントに従って、PodmanコンテナにKeycloakをインストールします。

  2. -td引数を使用してコンテナを実行し、プロセスが実行されたままになっていることを確認します。

    podman run -td --name keycloak -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:21.0.1
  3. Keycloak Web UIにadminユーザとしてサインインし、次の詳細情報を使用して認証レルムを作成します。

    • 名前]フィールドに、レルムの名前を入力します。 たとえば、SUMA

    • エンドポイント]フィールドで、[SAML 2.0 Identity Provider Metadata]リンクをクリックします。 これにより、SUSE Manager設定ファイルにコピーするエンドポイントと証明書が表示されるページに移動します。

Keycloakをインストールしてレルムを作成したら、SUSE Managerサーバを準備できます。

プロシージャ: SUSE Managerサーバの設定
  1. SUSE Managerサーバで、/etc/rhn/rhn.conf設定ファイルを開き、これらのパラメータを編集します。 <FQDN_SUMA>をSUSE Managerのインストールの完全修飾ドメイン名に置き換えます。

    java.sso.onelogin.saml2.sp.entityid                       = https://<FQDN_SUMA>/rhn/manager/sso/metadata
    java.sso.onelogin.saml2.sp.assertion_consumer_service.url = https://<FQDN_SUMA>/rhn/manager/sso/acs
    java.sso.onelogin.saml2.sp.single_logout_service.url      = https://<FQDN_SUMA>/rhn/manager/sso/sls
  2. 設定ファイルで、<FQDN>をKeycloakサーバの完全修飾ドメイン名に置き換えます。 <REALM>を認証レルム に置き換えます。たとえばSUMA

    java.sso.onelogin.saml2.idp.entityid                   = http://<FQDN_IDP>:8080/realms/<REALM>
    java.sso.onelogin.saml2.idp.single_sign_on_service.url = http://<FQDN_IDP>:8080/realms/<REALM>/protocol/saml
    java.sso.onelogin.saml2.idp.single_logout_service.url  = http://<FQDN_IDP>:8080/realms/<REALM>/protocol/saml
  3. IdPメタデータで、パブリックx509証明書を探します。 これには http://<FQDN_IDP>:8080/realms/<REALM>/protocol/saml/descriptorの形式が使用されます。 設定ファイルで、IdPのパブリックx509証明書を指定します。

    java.sso.onelogin.saml2.idp.x509cert = -----BEGIN CERTIFICATE----- <CERTIFICATE>  -----END CERTIFICATE-----

以下は、SSOを有効にした後のSUSE Managerのrhn.confの例です。

java.sso = true


# This is the configuration file for Single Sign-On (SSO) via SAMLv2 protocol
# To enable SSO, set java.sso = true in /etc/rhn/rhn.conf
#
# Mandatory changes: search this file for:
# - YOUR-PRODUCT
# - YOUR-IDP-ENTITY
#
# See product documentation and the comments inline in this file for more
# information about every parameter.
#
#
#
#
# If 'strict' is True, then the Java Toolkit will reject unsigned
# or unencrypted messages if it expects them signed or encrypted
# Also will reject the messages if not strictly follow the SAML
#
# WARNING: In production, this parameter setting parameter MUST be set as "true".
# Otherwise your environment is not secure and will be exposed to attacks.
# Enable debug mode (to print errors)
# Identifier of the SP entity (must be a URI)
java.sso.onelogin.saml2.sp.entityid = https://sumaserver.example.org/rhn/manager/sso/metadata

# Specifies info about where and how the <AuthnResponse> message MUST be
# returned to the requester, in this case our SP.
# URL Location where the <Response> from the IdP will be returned
java.sso.onelogin.saml2.sp.assertion_consumer_service.url = https://sumaserver.example.org/rhn/manager/sso/acs

# Specifies info about where and how the <Logout Response> message MUST be
# returned to the requester, in this case our SP.
java.sso.onelogin.saml2.sp.single_logout_service.url = https://sumaserver.example.org/rhn/manager/sso/sls

# Identifier of the IdP entity (must be a URI)
java.sso.onelogin.saml2.idp.entityid = http://idp.example.org:8080/realms/SUMA

# SSO endpoint info of the IdP. (Authentication Request protocol)
# URL Target of the IdP where the SP will send the Authentication Request Message
java.sso.onelogin.saml2.idp.single_sign_on_service.url = http://idp.example.org:8080/realms/SUMA/protocol/saml

# SLO endpoint info of the IdP.
# URL Location of the IdP where the SP will send the SLO Request
java.sso.onelogin.saml2.idp.single_logout_service.url = http://idp.example.org:8080/realms/SUMA/protocol/saml

# Public x509 certificate of the IdP
java.sso.onelogin.saml2.idp.x509cert = -----BEGIN CERTIFICATE----- MIIClzCCAX8CBgGC+tPbVjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARTVU1BMB4XDTIyMDkwMTIwNTEwNFoXDTMyMDkwMTIwNTI0NFowDzENMAsG
A1UEAwwEU1VNQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMNSWJAalB5mShTkMBO5mrsOosyheEL8/A37WvuqDPwwEfm4x0cG7gmMHvONxYXZk+LRyzoQl2sBrNFrbMuwu5dnah5ZSMxQyUu697S280m4vIiegGaFdbgH+g4FGBu
eSis1ssMzTcES+NUuI7pLkMLNmSQtncESnoL9q2SyeQSwYtr5dz1ydl6IzjwtaWeyQ9EGJNtJtLk3U4+arLPCpHAwqFAnLO9NeYcRDNUKhNBs1v5mHP+L066PZu1/DkE0mSgy/+qXaS0CgZVKqz8qB+bvHVuAq9W60g1CjqZKbwvPu72p/7+d8z
9DxXPIZ1uxdqn19q/kLEP2TYLtgQobSHECAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAga+raLMJDo/P/yN1Z6SGGocK227WFqovBiE/mLYlp5Ff0+0jS1US1plSppJ94xOr8j0m7HW0Wu5xCz6oOhzXTEtnfIbeRyr1Rms3BWdxyXgQ9bWUeZMWZ
HfDkTbhgRRmjDEwSSfEXRKQNvw41CpnlB36I0++ejgGnjDvH7BbkCaoW55JF5j6DT/WYR0n7MkEl2Ova9CH0e9X7Gny8iOAg26oziy06uy3P/lx9Z9RmHnvpvN/Q34SGEq9z/HlQVuP12UPj//iT21Jc17OOZFsZQXlGFTG6bXKmO42W8FdUDJU
ONoXZgjMb3eC7U691YyeowoqTY7mJKxNPprYY/lL0w== -----END CERTIFICATE-----

# Organization
java.sso.onelogin.saml2.organization.name = SUSE Manager admin
java.sso.onelogin.saml2.organization.displayname = SUSE Manager admin
java.sso.onelogin.saml2.organization.url = https://sumaserver.example.org
java.sso.onelogin.saml2.organization.lang =

# Contacts
java.sso.onelogin.saml2.contacts.technical.given_name = SUSE Manager admin
java.sso.onelogin.saml2.contacts.technical.email_address = suma@example.org
java.sso.onelogin.saml2.contacts.support.given_name = SUSE Manager admin
java.sso.onelogin.saml2.contacts.support.email_address = suma@example.org

SUSE Manager エンドポイントをKeycloakに追加できます。 Keycloakはエンドポイントをクライアントと呼びます。

プロシージャ: エンドポイントをクライアントとして追加する
  1. Keycloak Web UIで、これらの詳細を使用して新しいクライアントを作成します。

    • Client type](クライアントタイプ)フィールドで、[SAML]を選択します。

    • クライアントID ]フィールドに、サーバ設定ファイルで指定されているエンドポイントをjava.sso.onelogin.saml2.idp.entityidとして入力します。 たとえば、https://<FQDN_SUMA>/rhn/manager/sso/metadata

  2. [設定]タブで、これらの詳細を使用してクライアントを微調整します。

    • Sign assertions](アサーションに署名する)を[オン]に切り替えます。

    • Signature algorithm](署名アルゴリズム)フィールドで、[RSA_SHA1]を選択します。

    • SAML Signature Key Name](SAML署名キー名)フィールドで、[Key ID](キーID)を選択します。

  3. キー]タブで次の操作を行います。

    • Client signature required](クライアントの署名が必要)を[オフ]に設定します。

  4. Advanced](詳細)タブの[Fine Grain SAML Endpoint Configuration]セクションで、これらの詳細を使用して2つのエンドポイントを追加します。

    • Assertion Consumer Service](アサーションコンシューマサービス)フィールドの両方にサーバ設定ファイルで指定されているエンドポイントをjava.sso.onelogin.saml2.sp.assertion_consumer_service.urlとして入力します。 たとえば、https://<FQDN_SUMA>/rhn/manager/sso/acs

    • Logout Service](ログアウトサービス)フィールドの両方に、サーバ設定ファイルで指定されているエンドポイントをjava.sso.onelogin.saml2.sp.single_logout_service.urlとして入力します。 たとえば、https://<FQDN_SUMA>/rhn/manager/sso/sls

エンドポイントをクライアントとして追加したら、クライアントスコープを設定し、KeycloakとSUSE Managerの間でユーザをマッピングできます。

プロシージャ: クライアントスコープとマッパーの設定
  1. Keycloak Web UIで、クライアント  Client scopes(クライアントスコープ)タブに移動し、デフォルトのクライアントスコープとしてrole_listを割り当てます。

  2. Client_scopes  Mappers (マッパー)タブに移動して、ユーザ属性uidのマッパーをデフォルトの値を使用して追加します。 このSAML属性はSUSE Managerによって想定されています。

  3. Client_scopes  Mappers(マッパー)に移動し、 [role_list] マッパーをクリックします。[Single Role Attribute](単一役割属性)を[オン]に設定します。

  4. ユーザ  管理セクションに移動し、管理ユーザを作成します。 このユーザは、SUSE Manager管理ユーザに一致する必要はありません。

  5. ユーザ  Role mappings (ロールマッピング)タブに移動して、SUSE Manager管理ユーザのユーザ名に一致する値を持つuid属性を追加します。

  6. ユーザ  資格情報タブに移動して、SUSE Manager管理ユーザによって使用されるのと同じパスワードを設定します。

  7. 変更を保存します。

設定が完了したら、インストールが期待どおりに動作していることをテストできます。 SUSE Managerサーバを再起動して変更を取得し、SUSE Manager Web UIに移動します。 インストールが正常に動作している場合は、Keycloak SSOページにリダイレクトされ、ここでは正常に認証できます。