3장. 고급 절차 수행
이 장에서는 Red Hat Single Sign-On 서버의 키 저장소 설정 및 신뢰 저장소 설정, 관리자 계정 생성, 사용 가능한 Red Hat Single Sign-On 클라이언트 등록 방법 개요 및 클러스터링 구성에 대한 지침을 설명합니다.
3.1. 패스스루 TLS 종료 템플릿 배포
이러한 템플릿을 사용하여 배포할 수 있습니다. 이미 존재하는 데는 HTTPS, iPXE 키 저장소 및 Red Hat Single Sign-On 서버 신뢰 저장소가 필요하므로 사용자 정의 HTTPS, iPXE 키 저장소 및 Red Hat Single Sign-On 서버 신뢰 저장소를 사용하여 Red Hat Single Sign-On 서버 Pod를 인스턴스화하는 데 사용할 수 있습니다.
3.1.1. 배포 준비
절차
- cluster:admin 역할을 보유한 사용자로 OpenShift CLI에 로그인합니다.
새 프로젝트를 생성합니다.
oc new-project sso-app-demo
$ oc new-project sso-app-demo
Copy to Clipboard Copied! default
서비스 계정에view
역할을 추가합니다. 이를 통해 서비스 계정에서 클러스터를 관리하는 데 필요한 sso-app-demo 네임스페이스의 모든 리소스를 볼 수 있습니다.oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
$ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
Copy to Clipboard Copied!
3.1.2. Red Hat Single Sign-On Server용 HTTPS 및 iPXE 키 저장소 생성
이 절차에서는 openssl 툴킷을 사용하여 HTTPS 키 저장소에 서명하는 CA 인증서를 생성하고 Red Hat Single Sign-On 서버에 대한 신뢰 저장소를 생성합니다. Java 개발 키트에 포함된 패키지인 keytool 은 이러한 키 저장소에 대한 자체 서명된 인증서를 생성하는 데 사용됩니다.
재암호화 TLS 종료를 사용하는 Red Hat Single Sign- On 애플리케이션 템플릿은 HTTPS 및 iPXE 키 저장소와 Red Hat Single Sign-On 서버 신뢰 저장소를 미리 준비할 필요가 없거나 예상하지 않습니다.
재암호화 템플릿은 OpenShift의 내부 서비스 제공 인증서 시크릿을 사용하여 HTTPS 및 iPXE 키 저장소를 자동으로 생성합니다. Red Hat Single Sign-On 서버 신뢰 저장소도 자동으로 생성됩니다. Java 시스템 경로에 있는 모든 알려진 신뢰할 수 있는 CA 인증서 파일로 미리 채워집니다.
기존 HTTPS / CloudEvent 키 저장소를 사용하여 Red Hat Single Sign-On 서버를 프로비저닝하려면 대신 일부 패스스루 템플릿을 사용합니다.
사전 요구 사항
패스스루 TLS 종료를 사용하는 Red Hat Single Sign-On 애플리케이션 템플릿은 다음을 배포해야 합니다.
- https 트래픽 암호화에 사용되는 HTTPS 키 저장소
- 클러스터의 노드 간 communication의 암호화에 사용되는 CloudEvent 키 저장소, 및
- Red Hat Single Sign-On 요청 보안을 위해 사용되는 Red Hat Single Sign-On 서버 신뢰 저장소
프로덕션 환경의 경우 Red Hat은 SSL 암호화 연결(HTTPS)에 대해 검증된 CA(인증 기관)에서 구입한 자체 SSL 인증서를 사용하는 것이 좋습니다.
자체 서명 또는 구매한 SSL 인증서가 있는 키 저장소를 생성하는 방법에 대한 자세한 내용은 JBoss Enterprise Application Platform 보안 가이드를 참조하십시오.
HTTPS 키 저장소를 생성합니다.
절차
CA 인증서를 생성합니다. 암호를 선택하고 기억합니다. 아래 CA 인증서를 사용하여 인증서 서명 요청에 서명할 때 동일한 암호를 제공합니다.
openssl req -new -newkey rsa:4096 -x509 -keyout xpaas.key -out xpaas.crt -days 365 -subj "/CN=xpaas-sso-demo.ca"
$ openssl req -new -newkey rsa:4096 -x509 -keyout xpaas.key -out xpaas.crt -days 365 -subj "/CN=xpaas-sso-demo.ca"
Copy to Clipboard Copied! HTTPS 키 저장소에 대한 개인 키를 생성합니다.
mykeystorepass
를 키 저장소 암호로 입력합니다.keytool -genkeypair -keyalg RSA -keysize 2048 -dname "CN=secure-sso-sso-app-demo.openshift.example.com" -alias jboss -keystore keystore.jks
$ keytool -genkeypair -keyalg RSA -keysize 2048 -dname "CN=secure-sso-sso-app-demo.openshift.example.com" -alias jboss -keystore keystore.jks
Copy to Clipboard Copied! HTTPS 키 저장소에 대한 인증서 서명 요청을 생성합니다.
mykeystorepass
를 키 저장소 암호로 입력합니다.keytool -certreq -keyalg rsa -alias jboss -keystore keystore.jks -file sso.csr
$ keytool -certreq -keyalg rsa -alias jboss -keystore keystore.jks -file sso.csr
Copy to Clipboard Copied!
CA 인증서를 사용하여 인증서 서명 요청에 서명합니다. CA 인증서를 생성하는 데 사용된 것과 동일한 암호를 입력합니다.
openssl x509 -req -extfile <(printf "subjectAltName=DNS:secure-sso-sso-app-demo.openshift.example.com") -CA xpaas.crt -CAkey xpaas.key -in sso.csr -out sso.crt -days 365 -CAcreateserial
$ openssl x509 -req -extfile <(printf "subjectAltName=DNS:secure-sso-sso-app-demo.openshift.example.com") -CA xpaas.crt -CAkey xpaas.key -in sso.csr -out sso.crt -days 365 -CAcreateserial
Copy to Clipboard Copied! 참고위의 명령을 한 줄로 작동하도록 명령에 프로세스 대체( <
() 구문)가
포함됩니다. 현재 쉘 환경에서 이러한 구문을 지원하는지 확인합니다. 그렇지 않으면예기치 않은 토큰 '(') 메시지 근처에 구문 오류가
발생할 수 있습니다.CA 인증서를 HTTPS 키 저장소로 가져옵니다.
mykeystorepass
를 키 저장소 암호로 입력합니다.이 인증서를 신뢰하려면
:yes
로 응답합니다. [no]:keytool -import -file xpaas.crt -alias xpaas.ca -keystore keystore.jks
$ keytool -import -file xpaas.crt -alias xpaas.ca -keystore keystore.jks
Copy to Clipboard Copied! 서명된 인증서 서명 요청을 HTTPS 키 저장소로 가져옵니다.
mykeystorepass
를 키 저장소 암호로 입력합니다.keytool -import -file sso.crt -alias jboss -keystore keystore.jks
$ keytool -import -file sso.crt -alias jboss -keystore keystore.jks
Copy to Clipboard Copied!
CloudEvent 키 저장소에 대한 보안 키를 생성합니다.
키 저장소 암호로 암호
를 입력합니다.
keytool -genseckey -alias secret-key -storetype JCEKS -keystore jgroups.jceks
$ keytool -genseckey -alias secret-key -storetype JCEKS -keystore jgroups.jceks
CA 인증서를 새로운 Red Hat Single Sign-On 서버 신뢰 저장소로 가져옵니다.
mykeystorepass
를 truststore 암호로 입력합니다. 이 인증서를 신뢰하려면
:
yes
로 응답합니다. [no]:
keytool -import -file xpaas.crt -alias xpaas.ca -keystore truststore.jks
$ keytool -import -file xpaas.crt -alias xpaas.ca -keystore truststore.jks
3.1.3. 보안 생성
절차
OpenShift에서 암호 또는 키 저장소와 같은 중요한 정보를 보유하는 데 사용하는 시크릿이라는 오브젝트를 생성합니다.
이전 섹션에서 생성된 HTTPS 및 iPXE 키 저장소 및 Red Hat Single Sign-On 서버 신뢰 저장소에 대한 시크릿을 만듭니다.
oc create secret generic sso-app-secret --from-file=keystore.jks --from-file=jgroups.jceks --from-file=truststore.jks
$ oc create secret generic sso-app-secret --from-file=keystore.jks --from-file=jgroups.jceks --from-file=truststore.jks
Copy to Clipboard Copied! 이러한 시크릿을 Red Hat Single Sign-On 포드를 실행하는 데 사용되는 기본 서비스 계정에 연결합니다.
oc secrets link default sso-app-secret
$ oc secrets link default sso-app-secret
Copy to Clipboard Copied!
3.1.4. OpenShift CLI를 사용하여 TLS 템플릿 배포
키 저장소 및 시크릿 을 생성한 후 oc
명령을 사용하여 패스스루 TLS 종료 템플릿을 배포합니다.
3.1.4.1. oc
명령 지침
다음 oc
명령에서 SSO_ADMIN_USERNAME, SSO_ADMIN_PASSWORD, HTTPS_PASSWORD, JGROUPS_ENCRYPT_PASSWORD, SSO_TRUSTSTORE_PASSWORD 변수 값이 sso76-ocp4-https Red Hat Single Sign-On 애플리케이션 템플릿의 기본값과 일치합니다.
프로덕션 환경의 경우 Red Hat Single Sign-On 서버의 관리자 사용자 계정의 강력한 사용자 이름과 암호를 생성하는 방법에 대한 지침은 온-사이트 정책을 참조하는 것이 권장되며, HTTPS 및 CloudEvent 키 저장소의 암호와 Red Hat Single Sign-On 서버의 신뢰 저장소를 생성하는 것이 좋습니다.
또한 템플릿을 생성할 때 키 저장소를 생성할 때 암호가 제공된 암호와 일치하도록 합니다. 다른 사용자 이름 또는 암호를 사용한 경우 사용자 환경과 일치하도록 템플릿의 매개변수 값을 수정합니다.
다음 keytool 명령을 사용하여 인증서와 연결된 별칭 이름을 확인할 수 있습니다. keytool 은 Java 개발 키트에 포함된 패키지입니다.
keytool -v -list -keystore keystore.jks | grep Alias
$ keytool -v -list -keystore keystore.jks | grep Alias
Enter keystore password: mykeystorepass
Alias name: xpaas.ca
Alias name: jboss
keytool -v -list -keystore jgroups.jceks -storetype jceks | grep Alias
$ keytool -v -list -keystore jgroups.jceks -storetype jceks | grep Alias
Enter keystore password: password
Alias name: secret-key
다음 명령의 SSO_ADMIN_USERNAME, SSO_ADMIN_PASSWORD 및 SSO_REALM 템플릿 매개변수는 선택 사항입니다.
3.1.4.2. oc
명령 샘플
oc new-app --template=sso76-ocp4-https \ -p HTTPS_SECRET="sso-app-secret" \ -p HTTPS_KEYSTORE="keystore.jks" \ -p HTTPS_NAME="jboss" \ -p HTTPS_PASSWORD="mykeystorepass" \ -p JGROUPS_ENCRYPT_SECRET="sso-app-secret" \ -p JGROUPS_ENCRYPT_KEYSTORE="jgroups.jceks" \ -p JGROUPS_ENCRYPT_NAME="secret-key" \ -p JGROUPS_ENCRYPT_PASSWORD="password" \ -p SSO_ADMIN_USERNAME="admin" \ -p SSO_ADMIN_PASSWORD="redhat" \ -p SSO_REALM="demorealm" \ -p SSO_TRUSTSTORE="truststore.jks" \ -p SSO_TRUSTSTORE_PASSWORD="mykeystorepass" \ -p SSO_TRUSTSTORE_SECRET="sso-app-secret"
$ oc new-app --template=sso76-ocp4-https \
-p HTTPS_SECRET="sso-app-secret" \
-p HTTPS_KEYSTORE="keystore.jks" \
-p HTTPS_NAME="jboss" \
-p HTTPS_PASSWORD="mykeystorepass" \
-p JGROUPS_ENCRYPT_SECRET="sso-app-secret" \
-p JGROUPS_ENCRYPT_KEYSTORE="jgroups.jceks" \
-p JGROUPS_ENCRYPT_NAME="secret-key" \
-p JGROUPS_ENCRYPT_PASSWORD="password" \
-p SSO_ADMIN_USERNAME="admin" \
-p SSO_ADMIN_PASSWORD="redhat" \
-p SSO_REALM="demorealm" \
-p SSO_TRUSTSTORE="truststore.jks" \
-p SSO_TRUSTSTORE_PASSWORD="mykeystorepass" \
-p SSO_TRUSTSTORE_SECRET="sso-app-secret"
--> Deploying template "openshift/sso76-ocp4-https" to project sso-app-demo
Red Hat Single Sign-On 7.6.11 (Ephemeral with passthrough TLS)
---------
An example Red Hat Single Sign-On 7 application. For more information about using this template, see https://github.com/jboss-openshift/application-templates.
A new Red Hat Single Sign-On service has been created in your project. The admin username/password for accessing the master realm via the Red Hat Single Sign-On console is admin/redhat. Please be sure to create the following secrets: "sso-app-secret" containing the keystore.jks file used for serving secure content; "sso-app-secret" containing the jgroups.jceks file used for securing JGroups communications; "sso-app-secret" containing the truststore.jks file used for securing Red Hat Single Sign-On requests.
* With parameters:
* Application Name=sso
* Custom http Route Hostname=
* Custom https Route Hostname=
* Server Keystore Secret Name=sso-app-secret
* Server Keystore Filename=keystore.jks
* Server Keystore Type=
* Server Certificate Name=jboss
* Server Keystore Password=mykeystorepass
* Datasource Minimum Pool Size=
* Datasource Maximum Pool Size=
* Datasource Transaction Isolation=
* JGroups Secret Name=sso-app-secret
* JGroups Keystore Filename=jgroups.jceks
* JGroups Certificate Name=secret-key
* JGroups Keystore Password=password
* JGroups Cluster Password=yeSppLfp # generated
* ImageStream Namespace=openshift
* Red Hat Single Sign-On Administrator Username=admin
* Red Hat Single Sign-On Administrator Password=redhat
* Red Hat Single Sign-On Realm=demorealm
* Red Hat Single Sign-On Service Username=
* Red Hat Single Sign-On Service Password=
* Red Hat Single Sign-On Trust Store=truststore.jks
* Red Hat Single Sign-On Trust Store Password=mykeystorepass
* Red Hat Single Sign-On Trust Store Secret=sso-app-secret
* Container Memory Limit=1Gi
--> Creating resources ...
service "sso" created
service "secure-sso" created
service "sso-ping" created
route "sso" created
route "secure-sso" created
deploymentconfig "sso" created
--> Success
Run 'oc status' to view your app.