19.4. SSO(Single Sign-On)의 LDAP 및 Kerberos 구성
Single Sign-On을 사용하면 암호를 다시 사용하지 않고도 VM 포털 또는 관리 포털에 로그인할 수 있습니다. 인증 자격 증명은 Kerberos 서버에서 가져옵니다. 관리 포털과 VM 포털에 단일 사인온을 구성하려면 ovirt-engine-extension-aaa-misc 및 ovirt-engine-extension-aaa-ldap 라는 두 가지 확장 기능을 구성하고 Apache 모듈 mod_auth_gssapi 및 mod_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 구성
KDC 서버에서
kadmin
유틸리티를 사용하여 Red Hat Virtualization Manager에서 Apache 서비스에 대한 서비스 주체를 생성합니다. 서비스 주체는 Apache 서비스의 KDC에 대한 참조 ID입니다.# kadmin kadmin> addprinc -randkey HTTP/fqdn-of-rhevm@REALM.COM
Apache 서비스의 keytab 파일을 생성합니다. keytab 파일은 공유 보안 키를 저장합니다.
참고engine-backup
명령에는 백업 및 복원 시/etc/httpd/http.keytab
파일이 포함됩니다. keytab 파일에 다른 이름을 사용하는 경우 백업하고 복원해야 합니다.kadmin> ktadd -k /tmp/http.keytab HTTP/fqdn-of-rhevm@REALM.COM kadmin> quit
KDC 서버에서 Red Hat Virtualization Manager로 keytab 파일을 복사합니다.
# scp /tmp/http.keytab root@rhevm.example.com:/etc/httpd
VM 포털 또는 관리 포털에 Single Sign-On 구성
Red Hat Virtualization Manager에서 키 탭의 소유권 및 권한이 적절한지 확인합니다.
# chown apache /etc/httpd/http.keytab # chmod 400 /etc/httpd/http.keytab
인증 확장 패키지, LDAP 확장 패키지 및
mod_auth_gssapi
및mod_session
Apache 모듈을 설치합니다.# yum install ovirt-engine-extension-aaa-misc ovirt-engine-extension-aaa-ldap mod_auth_gssapi mod_session
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
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
인증 방법 파일을 검토합니다. 키가 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>
관리 포털 및 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
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
인증 구성 파일을 검토합니다. 관리 포털의 사용자에게 표시되는 프로필 이름과 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
권한 부여 구성 파일을 검토합니다. 구성 프로필 위치는 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
인증 매핑 구성 파일을 검토합니다. 구성 프로필 위치는 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}
구성 파일의 소유권 및 권한이 적절한지 확인합니다.
# 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
Apache 서비스 및
ovirt-engine
서비스를 다시 시작합니다.# systemctl restart httpd.service # systemctl restart ovirt-engine.service