19.4. SSO(Single Sign-On)의 LDAP 및 Kerberos 구성

Single Sign-On을 사용하면 암호를 다시 사용하지 않고도 VM 포털 또는 관리 포털에 로그인할 수 있습니다. 인증 자격 증명은 Kerberos 서버에서 가져옵니다. 관리 포털과 VM 포털에 단일 사인온을 구성하려면 ovirt-engine-extension-aaa-miscovirt-engine-extension-aaa-ldap 라는 두 가지 확장 기능을 구성하고 Apache 모듈 mod_auth_gssapimod_session 을 구성해야 합니다. Kerberos를 포함하지 않는 SSO(Single Sign-On)를 구성할 수 있지만 이 문서의 범위를 벗어납니다.

참고

VM 포털에 대한 SSO(Single Sign-On)가 활성화된 경우 가상 머신에 대한 SSO(Single Sign-On)를 사용할 수 없습니다. VM 포털에 SSO(Single Sign-On)가 활성화된 상태에서 VM 포털에서 암호를 수락할 필요가 없으므로 가상 머신에 로그인할 암호를 위임할 수 없습니다.

이 예에서는 다음을 가정합니다.

  • 기존 KDC(Key Distribution Center) 서버는 MIT 버전의 Kerberos 5를 사용합니다.
  • KDC 서버에 대한 관리 권한이 있습니다.
  • Kerberos 클라이언트가 Red Hat Virtualization Manager 및 사용자 시스템에 설치되어 있습니다.
  • kadmin 유틸리티는 Kerberos 서비스 주체 및 tab 파일을 만드는 데 사용됩니다.

다음 구성 요소가 포함됩니다.

KDC 서버에서

  • Red Hat Virtualization Manager에서 Apache 서비스에 대한 서비스 주체와 키탭 파일을 생성합니다.

Red Hat Virtualization Manager

  • 인증 및 권한 부여 확장 패키지 및 Apache Kerberos 인증 모듈을 설치합니다.
  • 확장 파일을 구성합니다.

Apache 서비스에 대한 Kerberos 구성

  1. KDC 서버에서 kadmin 유틸리티를 사용하여 Red Hat Virtualization Manager에서 Apache 서비스에 대한 서비스 주체를 생성합니다. 서비스 주체는 Apache 서비스의 KDC에 대한 참조 ID입니다.

    # kadmin
    kadmin> addprinc -randkey HTTP/fqdn-of-rhevm@REALM.COM
  2. Apache 서비스의 keytab 파일을 생성합니다. keytab 파일은 공유 보안 키를 저장합니다.

    참고

    engine-backup 명령에는 백업 및 복원 시 /etc/httpd/http.keytab 파일이 포함됩니다. keytab 파일에 다른 이름을 사용하는 경우 백업하고 복원해야 합니다.

    kadmin> ktadd -k /tmp/http.keytab HTTP/fqdn-of-rhevm@REALM.COM
    kadmin> quit
  3. KDC 서버에서 Red Hat Virtualization Manager로 keytab 파일을 복사합니다.

    # scp /tmp/http.keytab root@rhevm.example.com:/etc/httpd

VM 포털 또는 관리 포털에 Single Sign-On 구성

  1. Red Hat Virtualization Manager에서 키 탭의 소유권 및 권한이 적절한지 확인합니다.

    # chown apache /etc/httpd/http.keytab
    # chmod 400 /etc/httpd/http.keytab
  2. 인증 확장 패키지, LDAP 확장 패키지 및 mod_auth_gssapimod_session Apache 모듈을 설치합니다.

    # yum install ovirt-engine-extension-aaa-misc ovirt-engine-extension-aaa-ldap mod_auth_gssapi mod_session
  3. SSO 구성 템플릿 파일을 /etc/ovirt-engine 디렉터리에 복사합니다. 템플릿 파일은 Active Directory(ad-sso) 및 기타 디렉터리 유형(simple-sso)에 사용할 수 있습니다. 이 예에서는 간단한 SSO 구성 템플릿을 사용합니다.

    # cp -r /usr/share/ovirt-engine-extension-aaa-ldap/examples/simple-sso/. /etc/ovirt-engine
  4. ovirt-sso.conf 를 Apache 구성 디렉터리로 이동합니다.

    참고

    engine-backup 명령에는 백업 및 복원할 때 /etc/httpd/conf.d/ovirt-sso.conf 파일이 포함되어 있습니다. 이 파일에 다른 이름을 사용하는 경우 백업하고 복원하십시오.

    # mv /etc/ovirt-engine/aaa/ovirt-sso.conf /etc/httpd/conf.d
  5. 인증 방법 파일을 검토합니다. 키가 keytab 파일에서 자동으로 가져오기 때문에 이 파일을 편집할 필요가 없습니다.

    # vi /etc/httpd/conf.d/ovirt-sso.conf

    예 19.5. 인증 방법 파일 예

    <LocationMatch ^/ovirt-engine/sso/(interactive-login-negotiate|oauth/token-http-auth)|^/ovirt-engine/api>
      <If "req('Authorization') !~ /^(Bearer|Basic)/i">
        RewriteEngine on
        RewriteCond %{LA-U:REMOTE_USER} ^(.*)$
        RewriteRule ^(.*)$ - [L,NS,P,E=REMOTE_USER:%1]
        RequestHeader set X-Remote-User %{REMOTE_USER}s
    
        AuthType GSSAPI
        AuthName "Kerberos Login"
    
        # Modify to match installation
        GssapiCredStore keytab:/etc/httpd/http.keytab
        GssapiUseSessions On
        Session On
        SessionCookieName ovirt_gssapi_session path=/private;httponly;secure;
    
        Require valid-user
        ErrorDocument 401 "<html><meta http-equiv=\"refresh\" content=\"0; url=/ovirt-engine/sso/login-unauthorized\"/><body><a href=\"/ovirt-engine/sso/login-unauthorized\">Here</a></body></html>"
      </If>
    </LocationMatch>
  6. 관리 포털 및 VM 포털 로그인 페이지의 사용자에게 표시되는 프로필 이름과 일치하도록 구성 파일의 이름을 변경합니다.

    # mv /etc/ovirt-engine/aaa/profile1.properties /etc/ovirt-engine/aaa/example.properties
    # mv /etc/ovirt-engine/extensions.d/profile1-http-authn.properties /etc/ovirt-engine/extensions.d/example-http-authn.properties
    # mv /etc/ovirt-engine/extensions.d/profile1-http-mapping.properties /etc/ovirt-engine/extensions.d/example-http-mapping.properties
    # mv /etc/ovirt-engine/extensions.d/profile1-authz.properties /etc/ovirt-engine/extensions.d/example-authz.properties
  7. LDAP 서버 유형의 주석을 제거하고 도메인 및 암호 필드를 업데이트하여 LDAP 속성 구성 파일을 편집합니다.

    #  vi /etc/ovirt-engine/aaa/example.properties

    예 19.6. 프로필: LDAP 서버 섹션 예

    # Select one
    include = <openldap.properties>
    #include = <389ds.properties>
    #include = <rhds.properties>
    #include = <ipa.properties>
    #include = <iplanet.properties>
    #include = <rfc2307-389ds.properties>
    #include = <rfc2307-rhds.properties>
    #include = <rfc2307-openldap.properties>
    #include = <rfc2307-edir.properties>
    #include = <rfc2307-generic.properties>
    
    # Server
    #
    vars.server = ldap1.company.com
    
    # Search user and its password.
    #
    vars.user = uid=search,cn=users,cn=accounts,dc=company,dc=com
    vars.password = 123456
    
    pool.default.serverset.single.server = ${global:vars.server}
    pool.default.auth.simple.bindDN = ${global:vars.user}
    pool.default.auth.simple.password = ${global:vars.password}

    TLS 또는 SSL 프로토콜을 사용하여 LDAP 서버와 상호 작용하려면 LDAP 서버의 루트 CA 인증서를 가져오고 이를 사용하여 공개 키 저장소 파일을 생성합니다. 다음 줄의 주석을 제거하고 공개 키 저장소 파일의 전체 경로와 파일에 액세스할 암호를 지정합니다.

    참고

    공개 키 저장소 파일 생성에 대한 자세한 내용은 D.2절. “관리자와 LDAP 서버 간 암호화 통신 설정” 을 참조하십시오.

    예 19.7. profile: keystore 섹션의 예

    # Create keystore, import certificate chain and uncomment
    # if using ssl/tls.
    pool.default.ssl.startTLS = true
    pool.default.ssl.truststore.file = /full/path/to/myrootca.jks
    pool.default.ssl.truststore.password = password
  8. 인증 구성 파일을 검토합니다. 관리 포털의 사용자에게 표시되는 프로필 이름과 VM 포털 로그인 페이지는 ovirt.engine.aaa.authn.profile.name 에 의해 정의됩니다. 구성 프로필 위치는 LDAP 구성 파일 위치와 일치해야 합니다. 모든 필드는 기본값으로 남겨 둘 수 있습니다.

    # vi /etc/ovirt-engine/extensions.d/example-http-authn.properties

    예 19.8. 인증 구성 파일 예

    ovirt.engine.extension.name = example-http-authn
    ovirt.engine.extension.bindings.method = jbossmodule
    ovirt.engine.extension.binding.jbossmodule.module = org.ovirt.engine-extensions.aaa.misc
    ovirt.engine.extension.binding.jbossmodule.class = org.ovirt.engineextensions.aaa.misc.http.AuthnExtension
    ovirt.engine.extension.provides = org.ovirt.engine.api.extensions.aaa.Authn
    ovirt.engine.aaa.authn.profile.name = example-http
    ovirt.engine.aaa.authn.authz.plugin = example-authz
    ovirt.engine.aaa.authn.mapping.plugin = example-http-mapping
    config.artifact.name = HEADER
    config.artifact.arg = X-Remote-User
  9. 권한 부여 구성 파일을 검토합니다. 구성 프로필 위치는 LDAP 구성 파일 위치와 일치해야 합니다. 모든 필드는 기본값으로 남겨 둘 수 있습니다.

    #  vi /etc/ovirt-engine/extensions.d/example-authz.properties

    예 19.9. 권한 부여 구성 파일의 예

    ovirt.engine.extension.name = example-authz
    ovirt.engine.extension.bindings.method = jbossmodule
    ovirt.engine.extension.binding.jbossmodule.module = org.ovirt.engine-extensions.aaa.ldap
    ovirt.engine.extension.binding.jbossmodule.class = org.ovirt.engineextensions.aaa.ldap.AuthzExtension
    ovirt.engine.extension.provides = org.ovirt.engine.api.extensions.aaa.Authz
    config.profile.file.1 = ../aaa/example.properties
  10. 인증 매핑 구성 파일을 검토합니다. 구성 프로필 위치는 LDAP 구성 파일 위치와 일치해야 합니다. 구성 프로필 확장 이름은 인증 구성 파일의 ovirt.engine.aaa.authn.mapping.plugin 값과 일치해야 합니다. 모든 필드는 기본값으로 남겨 둘 수 있습니다.

    # vi /etc/ovirt-engine/extensions.d/example-http-mapping.properties

    예 19.10. 인증 매핑 구성 파일의 예

    ovirt.engine.extension.name = example-http-mapping
    ovirt.engine.extension.bindings.method = jbossmodule
    ovirt.engine.extension.binding.jbossmodule.module = org.ovirt.engine-extensions.aaa.misc
    ovirt.engine.extension.binding.jbossmodule.class = org.ovirt.engineextensions.aaa.misc.mapping.MappingExtension
    ovirt.engine.extension.provides = org.ovirt.engine.api.extensions.aaa.Mapping
    config.mapAuthRecord.type = regex
    config.mapAuthRecord.regex.mustMatch = true
    config.mapAuthRecord.regex.pattern = ^(?<user>.*?)((\\\\(?<at>@)(?<suffix>.*?)@.*)|(?<realm>@.*))$
    config.mapAuthRecord.regex.replacement = ${user}${at}${suffix}
  11. 구성 파일의 소유권 및 권한이 적절한지 확인합니다.

    # chown ovirt:ovirt /etc/ovirt-engine/aaa/example.properties
    # chown ovirt:ovirt /etc/ovirt-engine/extensions.d/example-http-authn.properties
    # chown ovirt:ovirt /etc/ovirt-engine/extensions.d/example-http-mapping.properties
    # chown ovirt:ovirt /etc/ovirt-engine/extensions.d/example-authz.properties
    # chmod 600 /etc/ovirt-engine/aaa/example.properties
    # chmod 640 /etc/ovirt-engine/extensions.d/example-http-authn.properties
    # chmod 640 /etc/ovirt-engine/extensions.d/example-http-mapping.properties
    # chmod 640 /etc/ovirt-engine/extensions.d/example-authz.properties
  12. Apache 서비스 및 ovirt-engine 서비스를 다시 시작합니다.

    # systemctl restart httpd.service
    # systemctl restart ovirt-engine.service