예시 SSO 구현

이 예에서 SSO는 SUSE Multi-Linux Manager로 3개의 엔드포인트를 노출하고 Keycloak 21.0.1 이상을 ID 서비스 공급자(IdP)로 사용하여 구현됩니다.

Keycloak IdP를 설치한 후 SUSE Multi-Linux 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에 로그인하고 다음 세부 정보를 사용하여 인증 영역을 생성합니다.

    • 이름 필드에 영역 이름을 입력합니다. For example, MLM.

    • 엔드포인트 필드에서 SAML 2.0 ID 공급자 메타 데이터 링크를 클릭합니다. 그러면 SUSE Multi-Linux Manager 구성 파일에 복사할 엔드포인트와 인증서가 표시되는 페이지로 이동합니다.

Keycloak을 설치하고 영역을 생성한 후에는 SUSE Multi-Linux Manager 서버를 준비할 수 있습니다.

절차: SUSE Multi-Linux Manager 서버 설정
  1. SUSE Multi-Linux Manager 서버에서 /etc/rhn/rhn.conf 구성 파일을 열고 이러한 파라미터를 편집합니다. Replace <FQDN_MLM> with the fully qualified domain name of your SUSE Multi-Linux Manager installation:

    java.sso.onelogin.saml2.sp.entityid                       = https://<FQDN_MLM>/rhn/manager/sso/metadata
    java.sso.onelogin.saml2.sp.assertion_consumer_service.url = https://<FQDN_MLM>/rhn/manager/sso/acs
    java.sso.onelogin.saml2.sp.single_logout_service.url      = https://<FQDN_MLM>/rhn/manager/sso/sls
  2. 구성 파일에서 <FQDN_IDP>를 Keycloak 서버의 정규화된 도메인 이름으로 바꿉니다. Replace <REALM> with your authentication realm, for example MLM:

    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 Multi-Linux 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://MLMserver.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://MLMserver.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://MLMserver.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/MLM

# 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/MLM/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/MLM/protocol/saml

# IdP의 공개 x509 인증서
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://MLMserver.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 = MLM@example.org
java.sso.onelogin.saml2.contacts.support.given_name = SUSE Manager admin
java.sso.onelogin.saml2.contacts.support.email_address = MLM@example.org

SUSE Multi-Linux Manager 엔드포인트를 Keycloak에 추가할 수 있습니다. Keycloak은 엔드포인트를 클라이언트로 참조합니다.

절차: 엔드포인트를 클라이언트로 추가
  1. Keycloak Web UI에서 다음 세부 사항을 사용하여 새 클라이언트를 생성합니다.

    • 클라이언트 유형 필드에서 SAML을 선택합니다.

    • 클라이언트 ID 필드에서 서버 구성 파일에 지정된 엔드포인트를 java.sso.onelogin.saml2.idp.entityid로 입력합니다. For example, https://<FQDN_MLM>/rhn/manager/sso/metadata.

  2. 설정 탭에서 다음 세부 정보를 사용하여 클라이언트를 미세 조정합니다.

    • 서명 어설션 스위치를 켜짐으로 토글합니다.

    • 서명 알고리즘 필드에서 RSA_SHA1을 선택합니다.

    • SAML 서명 키 이름 필드에서 키 ID를 선택합니다.

  3. 탭에서:

    • 클라이언트 서명 필요끄기로 설정합니다.

  4. 세분화된 SAML 엔드포인트 구성 섹션의 고급 탭에서 다음 세부 정보를 사용하여 엔드포인트 두 개를 추가합니다.

    • 어설션 소비자 서비스 필드에, 서버 구성 파일에 지정된 엔드포인트를 java.sso.onelogin.saml2.sp.assertion_consumer_service.url로 입력합니다. For example, https://<FQDN_MLM>/rhn/manager/sso/acs.

    • 로그아웃 서비스 필드에, 서버 구성 파일에 지정된 엔드포인트를 java.sso.onelogin.saml2.sp.single_logout_service.url로 입력합니다. For example, https://<FQDN_MLM>/rhn/manager/sso/sls.

엔드포인트를 클라이언트로 추가하면 클라이언트 범위를 구성하고 Keycloak과 SUSE Multi-Linux Manager 간에 사용자를 매핑할 수 있습니다.

절차: 클라이언트 범위 및 매퍼 구성
  1. Keycloak Web UI에서 클라이언트  클라이언트 범위 탭으로 이동하여 role_list를 기본 클라이언트 범위로 할당합니다.

  2. 클라이언트_범위  매퍼 탭으로 이동하여 기본값을 사용해 사용자 속성 uid에 대한 매퍼를 추가합니다. 이 SAML 특성은 SUSE Multi-Linux Manager에 필요합니다.

  3. 클라이언트_범위  매퍼 로 이동하여 역할_목록 매퍼를 클릭합니다. 단일 역할 속성켜기로 설정합니다.

  4. 사용자  관리자 섹션으로 이동하여 관리 사용자를 생성합니다. 이 사용자는 SUSE Multi-Linux Manager 관리 사용자와 일치하지 않아도 됩니다.

  5. 사용자  역할 매핑 탭으로 이동하여 SUSE Multi-Linux Manager 관리 사용자의 사용자 이름과 일치하는 값을 갖는 uid라는 속성을 추가합니다.

  6. 사용자  자격 증명 탭으로 이동하여 SUSE Multi-Linux Manager 관리 사용자가 사용하는 것과 동일한 비밀번호를 설정합니다. . 변경 사항을 저장합니다.

구성을 완료하면 설치가 예상대로 작동하는지 테스트할 수 있습니다. SUSE Multi-Linux Manager 서버를 재시작하여 변경 사항을 적용하고 SUSE Multi-Linux Manager Web UI로 이동합니다. 설치가 올바르게 작동하면 성공적으로 인증할 수 있는 Keycloak SSO 페이지로 리디렉트됩니다.