서버 설치 및 구성 가이드


Red Hat Single Sign-On 7.6

Red Hat Single Sign-On 7.6과 함께 사용하는 경우

Red Hat Customer Content Services

초록

본 안내서는 Red Hat Single Sign-On 7.6을 설치 및 구성하기 위한 정보로 구성됩니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

1장. 가이드 개요

이 가이드에서는 Red Hat Single Sign-On 서버를 처음 부팅하기 전에 완료해야 하는 단계를 안내하는 것입니다. Red Hat Single Sign-On 드라이브를 테스트하려면 자체 내장 및 로컬 전용 데이터베이스로 거의 실행됩니다. 실제 배포를 프로덕션 환경에서 실행하려면 런타임(독립 실행형 또는 도메인 모드)에서 서버 구성을 관리하는 방법을 결정하고, Red Hat Single Sign-On 스토리지에 대한 공유 데이터베이스를 구성하고, 암호화 및 HTTPS를 설정하고, 마지막으로 클러스터에서 실행되도록 Red Hat Single Sign-On을 설정해야 합니다. 이 가이드에서는 사전 부팅 의사 결정 및 설정의 모든 측면을 안내합니다.

특히 주목할 점은 Red Hat Single Sign-On은 JBoss EAP Application Server에서 파생된다는 점입니다. Red Hat Single Sign-On 구성의 여러 측면은 JBoss EAP 구성 요소를 중심으로 합니다. 자세한 내용을 보려면 이 안내서를 통해 설명서 외부에 있는 문서로 안내하는 경우가 많습니다.

2장. 소프트웨어 설치

ZIP 파일을 다운로드하여 압축을 풀거나 RPM을 사용하여 Red Hat Single Sign-On을 설치할 수 있습니다. 이 장에서는 시스템 요구 사항 및 디렉터리 구조를 검토합니다.

2.1. 설치 사전 요구 사항

Red Hat Single Sign-On 서버를 설치하기 위한 사전 요구 사항은 다음과 같습니다.

  • Java 8 JRE or Java 11 JRE
  • 선택한 Java 버전을 지원하는 운영 체제입니다. 지원되는 구성을 참조하십시오.
  • zip 또는 gzip 및 tar
  • 최소 512M의 RAM
  • 디스크 공간 1G 이상
  • PostgreSQL, MySQL, Oracle 등과 같은 공유 외부 데이터베이스 Red Hat Single Sign-On에는 클러스터에서 실행하려는 경우 외부 공유 데이터베이스가 필요합니다. 자세한 내용은 이 가이드의 데이터베이스 구성 섹션을 참조하십시오.
  • 클러스터에서 실행하려는 경우 머신에서 네트워크 멀티 캐스트 지원 Red Hat Single Sign-On은 멀티 캐스트 없이 클러스터링할 수 있지만 이로 인해 구성 변경이 많이 필요합니다. 자세한 내용은 이 가이드의 클러스터링 섹션을 참조하십시오.
  • Linux에서 /dev/urandom 을 임의의 데이터 소스로 사용하여 사용 가능한 엔트로피 부족으로 인해 Red Hat Single Sign-On 중단을 방지하는 것이 좋습니다. /dev/random 사용은 보안 정책에 따라 필요하지 않습니다. Oracle JDK 8 및 OpenJDK 8에서 이를 수행하려면 시작 시 java.security.egd 시스템 속성을 file:/dev/urandom 로 설정합니다.

2.2. ZIP 파일에서 RH-SSO 설치

Red Hat Single Sign-On 서버 다운로드 ZIP 파일에는 Red Hat Single Sign-On 서버를 실행하는 스크립트와 바이너리가 포함되어 있습니다. 먼저 7.6 서버를 설치한 다음 7.6.11 서버 패치를 설치합니다.

절차

  1. Red Hat 고객 포털 로 이동하십시오.
  2. Red Hat Single Sign-On 7.6 서버를 다운로드합니다.
  3. unzip, tar 또는 Expand-Archive와 같은 적절한 unzip 유틸리티를 사용하여 ZIP 파일의 압축을 풉니다.
  4. Red Hat 고객 포털 로 돌아가기 .
  5. 패치 탭을 클릭합니다.
  6. Red Hat Single Sign-On 7.6.11 서버 패치를 다운로드합니다.

    다운로드한 ZIP 파일을 선택한 디렉터리에 배치합니다.

  7. Red Hat Single Sign-On 서버의 루트 디렉터리로 이동합니다.
  8. JBoss EAP 명령줄 인터페이스를 시작합니다.

    Linux/Unix

    Copy to Clipboard Toggle word wrap
    $ ./bin/jboss-cli.sh

    Windows

    Copy to Clipboard Toggle word wrap
    > .\bin\jboss-cli.bat

  9. 패치를 적용합니다.

    Copy to Clipboard Toggle word wrap
    $ patch apply <path-to-zip>/rh-sso-7.6.11-patch.zip

추가 리소스

패치 적용에 대한 자세한 내용은 ZIP/설치 프로그램 패치를 참조하십시오.

2.3. RPM에서 RH-SSO 설치

참고

Red Hat Enterprise Linux 7 및 8에서는 채널이라는 용어가 리포지토리라는 이름으로 교체되었습니다. 이러한 명령에서는 리포지토리라는 용어만 사용됩니다.

RPM에서 RH-SSO를 설치하려면 먼저 JBoss EAP 7.4 및 RH-SSO 7.6 리포지토리를 모두 구독해야 합니다.

참고

EAP RPM으로 업그레이드할 수는 없지만 RH-SSO에 대한 업데이트 수신을 중지합니다.

2.3.1. JBoss EAP 7.4 리포지터리 구독

사전 요구 사항

  1. Red Hat Subscription Manager를 사용하여 Red Hat Enterprise Linux 시스템이 계정에 등록되어 있는지 확인하십시오. 자세한 내용은 Red Hat 서브스크립션 관리 설명서를 참조하십시오.
  2. 다른 JBoss EAP 리포지토리를 이미 구독한 경우 해당 리포지토리에서 먼저 구독 해제해야 합니다.

Red Hat Enterprise Linux 6, 7의 경우 7: Red Hat Subscription Manager를 사용하여 다음 명령을 사용하여 JBoss EAP 7.4 리포지토리를 구독하십시오. <RHEL_VERSION>을 Red Hat Enterprise Linux 버전에 따라 6 또는 7로 바꿉니다.

Copy to Clipboard Toggle word wrap
subscription-manager repos --enable=jb-eap-7.4-for-rhel-<RHEL_VERSION>-server-rpms --enable=rhel-<RHEL_VERSION>-server-rpms

Red Hat Enterprise Linux 8의 경우: Red Hat Subscription Manager를 사용하여 다음 명령을 사용하여 JBoss EAP 7.4 리포지터리를 구독하십시오.

Copy to Clipboard Toggle word wrap
subscription-manager repos --enable=jb-eap-7.4-for-rhel-8-x86_64-rpms --enable=rhel-8-for-x86_64-baseos-rpms --enable=rhel-8-for-x86_64-appstream-rpms

2.3.2. RH-SSO 7.6 리포지토리 구독 및 RH-SSO 7.6 설치

사전 요구 사항

  1. Red Hat Subscription Manager를 사용하여 Red Hat Enterprise Linux 시스템이 계정에 등록되어 있는지 확인하십시오. 자세한 내용은 Red Hat 서브스크립션 관리 설명서를 참조하십시오.
  2. JBoss EAP 7.4 리포지토리를 이미 구독했는지 확인합니다. 자세한 내용은 JBoss EAP 7.4 리포지토리에 구독을 참조하십시오.

절차

  1. Red Hat Enterprise Linux 6, 7의 경우 7: Red Hat Subscription Manager를 사용하여 다음 명령을 사용하여 RH-SSO 7.6 리포지토리를 구독하십시오. <RHEL_VERSION>을 Red Hat Enterprise Linux 버전에 따라 6 또는 7로 바꿉니다.

    Copy to Clipboard Toggle word wrap
    subscription-manager repos --enable=rh-sso-7.6-for-rhel-<RHEL-VERSION>-server-rpms
  2. Red Hat Enterprise Linux 8의 경우: Red Hat Subscription Manager를 사용하여 다음 명령을 사용하여 RH-SSO 7.6 리포지토리를 구독하십시오.

    Copy to Clipboard Toggle word wrap
    subscription-manager repos --enable=rh-sso-7.6-for-rhel-8-x86_64-rpms
  3. Red Hat Enterprise Linux 6, 7: 다음 명령을 사용하여 서브스크립션된 RH-SSO 7.6 리포지토리에서 RH-SSO를 설치합니다.

    Copy to Clipboard Toggle word wrap
    yum groupinstall rh-sso7
  4. Red Hat Enterprise Linux 8의 경우: 다음 명령을 사용하여 구독한 RH-SSO 7.6 리포지토리에서 RH-SSO를 설치합니다.

    Copy to Clipboard Toggle word wrap
    dnf groupinstall rh-sso7

설치가 완료되었습니다. RPM 설치의 기본 RH-SSO_HOME 경로는 /opt/rh/rh-sso7/root/usr/share/keycloak입니다.

추가 리소스

Red Hat Single Sign-On의 7.6.11 패치 설치에 대한 자세한 내용은 RPM 패치 를 참조하십시오.

2.4. 중요 디렉터리

다음은 서버 배포의 몇 가지 중요한 디렉터리입니다.

bin/
여기에는 서버를 부팅하거나 서버에서 다른 관리 작업을 수행하는 다양한 스크립트가 포함되어 있습니다.
domain/
여기에는 도메인 모드에서 Red Hat Single Sign-On을 실행할 때 구성 파일 및 작업 디렉터리가 포함됩니다.
modules/
서버에서 사용하는 모든 Java 라이브러리입니다.
standalone/
독립 실행형 모드에서 Red Hat Single Sign-On을 실행할 때 구성 파일 및 작업 디렉터리가 포함됩니다.
standalone/deployments/
Red Hat Single Sign-On에 대한 확장을 작성하는 경우 여기에 확장을 배치할 수 있습니다. 이에 대한 자세한 내용은 서버 개발자 가이드를 참조하십시오.
themes/
이 디렉토리에는 서버에서 표시하는 모든 UI 화면을 표시하는 데 사용되는 모든 html, 스타일 시트, JavaScript 파일 및 이미지가 포함되어 있습니다. 여기에서 기존 항목을 수정하거나 직접 만들 수 있습니다. 이에 대한 자세한 내용은 서버 개발자 가이드를 참조하십시오.

3장. 작동 모드 사용

프로덕션 환경에 Red Hat Single Sign-On을 배포하기 전에 사용할 운영 모드를 결정해야 합니다.

  • 클러스터에서 Red Hat Single Sign-On을 실행하시겠습니까?
  • 서버 구성을 관리하는 중앙 집중식 방법이 필요하십니까?

운영 모드를 선택하는 것은 데이터베이스를 구성하는 방법에 영향을 미치고 캐싱을 구성하며 서버를 부팅하는 방법에도 영향을 미칩니다.

작은 정보

Red Hat Single Sign-On은 JBoss EAP Application Server를 기반으로 구축됩니다. 이 가이드에서는 특정 모드에서 배포의 기본 사항만 설명합니다. 이에 대한 구체적인 정보를 원한다면 JBoss EAP 구성 가이드 입니다.

3.1. 독립 실행형 모드 사용

독립 실행형 작동 모드는 하나의 Red Hat Single Sign-On 서버 인스턴스만 실행하려는 경우에만 유용합니다. 클러스터된 배포에는 사용할 수 없으며 모든 캐시는 배포되지 않고 로컬 전용입니다. 단일 장애 지점이 있으므로 프로덕션에서 독립 실행형 모드를 사용하는 것은 권장되지 않습니다. 독립 실행형 모드 서버가 다운되면 사용자는 로그인할 수 없습니다. 이 모드는 드라이브를 테스트하고 Red Hat Single Sign-On의 기능을 사용하는 데에만 유용합니다.

3.1.1. 독립 실행형 모드로 부팅

독립 실행형 모드에서 서버를 실행하는 경우 운영 체제에 따라 서버를 부팅해야 하는 특정 스크립트가 있습니다. 이 스크립트는 서버 배포의 bin/ 디렉터리에 있습니다.

독립 실행형 부팅 스크립트

standalone boot files

서버를 부팅하려면 다음을 수행합니다.

Linux/Unix

Copy to Clipboard Toggle word wrap
$ .../bin/standalone.sh

Windows

Copy to Clipboard Toggle word wrap
> ...\bin\standalone.bat

주의

Java SE 17을 사용하여 독립 실행형 모드에서 Red Hat Single Sign-On을 실행하려면 번들 스크립트 enable-elytron-se17.cli 를 실행하여 설정을 수정해야 합니다.

Linux/Unix

Copy to Clipboard Toggle word wrap
$ ./bin/jboss-cli.sh --file=docs/examples/enable-elytron-se17.cli

Windows

Copy to Clipboard Toggle word wrap
> .\bin\jboss-cli.bat --file=docs\examples\enable-elytron-se17.cli

3.1.2. 독립 실행형 구성

이 가이드의 대부분은 Red Hat Single Sign-On의 인프라 수준 측면을 구성하는 방법을 안내합니다. 이러한 측면은 Red Hat Single Sign-On이 미미한 애플리케이션 서버에 고유한 구성 파일에서 구성됩니다. 독립 실행형 작업 모드에서 이 파일은 …​/standalone/configuration/standalone.xml 에 있습니다. 또한 이 파일은 Red Hat Single Sign-On 구성 요소와 관련된 비인프라 수준을 구성하는 데 사용됩니다.

독립 실행형 구성 파일

standalone config file

주의

서버를 실행하는 동안 이 파일을 변경한 내용은 적용되지 않으며 서버에서 덮어쓸 수도 있습니다. 대신 명령줄 스크립팅 또는 JBoss EAP의 웹 콘솔을 사용합니다. 자세한 내용은 JBoss EAP 구성 가이드를 참조하십시오.

3.2. 독립 실행형 클러스터 모드 사용

독립 실행형 클러스터형 작업 모드는 클러스터 내에서 Red Hat Single Sign-On을 실행하려는 경우에 적용됩니다. 이 모드에서는 서버 인스턴스를 실행하려는 각 시스템에 Red Hat Single Sign-On 배포 사본이 있어야 합니다. 이 모드는 처음에 쉽게 배포할 수 있지만 다소 어려움을 겪을 수 있습니다. 구성을 변경하려면 각 머신의 각 배포를 수정합니다. 대규모 클러스터의 경우 이 모드는 시간이 오래 걸리며 오류가 발생할 수 있습니다.

3.2.1. 독립 실행형 클러스터 구성

배포에는 클러스터 내에서 실행하기 위해 주로 사전 구성된 앱 서버 구성 파일이 있습니다. 네트워킹, 데이터베이스, 캐시 및 검색에 대한 모든 특정 인프라 설정이 있습니다. 이 파일은 …​/standalone/configuration/standalone-ha.xml 에 있습니다. 이 설정에서 누락된 몇 가지 사항이 있습니다. 공유 데이터베이스 연결을 구성하지 않고 클러스터에서 Red Hat Single Sign-On을 실행할 수 없습니다. 또한 클러스터 앞에 일부 유형의 로드 밸런서를 배포해야 합니다. 이 가이드의 클러스터링데이터베이스 섹션에서는 이러한 사항을 안내합니다.

Standalone HA Config

standalone ha config file

주의

서버를 실행하는 동안 이 파일을 변경한 내용은 적용되지 않으며 서버에서 덮어쓸 수도 있습니다. 대신 명령줄 스크립팅 또는 JBoss EAP의 웹 콘솔을 사용합니다. 자세한 내용은 JBoss EAP 구성 가이드를 참조하십시오.

3.2.2. 독립 실행형 클러스터 모드로 부팅

동일한 부팅 스크립트를 사용하여 독립 실행형 모드에서와 마찬가지로 Red Hat Single Sign-On을 시작합니다. 차이점은 HA 구성 파일을 가리키도록 추가 플래그를 전달한다는 것입니다.

독립 실행형 클러스터 부팅 스크립트

standalone boot files

서버를 부팅하려면 다음을 수행합니다.

Linux/Unix

Copy to Clipboard Toggle word wrap
$ .../bin/standalone.sh --server-config=standalone-ha.xml

Windows

Copy to Clipboard Toggle word wrap
> ...\bin\standalone.bat --server-config=standalone-ha.xml

주의

Java SE 17을 사용하여 독립 실행형 클러스터형 모드에서 Red Hat Single Sign-On을 실행하려면 번들 스크립트 enable-elytron-se17.cli 를 실행하여 구성을 수정해야 합니다.

Linux/Unix

Copy to Clipboard Toggle word wrap
$ ./bin/jboss-cli.sh --file=docs/examples/enable-elytron-se17.cli -Dconfig=standalone-ha.xml

Windows

Copy to Clipboard Toggle word wrap
> .\bin\jboss-cli.bat --file=docs\examples\enable-elytron-se17.cli "-Dconfig=standalone-ha.xml"

3.3. 도메인 클러스터 모드 사용

도메인 모드는 서버의 구성을 중앙에서 관리하고 게시하는 방법입니다.

표준 모드에서 클러스터를 실행하면 클러스터 크기가 증가함에 따라 빠르게 증가할 수 있습니다. 구성을 변경해야 할 때마다 클러스터의 각 노드에서 수행합니다. 도메인 모드는 구성을 저장하고 게시할 중앙 위치를 제공하여 이 문제를 해결합니다. 설정하는 것은 매우 어려울 수 있지만 결국 가치가 있습니다. 이 기능은 Red Hat Single Sign-On이 파생한 JBoss EAP Application Server에 내장되어 있습니다.

참고

이 가이드에서는 도메인 모드의 기본 사항을 설명합니다. 클러스터에서 도메인 모드를 설정하는 방법에 대한 자세한 단계는 JBoss EAP 구성 가이드를 통해 가져와야 합니다.

다음은 도메인 모드에서 실행하는 몇 가지 기본 개념입니다.

도메인 컨트롤러
도메인 컨트롤러는 클러스터의 각 노드에 대한 일반 구성을 저장, 관리 및 게시하는 프로세스입니다. 이 프로세스는 클러스터의 노드를 구성하는 중심 지점입니다.
호스트 컨트롤러
호스트 컨트롤러는 특정 시스템에서 서버 인스턴스를 관리합니다. 하나 이상의 서버 인스턴스를 실행하도록 구성합니다. 도메인 컨트롤러는 각 시스템의 호스트 컨트롤러와 상호 작용하여 클러스터를 관리할 수도 있습니다. 실행 중인 프로세스 수를 줄이기 위해 도메인 컨트롤러는 실행되는 시스템에서 호스트 컨트롤러 역할을 합니다.
도메인 프로필
도메인 프로필은 서버가 부팅하기 위해 사용할 수 있는 이름 지정된 구성 집합입니다. 도메인 컨트롤러는 다른 서버에서 사용하는 여러 도메인 프로필을 정의할 수 있습니다.
서버 그룹
서버 그룹은 서버의 컬렉션입니다. 관리되고 하나로 구성됩니다. 서버 그룹과 해당 그룹의 모든 서비스에 도메인 프로필을 해당 구성으로 할당할 수 있습니다.

도메인 모드에서 도메인 컨트롤러가 마스터 노드에서 시작됩니다. 클러스터의 구성은 도메인 컨트롤러에 있습니다. 다음으로 호스트 컨트롤러가 클러스터의 각 시스템에서 시작됩니다. 각 호스트 컨트롤러 배포 구성은 해당 시스템에서 시작되는 Red Hat Single Sign-On 서버 인스턴스 수를 지정합니다. 호스트 컨트롤러가 부팅되면 구성된 만큼의 Red Hat Single Sign-On 서버 인스턴스가 시작됩니다. 이러한 서버 인스턴스는 도메인 컨트롤러에서 구성을 가져옵니다.

참고

Microsoft Azure와 같은 일부 환경에서는 도메인 모드를 적용할 수 없습니다. JBoss EAP 설명서를 참조하십시오.

3.3.1. 도메인 구성

이 가이드의 다른 여러 장에서는 데이터베이스, HTTP 네트워크 연결, 캐시 및 기타 인프라와 관련된 다양한 측면을 구성하는 방법을 안내합니다. 독립 실행형 모드는 standalone.xml 파일을 사용하여 이러한 항목을 구성하지만 도메인 모드는 …​/domain/configuration/domain.xml 구성 파일을 사용합니다. 여기에서 Red Hat Single Sign-On 서버의 도메인 프로필 및 서버 그룹이 정의됩니다.

domain.xml

domain file

주의

도메인 컨트롤러가 실행 중인 동안 이 파일을 변경한 경우 적용되지 않으며 서버에서 덮어쓸 수도 있습니다. 대신 명령줄 스크립팅 또는 JBoss EAP의 웹 콘솔을 사용합니다. 자세한 내용은 JBoss EAP 구성 가이드를 참조하십시오.

domain.xml 파일의 일부 측면을 살펴보겠습니다. auth-server-standaloneauth-server-clustered 프로필 XML 블록은 많은 구성 결정을 내립니다. 여기서는 네트워크 연결, 캐시 및 데이터베이스 연결과 같은 항목을 구성할 수 있습니다.

auth-server 프로필

Copy to Clipboard Toggle word wrap
    <profiles>
        <profile name="auth-server-standalone">
            ...
        </profile>
        <profile name="auth-server-clustered">
            ...
        </profile>

auth-server-standalone 프로필은 클러스터되지 않은 설정입니다. auth-server-clustered 프로필은 클러스터형 설정입니다.

아래로 스크롤하여 다양한 socket-binding-groups 이 정의된 것을 확인할 수 있습니다.

socket-binding-groups

Copy to Clipboard Toggle word wrap
    <socket-binding-groups>
        <socket-binding-group name="standard-sockets" default-interface="public">
           ...
        </socket-binding-group>
        <socket-binding-group name="ha-sockets" default-interface="public">
           ...
        </socket-binding-group>
        <!-- load-balancer-sockets should be removed in production systems and replaced with a better software or hardware based one -->
        <socket-binding-group name="load-balancer-sockets" default-interface="public">
           ...
        </socket-binding-group>
    </socket-binding-groups>

이 구성은 각 Red Hat Single Sign-On 서버 인스턴스에서 열린 다양한 커넥터의 기본 포트 매핑을 정의합니다. ${…​} 이 포함된 모든 값은 -D 스위치(예:)를 사용하여 명령줄에서 재정의할 수 있는 값입니다.

Copy to Clipboard Toggle word wrap
$ domain.sh -Djboss.http.port=80

Red Hat Single Sign-On의 서버 그룹 정의는 서버 그룹 XML 블록에 있습니다. 호스트 컨트롤러가 인스턴스를 부팅할 때 사용되는 도메인 프로필(기본값)과 Java VM의 기본 부팅 인수를 지정합니다. 또한 socket-binding-group 을 서버 그룹에 바인딩합니다.

서버 그룹

Copy to Clipboard Toggle word wrap
    <server-groups>
        <!-- load-balancer-group should be removed in production systems and replaced with a better software or hardware based one -->
        <server-group name="load-balancer-group" profile="load-balancer">
            <jvm name="default">
                <heap size="64m" max-size="512m"/>
            </jvm>
            <socket-binding-group ref="load-balancer-sockets"/>
        </server-group>
        <server-group name="auth-server-group" profile="auth-server-clustered">
            <jvm name="default">
                <heap size="64m" max-size="512m"/>
            </jvm>
            <socket-binding-group ref="ha-sockets"/>
        </server-group>
    </server-groups>

3.3.2. 호스트 컨트롤러 구성

Red Hat Single Sign-On에는 …​/domain/configuration/ 디렉터리에 있는 호스트 컨트롤러 구성 파일과 host-master.xmlhost-slave.xml 이 함께 제공됩니다. host-master.xml 은 도메인 컨트롤러, 로드 밸런서 및 하나의 Red Hat Single Sign-On 서버 인스턴스를 부팅하도록 구성됩니다. host-slave.xml 은 도메인 컨트롤러와 통신하고 하나의 Red Hat Single Sign-On 서버 인스턴스를 부팅하도록 구성됩니다.

참고

로드 밸런서는 필수 서비스가 아닙니다. 개발 시스템에서 드라이브 클러스터링을 쉽게 테스트할 수 있도록 합니다. 프로덕션에서 사용할 수 있는 동안 사용하려는 다른 하드웨어 또는 소프트웨어 기반 로드 밸런서가 있는 경우 프로덕션에서 사용할 수 있는 옵션이 있습니다.

호스트 컨트롤러 구성

host files

로드 밸런서 서버 인스턴스를 비활성화하려면 host-master.xml 을 편집하고 "load-balancer" 항목을 주석 처리하거나 제거합니다.

Copy to Clipboard Toggle word wrap
    <servers>
        <!-- remove or comment out next line -->
        <server name="load-balancer" group="loadbalancer-group"/>
        ...
    </servers>

이 파일에 대해 고려해야 할 또 다른 흥미로운 사항은 인증 서버 인스턴스 선언입니다. port-offset 설정이 있습니다. domain.xml socket-binding-group 또는 서버 그룹에 정의된 모든 네트워크 포트에는 port-offset 값이 추가됩니다. 이 샘플 도메인 설정의 경우 로드 밸런서 서버에서 여는 포트가 시작된 인증 서버 인스턴스와 충돌하지 않도록 이 작업을 수행합니다.

Copy to Clipboard Toggle word wrap
    <servers>
        ...
        <server name="server-one" group="auth-server-group" auto-start="true">
             <socket-bindings port-offset="150"/>
        </server>
    </servers>

3.3.3. 서버 인스턴스 작업 디렉터리

호스트 파일에 정의된 각 Red Hat Single Sign-On 서버 인스턴스는 …​/domain/servers/{SERVER NAME} 아래에 작업 디렉터리를 생성합니다. 추가 구성을 배치할 수 있으며, 서버 인스턴스에 필요하거나 생성하는 임시, 로그 또는 데이터 파일도 배치할 수 있습니다. 이러한 아키텍처의 구조는 다른 JBoss EAP 부팅 서버와 유사합니다.

작업 디렉터리

domain server dir

3.3.4. 도메인 클러스터 모드로 부팅

도메인 모드에서 서버를 실행하는 경우 운영 체제에 따라 서버를 부팅하기 위해 를 실행해야 하는 특정 스크립트가 있습니다. 이 스크립트는 서버 배포의 bin/ 디렉터리에 있습니다.

도메인 부팅 스크립트

domain boot files

서버를 부팅하려면 다음을 수행합니다.

Linux/Unix

Copy to Clipboard Toggle word wrap
$ .../bin/domain.sh --host-config=host-master.xml

Windows

Copy to Clipboard Toggle word wrap
> ...\bin\domain.bat --host-config=host-master.xml

부팅 스크립트를 실행할 때 --host-config 스위치를 통해 사용할 호스트 제어 구성 파일을 전달해야 합니다.

주의

Java SE 17을 사용하여 도메인 모드에서 Red Hat Single Sign-On을 실행하려면 번들 스크립트 enable-keycloak-se17-domain.cli 를 실행하여 설정을 수정해야 합니다.

Linux/Unix

Copy to Clipboard Toggle word wrap
$ ./bin/jboss-cli.sh --file=docs/examples/enable-keycloak-se17-domain.cli

Windows

Copy to Clipboard Toggle word wrap
> .\bin\jboss-cli.bat --file=docs\examples\enable-keycloak-se17-domain.cli

3.3.5. 샘플 클러스터 도메인 테스트

샘플 domain.xml 구성을 사용하여 드라이브 클러스터링을 테스트할 수 있습니다. 이 샘플 도메인은 하나의 머신에서 실행되고 부팅하기 위한 것입니다.

  • 도메인 컨트롤러
  • HTTP 로드 밸런서
  • Red Hat Single Sign-On 서버 인스턴스 2개

절차

  1. domain.sh 스크립트를 두 번 실행하여 별도의 호스트 컨트롤러를 두 번 시작합니다.

    첫 번째는 도메인 컨트롤러, HTTP 로드 밸런서 및 하나의 Red Hat Single Sign-On 인증 서버 인스턴스를 시작하는 마스터 호스트 컨트롤러입니다. 두 번째는 인증 서버 인스턴스만 시작하는 슬레이브 호스트 컨트롤러입니다.

  2. 도메인 컨트롤러와 안전하게 통신할 수 있도록 슬레이브 호스트 컨트롤러를 구성합니다. 다음 단계를 수행합니다.

    이러한 단계를 생략하면 슬레이브 호스트는 도메인 컨트롤러에서 중앙 집중식 구성을 가져올 수 없습니다.

    1. 서버 admin 사용자와 마스터와 슬레이브 간에 공유되는 시크릿을 만들어 보안 연결을 설정합니다.

      …​/bin/add-user.sh 스크립트를 실행합니다.

    2. 스크립트에서 추가할 사용자 유형에 대해 묻는 경우 Management User 를 선택합니다.

      이 옵션을 사용하면 …​/domain/configuration/host-slave.xml 파일에 잘라내어 붙여넣는 시크릿이 생성됩니다.

      앱 서버 관리자 추가

      Copy to Clipboard Toggle word wrap
      $ add-user.sh
       What type of user do you wish to add?
        a) Management User (mgmt-users.properties)
        b) Application User (application-users.properties)
       (a): a
       Enter the details of the new user to add.
       Using realm 'ManagementRealm' as discovered from the existing property files.
       Username : admin
       Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
        - The password should not be one of the following restricted values {root, admin, administrator}
        - The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
        - The password should be different from the username
       Password :
       Re-enter Password :
       What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[ ]:
       About to add user 'admin' for realm 'ManagementRealm'
       Is this correct yes/no? yes
       Added user 'admin' to file '/.../standalone/configuration/mgmt-users.properties'
       Added user 'admin' to file '/.../domain/configuration/mgmt-users.properties'
       Added user 'admin' with groups to file '/.../standalone/configuration/mgmt-groups.properties'
       Added user 'admin' with groups to file '/.../domain/configuration/mgmt-groups.properties'
       Is this new user going to be used for one AS process to connect to another AS process?
       e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
       yes/no? yes
       To represent the user add the following to the server-identities definition <secret value="bWdtdDEyMyE=" />

      참고

      add-user.sh 스크립트는 사용자를 Red Hat Single Sign-On 서버에 추가하는 것이 아니라 기본 JBoss Enterprise Application Platform에 추가합니다. 이 스크립트에서 사용되고 생성된 자격 증명은 데모 목적으로만 사용됩니다. 시스템에서 생성된 항목을 사용하십시오.

  3. 다음과 같이 시크릿 값을 …​/domain/configuration/host-slave.xml 파일에 잘라내어 붙여넣습니다.

    Copy to Clipboard Toggle word wrap
         <management>
             <security-realms>
                 <security-realm name="ManagementRealm">
                     <server-identities>
                         <secret value="bWdtdDEyMyE="/>
                     </server-identities>
  4. 생성된 사용자의 사용자 이름을 …​/domain/configuration/host-slave.xml 파일에 추가합니다.

    Copy to Clipboard Toggle word wrap
         <remote security-realm="ManagementRealm" username="admin">
  5. 부팅 스크립트를 두 번 실행하여 한 개발 시스템에서 두 개의 노드 클러스터를 시뮬레이션합니다.

    마스터 부팅

    Copy to Clipboard Toggle word wrap
    $ domain.sh --host-config=host-master.xml

    부팅 슬레이브

    Copy to Clipboard Toggle word wrap
    $ domain.sh --host-config=host-slave.xml

  6. 브라우저를 열고 http://localhost:8080/auth 로 이동하여 사용해 보십시오.

3.4. 사이트 간 복제 모드 사용

Red Hat Single Sign-On 7.2에서 기술 프리뷰 기능으로 도입된 교차 사이트 복제는 최신 RH-SSO 7.6 릴리스를 포함하여 Red Hat SSO 7.x 릴리스에서 지원되는 기능으로 더 이상 사용할 수 없습니다. Red Hat은 지원되지 않으므로 고객이 환경에서 이 기능을 구현하거나 사용하지 않는 것이 좋습니다. 또한 이 기능에 대한 지원 예외는 더 이상 고려되거나 허용되지 않습니다.

Red Hat SSO 8 대신 도입될 제품인 RHBK(Keycloak)의 향후 릴리스를 위해 교차 사이트 복제에 대한 새로운 솔루션이 논의되고 있습니다. 더 자세한 내용은 곧 제공될 예정입니다.

4장. 하위 시스템 구성 관리

Red Hat Single Sign-On의 낮은 수준 구성은 배포 시 standalone.xml,standalone-ha.xml, domain.xml 파일을 편집하여 수행됩니다. 이 파일의 위치는 작동 모드에 따라 다릅니다.

여기에서 구성할 수 있는 무제한 설정이 있지만 이 섹션에서는 keycloak-server 하위 시스템의 구성에 중점을 둡니다. 사용 중인 구성 파일에 관계없이 keycloak-server 하위 시스템의 구성은 동일합니다.

keycloak-server 하위 시스템은 일반적으로 다음과 같이 파일의 끝에 선언됩니다.

Copy to Clipboard Toggle word wrap
<subsystem xmlns="urn:jboss:domain:keycloak-server:1.2">
   <web-context>auth</web-context>
   ...
</subsystem>

이 하위 시스템에서 변경된 내용은 서버가 재부팅될 때까지 적용되지 않습니다.

4.1. SPI 공급자 구성

각 구성 설정의 세부 사항은 해당 설정과 컨텍스트의 다른 위치에서 설명합니다. 그러나 SPI 공급자의 설정을 선언하는 데 사용되는 형식을 이해하는 것이 유용합니다.

Red Hat Single Sign-On은 뛰어난 유연성을 제공하는 모듈식 시스템입니다. 50개 이상의 SPI(서비스 공급자 인터페이스)가 있으며 각 SPI의 구현을 스왑 아웃할 수 있습니다. SPI 구현을 공급자 라고 합니다.

SPI 선언의 모든 요소는 선택 사항이지만 전체 SPI 선언은 다음과 같습니다.

Copy to Clipboard Toggle word wrap
<spi name="myspi">
    <default-provider>myprovider</default-provider>
    <properties>
        <property name="spi-foo" value="spi-bar"/>
    </properties>
    <provider name="myprovider" enabled="true">
        <properties>
            <property name="foo" value="bar"/>
        </properties>
    </provider>
    <provider name="mysecondprovider" enabled="true">
        <properties>
            <property name="foo" value="foo"/>
        </properties>
    </provider>
</spi>

여기에서 SPI myspi 에 대해 두 개의 공급 업체가 정의되어 있습니다. default-providermyprovider 로 나열됩니다. 그러나 SPI는 이 설정을 처리하는 방법을 결정합니다. 일부 SPI는 둘 이상의 공급자를 허용하고 일부는 그렇지 않습니다. 따라서 default-provider 는 SPI를 선택하는 데 도움이 될 수 있습니다.

SPI 속성을 사용하여 SPI별 구성 속성을 지정할 수 있습니다. 예를 들어 사용자,클라이언트역할 SPI를 사용하면 다음과 같이 storageProviderTimeout 속성을 통해 스토리지 공급자 시간 초과를 밀리초 단위로 구성할 수 있습니다.

Copy to Clipboard Toggle word wrap
<spi name="user">
    <properties>
        <property name="storageProviderTimeout" value="10000"/>
    </properties>
</spi>

또한 각 공급자는 고유한 구성 속성 집합을 정의합니다. 위의 두 공급자 모두 foo 라는 속성이 있다는 사실은 일치 항목일 뿐입니다.

각 속성 값의 유형은 공급자가 해석합니다. 그러나 한 가지 예외가 있습니다. eventsStore SPI의 jpa 공급자를 고려하십시오.

Copy to Clipboard Toggle word wrap
<spi name="eventsStore">
    <provider name="jpa" enabled="true">
        <properties>
            <property name="exclude-events" value="[&quot;EVENT1&quot;,
                                                    &quot;EVENT2&quot;]"/>
        </properties>
    </provider>
</spi>

값이 대괄호로 시작되고 끝나는 것을 확인할 수 있습니다. 즉, 값이 공급자에게 목록으로 전달됩니다. 이 예에서 시스템은 공급자에게 두 개의 요소 값이 있는 목록을 전달합니다. 목록에 더 많은 값을 추가하려면 각 목록 요소를 쉼표로 구분하기만 하면 됩니다. 슬프게도 각 목록 요소를 따옴표로 이스케이프해야 합니다.

사용자 정의 공급자 및 공급자 구성에 대한 자세한 내용은 서버 개발자 가이드 의 단계를 따르십시오.

4.2. JBoss EAP CLI 시작

구성을 직접 편집하는 것 외에도 jboss-cli 툴을 통해 명령을 실행하여 구성을 변경하는 옵션도 있습니다. CLI를 사용하면 로컬 또는 원격으로 서버를 구성할 수 있습니다. 스크립팅과 결합할 때 특히 유용합니다.

JBoss EAP CLI를 시작하려면 jboss-cli 를 실행해야 합니다.

Linux/Unix

Copy to Clipboard Toggle word wrap
$ .../bin/jboss-cli.sh

Windows

Copy to Clipboard Toggle word wrap
> ...\bin\jboss-cli.bat

그러면 다음과 같은 프롬프트가 표시됩니다.

prompt

Copy to Clipboard Toggle word wrap
[disconnected /]

실행 중인 서버에서 명령을 실행하려면 먼저 connect 명령을 실행합니다.

연결

Copy to Clipboard Toggle word wrap
[disconnected /] connect
connect
[standalone@localhost:9990 /]

"I did not enter in any username or password!" 자신을 생각할 수 있습니다. 실행 중인 독립 실행형 서버 또는 도메인 컨트롤러와 동일한 시스템에서 jboss-cli 를 실행하고 계정에 적절한 파일 권한이 있는 경우, 관리자 사용자 이름 및 암호를 설정하거나 입력할 필요가 없습니다. 해당 설정에 문제가 있을 경우 보다 안전하게 작업을 수행하는 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드를 참조하십시오.

4.3. CLI 포함 모드

독립 실행형 서버와 동일한 머신에 있고 서버가 활성 상태가 아닌 동안 명령을 실행하려는 경우 서버를 CLI에 포함시키고 들어오는 요청을 허용하지 않는 특수 모드를 변경할 수 있습니다. 이렇게 하려면 먼저 변경하려는 구성 파일을 사용하여 embed-server 명령을 실행합니다.

embed-server

Copy to Clipboard Toggle word wrap
[disconnected /] embed-server --server-config=standalone.xml
[standalone@embedded /]

4.4. CLI GUI 모드 사용

CLI는 GUI 모드에서도 실행할 수 있습니다. GUI 모드는 실행 중인 서버의 전체 관리 모델을 그래픽으로 보고 편집할 수 있는 Swing 애플리케이션을 시작합니다. GUI 모드는 CLI 명령을 포맷하고 사용 가능한 옵션에 대해 학습하는 데 도움이 필요한 경우 특히 유용합니다. GUI는 로컬 또는 원격 서버에서 서버 로그를 검색할 수도 있습니다.

절차

  1. GUI 모드에서 CLI 시작

    Copy to Clipboard Toggle word wrap
    $ .../bin/jboss-cli.sh --gui

    참고: 원격 서버에 연결하려면 --connect 옵션도 전달합니다. 자세한 내용은 --help 옵션을 사용합니다.

  2. 아래로 스크롤하여 노드 subsystem=keycloak-server 를 찾습니다.
  3. 노드를 마우스 오른쪽 버튼으로 클릭하고 Explore subsystem=keycloak-server 를 선택합니다.

    새 탭에는 keycloak-server 하위 시스템만 표시됩니다.

    Keycloak-server 하위 시스템

    keycloak-server subsystem

4.5. CLI 스크립팅

CLI에는 광범위한 스크립팅 기능이 있습니다. 스크립트는 CLI 명령이 있는 텍스트 파일일 뿐입니다. 주제 및 템플릿 캐싱을 해제하는 간단한 스크립트를 고려하십시오.

turn-off-caching.cli

Copy to Clipboard Toggle word wrap
/subsystem=keycloak-server/theme=defaults/:write-attribute(name=cacheThemes,value=false)
/subsystem=keycloak-server/theme=defaults/:write-attribute(name=cacheTemplates,value=false)

스크립트를 실행하려면 CLI GUI의 스크립트 메뉴를 따르거나 다음과 같이 명령줄에서 스크립트를 실행할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ .../bin/jboss-cli.sh --file=turn-off-caching.cli

4.6. CLI 레시피

다음은 몇 가지 설정 작업과 CLI 명령으로 수행하는 방법입니다. 첫 번째 예제에서는 와일드카드 경로 ** 를 사용하여 또는 경로를 keycloak-server 하위 시스템으로 대체해야 함을 의미합니다.

독립 실행형의 경우 다음을 의미합니다.

** = /subsystem=keycloak-server

도메인 모드의 경우 이는 다음과 같습니다.

** = /profile=auth-server-clustered/subsystem=keycloak-server

4.6.1. 서버의 웹 컨텍스트 변경

Copy to Clipboard Toggle word wrap
/subsystem=keycloak-server/:write-attribute(name=web-context,value=myContext)

4.6.2. 글로벌 기본 주제 설정

Copy to Clipboard Toggle word wrap
**/theme=defaults/:write-attribute(name=default,value=myTheme)

4.6.3. 새 SPI 및 공급자 추가

Copy to Clipboard Toggle word wrap
**/spi=mySPI/:add
**/spi=mySPI/provider=myProvider/:add(enabled=true)

4.6.4. 공급자 비활성화

Copy to Clipboard Toggle word wrap
**/spi=mySPI/provider=myProvider/:write-attribute(name=enabled,value=false)

4.6.5. SPI의 기본 공급자 변경

Copy to Clipboard Toggle word wrap
**/spi=mySPI/:write-attribute(name=default-provider,value=myProvider)

4.6.6. SPI의 단일 속성 값 추가 또는 변경

Copy to Clipboard Toggle word wrap
**/spi=mySPI/:map-put(name=properties, key=storageProviderTimeout, value=10000)

4.6.7. SPI에서 단일 속성 제거

Copy to Clipboard Toggle word wrap
**/spi=mySPI/:map-remove(name=properties, key=storageProviderTimeout)

4.6.8. dblock SPI 구성

Copy to Clipboard Toggle word wrap
**/spi=dblock/:add(default-provider=jpa)
**/spi=dblock/provider=jpa/:add(properties={lockWaitTimeout => "900"},enabled=true)

4.6.9. 공급자에 대한 단일 속성 값 추가 또는 변경Adding or changing a single property value for a provider

Copy to Clipboard Toggle word wrap
**/spi=dblock/provider=jpa/:map-put(name=properties,key=lockWaitTimeout,value=3)

4.6.10. 공급자에서 단일 속성 제거

Copy to Clipboard Toggle word wrap
**/spi=dblock/provider=jpa/:map-remove(name=properties,key=lockRecheckTime)

4.6.11. 유형 List의 공급자 속성에서 값 설정

Copy to Clipboard Toggle word wrap
**/spi=eventsStore/provider=jpa/:map-put(name=properties,key=exclude-events,value=[EVENT1,EVENT2])

5장. profiles

Red Hat Single Sign-On에는 기본적으로 활성화되어 있지 않으며 완전히 지원되지 않는 기능이 포함되어 있습니다. 또한 기본적으로 활성화되어 있지만 비활성화할 수 있는 몇 가지 기능이 있습니다.

활성화 및 비활성화할 수 있는 기능은 다음과 같습니다.

이름설명기본적으로 활성화되어 있습니다.지원 수준

account2

새 계정 관리 콘솔

제공됨

지원됨

account_api

계정 관리 REST API

제공됨

지원됨

admin_fine_grained_authz

세분화된 관리자 권한

없음

Preview

ciba

OpenID Connect Client Initiated Backchannel Authentication (CIBA)

제공됨

지원됨

client_policies

클라이언트 구성 정책 추가

제공됨

지원됨

client_secret_rotation

기밀 클라이언트에 대해 클라이언트 시크릿 순환 가능

제공됨

Preview

페르

OAuth 2.0 푸시된 권한 부여 요청(PAR)

제공됨

지원됨

declarative_user_profile

선언적 스타일을 사용하여 사용자 프로필 구성

없음

Preview

docker

Docker 레지스트리 프로토콜

없음

지원됨

impersonation

관리자가 사용자를 가장할 수 있는 기능

제공됨

지원됨

openshift_integration

OpenShift 보안을 위한 확장

없음

Preview

recovery_codes

인증을 위한 복구 코드

없음

Preview

scripts

JavaScript를 사용하여 사용자 정의 인증 도구 작성

없음

Preview

step_up_authentication

단계별 인증

제공됨

지원됨

token_exchange

토큰 교환 서비스

없음

Preview

upload_scripts

스크립트 업로드

없음

더 이상 사용되지 않음

web_authn

W3C 웹 인증(WebAuthn)

제공됨

지원됨

update_email

이메일 워크플로 업데이트

없음

Preview

모든 프리뷰 기능을 활성화하려면 다음을 사용하여 서버를 시작합니다.

Copy to Clipboard Toggle word wrap
bin/standalone.sh|bat -Dkeycloak.profile=preview

standalone/configuration/profile.properties 파일(또는 도메인 모드에서 server-one 에 대한 domain/servers/server-one/configuration/profile.properties )을 생성하여 이를 영구적으로 설정할 수 있습니다. 파일에 다음을 추가합니다.

Copy to Clipboard Toggle word wrap
profile=preview

특정 기능을 활성화하려면 다음을 사용하여 서버를 시작합니다.

Copy to Clipboard Toggle word wrap
bin/standalone.sh|bat -Dkeycloak.profile.feature.<feature name>=enabled

예를 들어 Docker 사용을 사용하려면 -Dkeycloak.profile.feature.docker=enabled.

다음을 추가하여 profile.properties 파일에서 이 작업을 영구적으로 설정할 수 있습니다.

Copy to Clipboard Toggle word wrap
feature.docker=enabled

특정 기능을 비활성화하려면 다음을 사용하여 서버를 시작합니다.

Copy to Clipboard Toggle word wrap
bin/standalone.sh|bat -Dkeycloak.profile.feature.<feature name>=disabled

예를 들어 Impersonation을 비활성화하려면 -Dkeycloak.profile.feature.impersonation=disabled 를 사용합니다.

다음을 추가하여 profile.properties 파일에서 이 작업을 영구적으로 설정할 수 있습니다.

Copy to Clipboard Toggle word wrap
feature.impersonation=disabled

6장. 관계형 데이터베이스 설정

Red Hat Single Sign-On에는 H2라는 자체 내장 Java 기반 관계형 데이터베이스가 함께 제공됩니다. 이는 Red Hat Single Sign-On에서 데이터를 유지하는 데 사용하는 기본 데이터베이스이며 기본적으로 인증 서버를 실행할 수 있도록만 존재합니다.

H2 데이터베이스는 예시적인 목적으로만 사용됩니다. 이는 지원되는 데이터베이스가 아니므로 데이터베이스 마이그레이션에 대해 테스트되지 않았습니다. 프로덕션이 준비된 외부 데이터베이스로 교체하는 것이 좋습니다. H2 데이터베이스는 높은 동시성 상황에서 매우 실행 가능하지 않으며 클러스터에서도 사용해서는 안 됩니다. 이 장의 목적은 Red Hat Single Sign-On을 보다 성숙한 데이터베이스에 연결하는 방법을 보여주는 것입니다.

Red Hat Single Sign-On은 두 개의 계층 기술을 사용하여 관계형 데이터를 유지합니다. 하위 계층 기술은 JDBC입니다. JDBC는 RDBMS에 연결하는 데 사용되는 Java API입니다. 데이터베이스 벤더가 제공하는 데이터베이스 유형마다 다양한 JDBC 드라이버가 있습니다. 이 장에서는 이러한 벤더별 드라이버 중 하나를 사용하도록 Red Hat Single Sign-On을 구성하는 방법을 설명합니다.

지속성을 위한 상위 계층 기술은 CloudEvent JPA입니다. 이는 Java 오브젝트를 관계 데이터에 매핑하는 관계 매핑 API에 대한 객체입니다. Red Hat Single Sign-On의 대부분의 배포는 iPXE의 구성 측면을 건드리지 않지만 드문 경우 실행하는 경우 어떻게 수행되는지 논의할 것입니다.

참고

데이터 소스 구성은 JBoss EAP 구성 가이드 의 데이터 소스 구성 장에서 훨씬 더 철저하게 다룹니다.

6.1. 데이터베이스 설정 체크리스트

Red Hat Single Sign-On에 대해 구성된 RDBMS를 가져오기 위한 단계는 다음과 같습니다.

  1. 데이터베이스에 대한 JDBC 드라이버 검색 및 다운로드
  2. 드라이버 JAR를 모듈에 패키지하고 이 모듈을 서버에 설치합니다.
  3. 서버의 구성 프로필에 JDBC 드라이버 선언
  4. 데이터베이스의 JDBC 드라이버를 사용하도록 데이터 소스 구성을 수정
  5. 데이터 소스 구성을 수정하여 데이터베이스에 대한 연결 매개 변수를 정의합니다.

이 장에서는 모든 예제에 PostgresSQL을 사용합니다. 다른 데이터베이스는 설치를 위해 동일한 단계를 따릅니다.

6.2. JDBC 드라이버 패키징

RDBMS용 JDBC 드라이버 JAR을 찾아 다운로드합니다. 이 드라이버를 사용하려면 먼저 모듈에 패키지하여 서버에 설치해야 합니다. 모듈은 Red Hat Single Sign-On 클래스 경로에 로드되는 JAR과 다른 모듈에 있는 JAR을 정의합니다.

절차

  1. Red Hat Single Sign-On 배포의 …​/modules/ 디렉터리에 모듈 정의를 저장할 디렉터리 구조를 생성합니다.

    이 규칙은 디렉터리 구조의 이름에 JDBC 드라이버의 Java 패키지 이름을 사용합니다. PostgreSQL의 경우 org/postgresql/main 디렉터리를 생성합니다.

  2. 데이터베이스 드라이버 JAR를 이 디렉터리에 복사하고 여기에 빈 module.xml 파일도 생성합니다.

    모듈 디렉터리

    Module Directory

  3. module.xml 파일을 열고 다음 XML을 생성합니다.

    모듈 XML

    Copy to Clipboard Toggle word wrap
    <?xml version="1.0" encoding="UTF-8"?>
    <module xmlns="urn:jboss:module:1.3" name="org.postgresql">
    
        <resources>
            <resource-root path="postgresql-VERSION.jar"/>
        </resources>
    
        <dependencies>
            <module name="javax.api"/>
            <module name="javax.transaction.api"/>
        </dependencies>
    </module>

    • 모듈 이름은 모듈의 디렉터리 구조와 일치해야 합니다. 따라서 org/postgresqlorg.postgresql 에 매핑됩니다.
    • resource-root path 속성은 드라이버의 JAR 파일 이름을 지정해야 합니다.
    • 나머지는 JDBC 드라이버 JAR에서 가질 수 있는 일반 종속 항목일 뿐입니다.

6.3. JDBC 드라이버 선언 및 로드

서버가 부팅될 때 로드되고 사용 가능하게 되도록 JDBC를 배포 프로필에 선언합니다.

사전 요구 사항

JDBC 드라이버를 패키징했습니다.

절차

  1. 배포 모드에 따라 이러한 파일 중 하나를 편집하여 JDBC 드라이버를 선언합니다.

    • 독립 실행형 모드의 경우 …​/standalone/configuration/standalone.xml 을 편집합니다.
    • 독립 실행형 클러스터링 모드의 경우 …​/standalone/configuration/standalone-ha.xml 을 편집합니다.
    • 도메인 모드의 경우 …​/domain/configuration/domain.xml.xml을 편집합니다.

      도메인 모드에서 사용 중인 프로필( auth-server-standalone 또는 auth-server-clustered)을 편집해야 합니다.

  2. 프로필 내에서 datasources 하위 시스템 내의 드라이버 XML 블록을 검색합니다.

    H2 JDBC 드라이버에 대해 선언된 사전 정의 드라이버가 표시되어야 합니다. 여기에서 외부 데이터베이스에 대한 JDBC 드라이버를 선언할 수 있습니다.

    JDBC Drivers

    Copy to Clipboard Toggle word wrap
      <subsystem xmlns="urn:jboss:domain:datasources:6.0">
         <datasources>
           ...
           <drivers>
              <driver name="h2" module="com.h2database.h2">
                  <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
              </driver>
           </drivers>
         </datasources>
      </subsystem>

  3. drivers XML 블록 내에서 추가 JDBC 드라이버를 선언합니다.

    • 이 드라이버에 이름을 지정합니다.
    • 드라이버 JAR용으로 이전에 생성한 모듈 패키지를 가리키는 module 속성을 지정합니다.
    • 드라이버의 Java 클래스를 지정합니다.

      다음은 이 장의 앞부분에서 정의한 모듈 예제에 있는 PostgreSQL 드라이버를 설치하는 예입니다.

      JDBC 드라이버 선언

      Copy to Clipboard Toggle word wrap
        <subsystem xmlns="urn:jboss:domain:datasources:6.0">
           <datasources>
             ...
             <drivers>
                <driver name="postgresql" module="org.postgresql">
                    <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
                </driver>
                <driver name="h2" module="com.h2database.h2">
                    <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                </driver>
             </drivers>
           </datasources>
        </subsystem>

6.4. Red Hat Single Sign-On 데이터 소스 수정

Red Hat Single Sign-On에서 새 외부 데이터베이스에 연결하는 데 사용하는 기존 데이터 소스 구성을 수정합니다. JDBC 드라이버를 등록한 것과 동일한 구성 파일 및 XML 블록 내에서 이 작업을 수행합니다. 새 데이터베이스에 대한 연결을 설정하는 예제는 다음과 같습니다.

JDBC 드라이버 선언

Copy to Clipboard Toggle word wrap
  <subsystem xmlns="urn:jboss:domain:datasources:6.0">
     <datasources>
       ...
       <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
           <connection-url>jdbc:postgresql://localhost/keycloak</connection-url>
           <driver>postgresql</driver>
           <pool>
               <max-pool-size>20</max-pool-size>
           </pool>
           <security>
               <user-name>William</user-name>
               <password>password</password>
           </security>
       </datasource>
        ...
     </datasources>
  </subsystem>

사전 요구 사항

  • JDBC 드라이버를 이미 선언했습니다.

절차

  1. KeycloakDS대한 데이터 소스 정의를 검색합니다.

    먼저 connection-url 을 수정해야 합니다. 공급 업체의 JDBC 구현 설명서에서는 이 연결 URL 값의 형식을 지정해야 합니다.

  2. 사용할 드라이버 를 정의합니다.

    이 장의 이전 섹션에서 선언한 JDBC 드라이버의 논리 이름입니다.

    트랜잭션을 수행할 때마다 데이터베이스에 대한 새 연결을 여는 것은 비용이 많이 듭니다. 데이터 소스 구현은 개방형 연결 풀을 유지 관리합니다. max-pool-size 는 풀의 최대 연결 수를 지정합니다. 시스템 로드에 따라 이 값을 변경할 수 있습니다.

  3. 데이터베이스에 연결하는 데 필요한 데이터베이스 사용자 이름 및 암호를 정의합니다. 이 단계는 적어도 PostgreSQL에 필요합니다. 이러한 인증 정보는 예제에서 일반 텍스트라고 우려할 수 있습니다. 이러한 인증 정보를 난독 처리하는 방법은 있지만 이러한 방법은 이 가이드의 범위를 벗어납니다.
참고

데이터 소스 기능에 대한 자세한 내용은 JBoss EAP 구성 가이드의 데이터 소스 구성 장 을 참조하십시오.

6.5. 데이터베이스 설정

이 구성 요소의 구성은 배포의 standalone.xml,standalone-ha.xml 또는 domain.xml 파일에서 확인할 수 있습니다. 이 파일의 위치는 작동 모드에 따라 다릅니다.

데이터베이스 구성

Copy to Clipboard Toggle word wrap
<subsystem xmlns="urn:jboss:domain:keycloak-server:1.2">
    ...
    <spi name="connectionsJpa">
     <provider name="default" enabled="true">
         <properties>
             <property name="dataSource" value="java:jboss/datasources/KeycloakDS"/>
             <property name="initializeEmpty" value="false"/>
             <property name="migrationStrategy" value="manual"/>
             <property name="migrationExport" value="${jboss.home.dir}/keycloak-database-update.sql"/>
         </properties>
     </provider>
    </spi>
    ...
</subsystem>

가능한 구성 옵션은 다음과 같습니다.

dataSource
dataSource의 JNDI 이름입니다.
jta
데이터 소스가 JTA를 사용할 수 있는지 여부를 지정하는 부울 속성
driverDialect
데이터베이스 다이브릭의 값. 대부분의 경우 iPXE에 의해 자동으로 감지되므로 이 속성을 지정할 필요가 없습니다.
initializeEmpty
비어 있는 경우 데이터베이스를 초기화합니다. false로 설정하면 데이터베이스를 수동으로 초기화해야 합니다. 데이터베이스 세트 migrationStrategy를 수동으로 초기화 하려면 SQL 명령으로 데이터베이스를 초기화하는 파일을 수동으로 생성합니다. 기본값은 true입니다.
migrationStrategy
데이터베이스를 마이그레이션하는 데 사용하는 전략입니다. 유효한 값은 update,manualvalidate 입니다. update는 데이터베이스 스키마를 자동으로 마이그레이션합니다. Manual은 데이터베이스에서 수동으로 실행할 수 있는 SQL 명령을 사용하여 파일에 필요한 변경 사항을 내보냅니다. validate는 데이터베이스가 최신 상태인지 간단히 확인합니다.
migrationExport
수동 데이터베이스 초기화/마이그레이션 파일을 작성할 위치입니다.
showSql
iPXE가 콘솔의 모든 SQL 명령을 표시해야 하는지 여부를 지정합니다(기본적으로 false). 이것은 매우 자세한 사항입니다!
formatSql
iPXE가 SQL 명령을 포맷해야하는지 여부를 지정 (기본적으로 true)
globalStatsInterval
실행된 DB 쿼리 및 기타 사항에 대한 iPXE의 글로벌 통계를 기록합니다. 통계는 지정된 간격(초)에 항상 서버 로그에 보고되며 각 보고서 후에 삭제됩니다.
schema
사용할 데이터베이스 스키마 지정
참고

이러한 구성 스위치는 JBoss EAP 개발 가이드에 설명되어 있습니다.

6.6. 데이터베이스에 대한 유니코드 고려 사항

Red Hat Single Sign-On의 데이터베이스 스키마는 다음과 같은 특수 필드의 유니코드 문자열만 계정합니다.

  • realms: 표시 이름, HTML 표시 이름, 지역화 텍스트(키 및 값)
  • 페더레이션 공급자: 표시 이름
  • users: 사용자 이름, 이름, 성, 특성 이름 및 값
  • groups: 이름, 특성 이름 및 값
  • 역할: 이름
  • 오브젝트에 대한 설명

그렇지 않으면 문자가 8비트인 데이터베이스 인코딩에 포함된 문자로 제한됩니다. 그러나 일부 데이터베이스 시스템의 경우 유니코드 문자의 UTF-8 인코딩을 활성화하고 모든 텍스트 필드에서 전체 유니코드 문자 집합을 사용할 수 있습니다. 종종 이 값은 8비트 인코딩의 경우보다 짧은 문자열 길이로 조정됩니다.

일부 데이터베이스에서는 유니코드 문자를 처리할 수 있도록 데이터베이스 및/또는 JDBC 드라이버에 대한 특수 설정이 필요합니다. 아래에서 데이터베이스에 대한 설정을 찾으십시오. 데이터베이스가 여기에 나열되어 있는 경우 데이터베이스 및 JDBC 드라이버 수준에서 UTF-8 인코딩을 올바르게 처리하는 경우에도 제대로 작동할 수 있습니다.

기술적으로 모든 필드에 대한 유니코드 지원의 주요 기준은 데이터베이스에서 VARCHAR 및ECDHE 필드에 대한 유니코드 문자 세트를 설정할 수 있는지 여부입니다. 그렇지 않으면 일반적으로 유니코드가 필드 길이를 대신할 가능성이 높습니다. NVARCHARNCHAR 필드에서 유니코드만 지원하는 경우 모든 텍스트 필드에 대한 유니코드 지원은 Keycloak 스키마에서 VARCHAR 및ECDHE 필드를 광범위하게 사용하므로 거의 없습니다.

6.6.1. Oracle 데이터베이스

유니코드 문자는 데이터베이스가 VARCHAR 및ECDHE 필드에서 유니코드 지원을 사용하여 생성됨(예: AL32UTF8 문자 세트를 데이터베이스 문자 세트로 사용하여) 생성되었을 때 올바르게 처리됩니다. JDBC 드라이버에는 특별한 설정이 필요하지 않습니다.

데이터베이스 문자 집합이 유니코드가 아닌 경우 특수 필드에서 유니코드 문자를 사용하려면 연결 속성 oracle.jdbc.defaultNChartrue 로 설정하여 JDBC 드라이버를 구성해야 합니다. 또한 oracle.jdbc.convertNcharLiterals 연결 속성을 true 로 설정하는 것이 엄격하게 필요하지는 않을 수 있습니다. 이러한 속성은 시스템 속성 또는 연결 속성으로 설정할 수 있습니다. oracle.jdbc.defaultNChar 설정은 성능에 부정적인 영향을 미칠 수 있습니다. 자세한 내용은 Oracle JDBC 드라이버 구성 설명서를 참조하십시오.

6.6.2. Microsoft SQL Server 데이터베이스

유니코드 문자는 특수 필드에 대해서만 올바르게 처리됩니다. JDBC 드라이버 또는 데이터베이스의 특별한 설정은 필요하지 않습니다.

6.6.3. MySQL 데이터베이스

유니코드 문자가 올바르게 처리되면 데이터베이스가 CREATE CloudEvent 명령의 VARCHAR 및ECDHE 필드에서 유니코드 지원을 사용하여 생성되었습니다(예: MySQL 5.5에서 기본 데이터베이스 문자 세트로 utf8 문자 집합을 사용하여 사용). utf8mb4 문자 세트는 utf8 문자 세트와 다른 스토리지 요구 사항으로 인해 작동하지 않습니다. [1]). 이 경우 바이트가 아닌 지정된 수의 문자를 수용하기 위해 열이 생성되었기 때문에 비특별 필드에 대한 길이 제한이 적용되지 않습니다. 데이터베이스 기본 문자 집합이 유니코드 저장을 허용하지 않는 경우 특수 필드만 유니코드 값을 저장할 수 있습니다.

JDBC 드라이버 설정 측에서 연결 속성 characterEncoding=UTF-8 을 JDBC 연결 설정에 추가해야 합니다.

6.6.4. PostgreSQL 데이터베이스

데이터베이스 문자 집합이 UTF8 인 경우 유니코드가 지원됩니다. 이 경우 유니코드 문자를 모든 필드에서 사용할 수 있으며 특수하지 않은 필드에는 필드 길이를 줄일 수 없습니다. JDBC 드라이버의 특별한 설정은 필요하지 않습니다.

PostgreSQL 데이터베이스의 문자 세트는 생성될 때 결정됩니다. SQL 명령을 사용하여 PostgreSQL 클러스터의 기본 문자 집합을 확인할 수 있습니다.

Copy to Clipboard Toggle word wrap
show server_encoding;

기본 문자 집합이 UTF 8이 아닌 경우 다음과 같이 UTF8을 문자 세트로 사용하여 데이터베이스를 생성할 수 있습니다.

Copy to Clipboard Toggle word wrap
create database keycloak with encoding 'UTF8';

7장. 공용 호스트 이름 사용

Red Hat Single Sign-On은 여러 항목에 대해 공용 호스트 이름을 사용합니다. 예를 들어 토큰 발행자 필드 및 암호 재설정 이메일로 전송된 URL입니다.

Hostname SPI는 요청에 대한 호스트 이름을 구성하는 방법을 제공합니다. 기본 공급자를 사용하면 프런트 엔드 요청에 대해 고정 URL을 설정하는 동시에 요청 URI를 기반으로 백엔드 요청을 허용할 수 있습니다. 또한 내장 공급자가 필요한 기능을 제공하지 않는 경우 자체 공급자를 개발할 수도 있습니다.

7.1. 기본 공급자

기본 호스트 이름 공급자는 구성된 frontendUrl (사용자 에이전트에서 요청)의 기본 URL을 사용하고(클라이언트의 직접 요청) 요청 URL을 기반으로 사용합니다.

프런트 엔드 요청은 Keycloak 서버와 동일한 컨텍스트 경로를 가질 필요가 없습니다. 즉, 내부적으로 해당 URL은 https://10.0.0.10:8080/auth 이지만 https://auth.example.org 또는 https://example.org/keycloak 와 같이 Keycloak을 노출할 수 있습니다.

그러면 내부 클라이언트가 내부 도메인 이름 또는 IP 주소를 사용할 수 있는 반면 브라우저의 사용자는 공개 도메인 이름을 통해 Red Hat Single Sign-On에 요청을 보낼 수 있습니다.

이는 OpenID Connect 검색 끝점에 반영되며, 여기에는 authorization_endpoint 에서 프런트 엔드 URL을 사용하는 반면 token_endpoint 는 백엔드 URL을 사용합니다. 여기에서 인스턴스의 공용 클라이언트는 공용 끝점을 통해 Keycloak에 연결하므로 authorization_endpointtoken_endpoint 의 기반이 동일합니다.

Keycloak에 대한 frontendUrl을 설정하려면 add -Dkeycloak.frontendUrl=https://auth.example.org 를 시작으로 전달하거나 standalone.xml 에서 구성할 수 있습니다. 아래 예제를 참조하십시오.

Copy to Clipboard Toggle word wrap
<spi name="hostname">
    <default-provider>default</default-provider>
    <provider name="default" enabled="true">
        <properties>
            <property name="frontendUrl" value="https://auth.example.com"/>
            <property name="forceBackendUrlToFrontendUrl" value="false"/>
        </properties>
    </provider>
</spi>

jboss-cli로 frontendUrl 을 업데이트하려면 다음 명령을 사용합니다.

Copy to Clipboard Toggle word wrap
/subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=properties.frontendUrl,value="https://auth.example.com")

모든 요청이 공용 도메인 이름을 통과하도록 하려면 forceBackendUrlToFrontendUrltrue 로 설정하여 백엔드 요청에서 프런트 엔드 URL을 사용하도록 강제 적용할 수 있습니다.

개별 영역의 기본 프런트 엔드 URL을 재정의할 수도 있습니다. 이 작업은 관리자 콘솔에서 수행할 수 있습니다.

공개 도메인에 관리자 끝점과 콘솔을 노출하지 않으려면 adminUrl 속성을 사용하여 admin 콘솔의 고정 URL을 설정합니다. 이 URL은 frontendUrl 과 다릅니다. 또한 서버 관리 가이드를 참조하는 방법에 대한 자세한 내용은 외부에서 /auth/admin 에 대한 액세스를 차단해야 합니다.

7.2. 사용자 정의 공급자

사용자 지정 호스트 이름 공급자를 개발하려면 org.keycloak.urls.HostnameProvider y 및 org.keycloak.urls.HostnameProvider 를 구현해야 합니다.

사용자 지정 공급자를 개발하는 방법에 대한 자세한 내용은 서버 개발자 가이드 의 서비스 공급자 인터페이스 섹션에 있는 지침을 따르십시오.

8장. 네트워크 설정

Red Hat Single Sign-On의 기본 설치는 몇 가지 네트워킹 제한으로 실행할 수 있습니다. 하나는 모든 네트워크 엔드포인트가 localhost 에 바인딩되므로 auth 서버는 하나의 로컬 시스템에서만 사용할 수 있습니다. HTTP 기반 연결의 경우 80 및 443과 같은 기본 포트를 사용하지 않습니다. HTTPS/SSL은 기본적으로 구성되지 않았으며 Red Hat Single Sign-On에는 많은 보안 취약점이 있습니다. 마지막으로 Red Hat Single Sign-On은 외부 서버에 대한 보안 SSL 및 HTTPS 연결을 수행해야 하므로 엔드포인트를 올바르게 검증할 수 있도록 신뢰 저장소를 설정해야 합니다. 이 장에서는 이 모든 것에 대해 설명합니다.

8.1. 바인딩 주소

기본적으로 Red Hat Single Sign-On은 localhost 루프백 주소 127.0.0.1 에 바인딩됩니다. 네트워크에서 인증 서버를 사용할 수 있도록 하려는 경우 유용한 기본값이 아닙니다. 일반적으로 공용 네트워크에 역방향 프록시 또는 로드 밸런서를 배포하고 사설 네트워크의 개별 Red Hat Single Sign-On 서버 인스턴스로 트래픽을 라우팅하는 것이 좋습니다. 그러나 두 경우 모두 localhost 이외의 다른 항목에 바인딩하도록 네트워크 인터페이스를 설정해야 합니다.

바인딩 주소를 설정하는 것은 매우 간단하며 명령줄에서 운영 모드 선택 장에 설명된 standalone.sh 또는 domain.sh 부팅 스크립트를 사용하여 수행할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ standalone.sh -b 192.168.0.5

-b 스위치는 모든 공용 인터페이스의 IP 바인딩 주소를 설정합니다.

또는 명령줄에서 바인딩 주소를 설정하지 않으려면 배포의 프로필 구성을 편집할 수 있습니다. 프로필 구성 파일(standalone.xml 또는 운영 모드에따라 domain.xml )을 열고 interfaces XML 블록을 찾습니다.

Copy to Clipboard Toggle word wrap
    <interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
        </interface>
        <interface name="public">
            <inet-address value="${jboss.bind.address:127.0.0.1}"/>
        </interface>
    </interfaces>

공용 인터페이스는 공개적으로 사용 가능한 소켓을 생성하는 하위 시스템에 해당합니다. 이러한 하위 시스템 중 하나의 예로는 Red Hat Single Sign-On의 인증 엔드포인트를 제공하는 웹 계층이 있습니다. 관리 인터페이스는 JBoss EAP의 관리 계층에서 개설한 소켓에 해당합니다. 특히 jboss-cli.sh 명령줄 인터페이스와 JBoss EAP 웹 콘솔을 사용할 수 있는 소켓입니다.

공용 인터페이스를 보면 특수 문자열 ${jboss.bind.address:127.0.0.1} 이 있습니다. 이 문자열은 Java 시스템 속성(예:)을 설정하여 명령줄에서 재정의할 수 있는 값 127.0.0.1 을 나타냅니다.

Copy to Clipboard Toggle word wrap
$ domain.sh -Djboss.bind.address=192.168.0.5

b는 이 명령에 대한 간단한 표기법입니다. 따라서 프로필 구성에서 직접 바인딩 주소 값을 변경하거나 부팅 시 명령줄에서 변경할 수 있습니다.

참고

인터페이스 정의를 설정할 때 더 많은 옵션을 사용할 수 있습니다. 자세한 내용은 JBoss EAP 구성 가이드 의 네트워크 인터페이스를 참조하십시오.

8.2. 소켓 포트 바인딩

각 소켓에 대해 열린 포트에는 명령줄 또는 구성 내에서 재정의할 수 있는 사전 정의된 기본값이 있습니다. 이 구성을 설명하기 위해 독립 실행형 모드에서 실행 중인 것으로 가정하고 …​/standalone/configuration/standalone.xml. socket-binding-group 을 검색합니다.

Copy to Clipboard Toggle word wrap
    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
        <socket-binding name="http" port="${jboss.http.port:8080}"/>
        <socket-binding name="https" port="${jboss.https.port:8443}"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
        <outbound-socket-binding name="mail-smtp">
            <remote-destination host="localhost" port="25"/>
        </outbound-socket-binding>
    </socket-binding-group>

socket-bindings 는 서버가 열 수 있는 소켓 연결을 정의합니다. 이러한 바인딩은 사용하는 인터페이스 (바인 주소)와 열 포트 번호를 지정합니다. 가장 관심이 있는 대상은 다음과 같습니다.

http
Red Hat Single Sign-On HTTP 연결에 사용되는 포트를 정의합니다.
https
Red Hat Single Sign-On HTTPS 연결에 사용되는 포트를 정의합니다.
ajp
이 소켓 바인딩은 10.0.0.1 프로토콜에 사용되는 포트를 정의합니다. 이 프로토콜은 Apache HTTPD를 로드 밸런서로 사용할 때 mod-cluster 를 함께 사용하여 Apache HTTPD 서버에서 사용합니다.
management-http
JBoss EAP CLI 및 웹 콘솔에서 사용하는 HTTP 연결을 정의합니다.

도메인 모드에서 실행하는 경우, 예제 domain.xml 파일에 여러 socket-binding-groups 이 정의되어 있기 때문에 소켓 구성을 설정하는 것은 약간 더 어렵습니다. server-group 정의까지 아래로 스크롤하면 각 server-group 에 대해 사용되는 socket-binding-group 을 볼 수 있습니다.

도메인 소켓 바인딩

Copy to Clipboard Toggle word wrap
    <server-groups>
        <server-group name="load-balancer-group" profile="load-balancer">
            ...
            <socket-binding-group ref="load-balancer-sockets"/>
        </server-group>
        <server-group name="auth-server-group" profile="auth-server-clustered">
            ...
            <socket-binding-group ref="ha-sockets"/>
        </server-group>
    </server-groups>

참고

socket-binding-group 정의를 설정할 때 더 많은 옵션을 사용할 수 있습니다. 자세한 내용은 JBoss EAP 구성 가이드 의 소켓 바인딩 그룹을 참조하십시오.

8.3. HTTPS/SSL

주의

Red Hat Single Sign-On은 기본적으로 SSL/HTTPS를 처리하도록 설정되어 있지 않습니다. Red Hat Single Sign-On 서버 자체에서 SSL을 활성화하거나 Red Hat Single Sign-On 서버 앞에 있는 역방향 프록시를 사용하는 것이 좋습니다.

이 기본 동작은 각 Red Hat Single Sign-On 영역의 SSL/HTTPS 모드로 정의됩니다. 이 내용은 서버 관리 가이드에서 자세히 설명하지만 일부 컨텍스트와 이러한 모드에 대한 간략한 개요를 제공합니다.

외부 요청
Red Hat Single Sign-On은 localhost,127.0.0.1,10.x.x.x,192.168.x.x, 172.16.x.x 와 같은 개인 IP 주소를 고정하지 않고 SSL 없이 바로 실행할 수 있습니다. 서버에 SSL/HTTPS가 구성되어 있지 않거나 개인 IP 주소에서 Red Hat Single Sign-On over HTTP에 액세스하려고 하면 오류가 발생합니다.
none
Red Hat Single Sign-On에는 SSL이 필요하지 않습니다. 이는 실제로 개발 환경에서 문제가 발생하는 경우에만 사용해야 합니다.
모든 요청
Red Hat Single Sign-On은 모든 IP 주소에 대해 SSL이 필요합니다.

각 영역의 SSL 모드는 Red Hat Single Sign-On 관리 콘솔에서 구성할 수 있습니다.

8.4. Red Hat Single Sign-On 서버에 HTTPS/SSL 활성화

역방향 프록시 또는 로드 밸런서를 사용하여 HTTPS 트래픽을 처리하지 않는 경우 Red Hat Single Sign-On 서버에 대해 HTTPS를 활성화해야 합니다. 여기에는 다음이 포함됩니다.

  1. SSL/HTTP 트래픽을 위한 개인 키 및 인증서가 포함된 키 저장소 가져오기 또는 생성
  2. 이 키 쌍과 인증서를 사용하도록 Red Hat Single Sign-On 서버 구성.

8.4.1. 인증서 및 Java 키 저장소 생성

HTTPS 연결을 허용하려면 자체 서명된 인증서 또는 타사 서명된 인증서를 가져와 Red Hat Single Sign-On Server를 배포하는 웹 컨테이너에서 HTTPS를 활성화하기 전에 Java 키 저장소로 가져와야 합니다.

8.4.1.1. 자체 서명된 인증서

개발 시 Red Hat Single Sign-On 배포를 테스트하는 데 사용할 수 있는 타사 서명 인증서가 없으므로 Java JDK와 함께 제공되는 keytool 유틸리티를 사용하여 자체 서명된 인증서를 생성해야 합니다.

Copy to Clipboard Toggle word wrap
$ keytool -genkey -alias localhost -keyalg RSA -keystore keycloak.jks -validity 10950
    Enter keystore password: secret
    Re-enter new password: secret
    What is your first and last name?
    [Unknown]:  localhost
    What is the name of your organizational unit?
    [Unknown]:  Keycloak
    What is the name of your organization?
    [Unknown]:  Red Hat
    What is the name of your City or Locality?
    [Unknown]:  Westford
    What is the name of your State or Province?
    [Unknown]:  MA
    What is the two-letter country code for this unit?
    [Unknown]:  US
    Is CN=localhost, OU=Keycloak, O=Test, L=Westford, ST=MA, C=US correct?
    [no]:  yes

무엇이 첫 번째이자 마지막 이름인지 질문이 표시되면 서버를 설치하는 시스템의 DNS 이름을 제공하십시오. 테스트를 위해 localhost 를 사용해야 합니다. 이 명령을 실행하면 에서 keytool 명령을 실행한 것과 동일한 디렉터리에 keycloak.jks 파일이 생성됩니다.

타사 서명 인증서를 원하지만 존재하지 않는 경우 cacert.org 에서 무료로 사용할 수 있습니다. 그러나 먼저 다음 절차를 사용해야 합니다.

절차

  1. 인증서 요청을 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ keytool -certreq -alias yourdomain -keystore keycloak.jks > keycloak.careq

    여기서 yourdomain 은 이 인증서가 생성되는 DNS 이름입니다. keytool은 요청을 생성합니다.

    Copy to Clipboard Toggle word wrap
    -----BEGIN NEW CERTIFICATE REQUEST-----
    MIIC2jCCAcICAQAwZTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAk1BMREwDwYDVQQHEwhXZXN0Zm9y
    ZDEQMA4GA1UEChMHUmVkIEhhdDEQMA4GA1UECxMHUmVkIEhhdDESMBAGA1UEAxMJbG9jYWxob3N0
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr7kck2TaavlEOGbcpi9c0rncY4HhdzmY
    Ax2nZfq1eZEaIPqI5aTxwQZzzLDK9qbeAd8Ji79HzSqnRDxNYaZu7mAYhFKHgixsolE3o5Yfzbw1
    29RvyeUVe+WZxv5oo9wolVVpdSINIMEL2LaFhtX/c1dqiqYVpfnvFshZQaIg2nL8juzZcBjj4as
    H98gIS7khql/dkZKsw9NLvyxgJvp7PaXurX29fNf3ihG+oFrL22oFyV54BWWxXCKU/GPn61EGZGw
    Ft2qSIGLdctpMD1aJR2bcnlhEjZKDksjQZoQ5YMXaAGkcYkG6QkgrocDE2YXDbi7GIdf9MegVJ35
    2DQMpwIDAQABoDAwLgYJKoZIhvcNAQkOMSEwHzAdBgNVHQ4EFgQUQwlZJBA+fjiDdiVzaO9vrE/i
    n2swDQYJKoZIhvcNAQELBQADggEBAC5FRvMkhal3q86tHPBYWBuTtmcSjs4qUm6V6f63frhveWHf
    PzRrI1xH272XUIeBk0gtzWo0nNZnf0mMCtUBbHhhDcG82xolikfqibZijoQZCiGiedVjHJFtniDQ
    9bMDUOXEMQ7gHZg5q6mJfNG9MbMpQaUVEEFvfGEQQxbiFK7hRWU8S23/d80e8nExgQxdJWJ6vd0X
    MzzFK6j4Dj55bJVuM7GFmfdNC52pNOD5vYe47Aqh8oajHX9XTycVtPXl45rrWAH33ftbrS8SrZ2S
    vqIFQeuLL3BaHwpl3t7j2lMWcK1p80laAxEASib/fAwrRHpLHBXRcq6uALUOZl4Alt8=
    -----END NEW CERTIFICATE REQUEST-----
  2. 이 CA 요청을 CA(인증 기관)로 보냅니다.

    CA는 서명된 인증서를 발행하여 사용자에게 보냅니다.

  3. CA의 루트 인증서를 가져와 가져옵니다.

    CA(즉, root.crt)에서 인증서를 다운로드하고 다음과 같이 가져올 수 있습니다.

    Copy to Clipboard Toggle word wrap
    $ keytool -import -keystore keycloak.jks -file root.crt -alias root
  4. 새 CA 생성 인증서를 키 저장소로 가져옵니다.

    Copy to Clipboard Toggle word wrap
    $ keytool -import -alias yourdomain -keystore keycloak.jks -file your-certificate.cer

8.4.2. 키 저장소를 사용하도록 Red Hat Single Sign-On 구성

이제 적절한 인증서가 있는 Java 키 저장소가 있으므로 이를 사용하도록 Red Hat Single Sign-On 설치를 구성해야 합니다. 설치에 적용되는 구성 절차를 사용합니다.

8.4.2.1. JBoss Security Legacy

절차

  1. 키 저장소를 사용하고 HTTPS를 활성화하도록 standalone.xml,standalone-ha.xml 또는 host.xml 파일을 편집합니다.
  2. 키 저장소 파일을 배포의 구성 디렉터리 또는 선택한 위치에 있는 파일로 이동하여 절대 경로를 제공합니다.

    절대 경로를 사용하는 경우 구성에서 선택적 relative-to 매개 변수를 제거합니다( 운영 모드참조).

  3. JBoss EAP의 bin 디렉토리에 sso_legacy.cli 라는 배치 파일을 만듭니다.
  4. 배치 파일에 다음 내용을 추가합니다.

    Copy to Clipboard Toggle word wrap
    # Start batching commands
    
    batch
    
    /core-service=management/security-realm=UndertowRealm:add()
    /core-service=management/security-realm=UndertowRealm/server-identity=ssl:add(keystore-path=keycloak.jks, keystore-relative-to=jboss.server.config.dir, keystore-password=secret)
    /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=security-realm, value=UndertowRealm)
    
    # Run the batch commands
    
    run-batch
  5. Red Hat Single Sign-On 서버를 시작합니다.
  6. JBoss EAP의 bin 디렉토리로 변경합니다.
  7. 다음 스크립트를 실행합니다.

    Copy to Clipboard Toggle word wrap
    $ sh jboss-cli.sh --connect --file=sso_legacy.cli
    
    The batch executed successfully
    process-state: reload-required
  8. sso_legacy.cli 변경 사항이 적용되도록 Red Hat Single Sign-On 서버를 다시 시작합니다.
8.4.2.2. Elytron TLS v1.2

절차

  1. JBoss EAP의 bin 디렉토리에 sso.cli 라는 배치 파일을 생성합니다.
  2. 배치 파일에 다음 내용을 추가합니다.

    Copy to Clipboard Toggle word wrap
    # Start batching commands
    
    batch
    
    # Add the keystore, key manager and ssl context configuration in the elytron subsystem
    
    /subsystem=elytron/key-store=httpsKS:add(relative-to=jboss.server.config.dir,path=keycloak.jks,credential-reference={clear-text=secret},type=JKS)
    /subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS,credential-reference={clear-text=secret})
    /subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=httpsKM,protocols=["TLSv1.2"])
    
    # Change the undertow subsystem configuration to use the ssl context defined in the previous step for https
    
    /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm)
    /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=httpsSSC)
    
    # Run the batch commands
    
    run-batch
  3. Red Hat Single Sign-On 서버를 시작합니다.
  4. JBoss EAP의 bin 디렉토리로 변경합니다.
  5. 다음 스크립트를 실행합니다.

    Copy to Clipboard Toggle word wrap
    $ sh jboss-cli.sh --connect --file=sso.cli
    
    The batch executed successfully
    process-state: reload-required
  6. sso.cli 변경 사항이 적용되도록 Red Hat Single Sign-On 서버를 다시 시작합니다.

TLS 구성에 대한 자세한 내용은 WildFly 문서를 참조하십시오.

8.4.2.3. Elytron TLS 1.3

절차

  1. JBoss EAP의 bin 디렉토리에 sso.cli 라는 배치 파일을 생성합니다.
  2. 배치 파일에 다음 내용을 추가합니다.

    Copy to Clipboard Toggle word wrap
    batch
    
    # Add the keystore, key manager and ssl context configuration in the elytron subsystem
    /subsystem=elytron/key-store=httpsKS:add(relative-to=jboss.server.config.dir,path=keycloak.jks,credential-reference={clear-text=secret},type=JKS)
    /subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS,credential-reference={clear-text=secret})
    
    
    /subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=httpsKM,protocols=["TLSv1.3"])
    /subsystem=elytron/server-ssl-context=httpsSSC:write-attribute(name=cipher-suite-names,value=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256)
    
    # Change the undertow subsystem configuration to use the ssl context defined in the previous step for https
    
    /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm)
    /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=httpsSSC)
    
    # Run the batch commands
    
    run-batch
  3. Red Hat Single Sign-On 서버를 시작합니다.
  4. JBoss EAP의 bin 디렉토리로 변경합니다.
  5. 다음 스크립트를 실행합니다.

    Copy to Clipboard Toggle word wrap
    $ sh jboss-cli.sh --connect --file=sso.cli
    
    The batch executed successfully
    process-state: reload-required
  6. sso.cli 변경 사항이 적용되도록 Red Hat Single Sign-On 서버를 다시 시작합니다.

TLS 구성에 대한 자세한 내용은 WildFly 문서를 참조하십시오.

8.5. 발신 HTTP 요청

Red Hat Single Sign-On 서버는 보호되는 애플리케이션 및 서비스에 대해 브라우저 이외의 HTTP 요청을 수행해야 하는 경우가 많습니다. auth 서버는 HTTP 클라이언트 연결 풀을 유지 관리하여 발신 연결을 관리합니다. standalone.xml,standalone-ha.xml 또는 domain.xml 에서 구성해야 할 몇 가지 사항이 있습니다. 이 파일의 위치는 작동 모드에 따라 다릅니다.

HTTP 클라이언트 구성 예

Copy to Clipboard Toggle word wrap
<spi name="connectionsHttpClient">
    <provider name="default" enabled="true">
        <properties>
            <property name="connection-pool-size" value="256"/>
        </properties>
    </provider>
</spi>

가능한 구성 옵션은 다음과 같습니다.

establish-connection-timeout-millis
소켓 연결을 설정하는 데 필요한 시간 초과입니다.
socket-timeout-millis
발신 요청에서 이 시간 동안 데이터를 수신하지 못하면 연결 시간 초과입니다.
connection-pool-size
풀에 있을 수 있는 연결 수(기본적으로 128개) 수입니다.
max-pooled-per-route
호스트당 풀링할 수 있는 연결 수입니다(기본적으로 64개).
connection-ttl-millis
최대 연결 시간(밀리초)입니다. 기본적으로 설정되지 않습니다.
max-connection-idle-time-millis
연결이 연결 풀에서 유휴 상태를 유지할 수 있는 최대 시간(기본적으로 900초). Apache HTTP 클라이언트의 백그라운드 정리 스레드를 시작합니다. 이 검사 및 백그라운드 스레드를 비활성화하려면 -1 로 설정합니다.
disable-cookies
기본적으로 true 입니다. true로 설정하면 모든 쿠키 캐싱이 비활성화됩니다.
client-keystore
Java 키 저장소 파일의 파일 경로입니다. 이 키 저장소에는 양방향 SSL에 대한 클라이언트 인증서가 포함되어 있습니다.
client-keystore-password
클라이언트 키 저장소의 암호입니다. client-keystore 가 설정된 경우 REQUIRED 입니다.
client-key-password
클라이언트 키의 암호입니다. client-keystore 가 설정된 경우 REQUIRED 입니다.
proxy-mappings
발신 HTTP 요청에 대한 프록시 구성을 나타냅니다. 자세한 내용은 HTTP 요청의 프록시 매핑 섹션을 참조하십시오.
disable-trust-manager
발신 요청에 HTTPS가 필요하며 이 구성 옵션이 true 로 설정된 경우 truststore를 지정할 필요가 없습니다. 이 설정은 개발 중에만 사용해야 하며, SSL 인증서 확인을 비활성화하므로 프로덕션에서는 사용하지 않아야 합니다. 이것은 선택 사항입니다. 기본값은 false입니다.

8.5.1. 발신 HTTP 요청에 대한 프록시 매핑

Red Hat Single Sign-On에서 보낸 발신 HTTP 요청은 선택적으로 프록시 매핑의 쉼표로 구분된 목록을 기반으로 프록시 서버를 사용할 수 있습니다. proxy-mapping은 hostnamePattern;proxyUri 형식으로 regex 기반 호스트 이름 패턴과 proxy-uri의 조합을 나타냅니다. 예를 들면 다음과 같습니다.

Copy to Clipboard Toggle word wrap
.*\.(google|googleapis)\.com;http://www-proxy.acme.com:8080

나가는 HTTP 요청의 프록시를 확인하기 위해 대상 호스트 이름이 구성된 호스트 이름 패턴과 일치합니다. 첫 번째 일치 패턴은 사용할 proxy-uri를 결정합니다. 지정된 호스트 이름과 일치하는 패턴이 없는 경우 프록시가 사용되지 않습니다.

프록시 서버에 인증이 필요한 경우 이 형식의 proxy 사용자 자격 증명을 username:password@. 예를 들면 다음과 같습니다.

Copy to Clipboard Toggle word wrap
.*\.(google|googleapis)\.com;http://user01:pas2w0rd@www-proxy.acme.com:8080

proxy-uri의 특수 값 NO_PROXY 를 사용하여 연결된 호스트 이름 패턴과 일치하는 호스트에 프록시를 사용하지 않아야 함을 나타낼 수 있습니다. 프록시 매핑 끝에 catch-all 패턴을 지정하여 나가는 모든 요청에 대한 기본 프록시를 정의할 수 있습니다.

다음 예제는 프록시 매핑 구성을 보여줍니다.

Copy to Clipboard Toggle word wrap
# All requests to Google APIs should use http://www-proxy.acme.com:8080 as proxy
.*\.(google|googleapis)\.com;http://www-proxy.acme.com:8080

# All requests to internal systems should use no proxy
.*\.acme\.com;NO_PROXY

# All other requests should use http://fallback:8080 as proxy
.*;http://fallback:8080

이는 다음 jboss-cli 명령을 통해 구성할 수 있습니다. 다음과 같이 regex-pattern을 올바르게 이스케이프해야 합니다.

Copy to Clipboard Toggle word wrap
echo SETUP: Configure proxy routes for HttpClient SPI

# In case there is no connectionsHttpClient definition yet
/subsystem=keycloak-server/spi=connectionsHttpClient/provider=default:add(enabled=true)

# Configure the proxy-mappings
/subsystem=keycloak-server/spi=connectionsHttpClient/provider=default:write-attribute(name=properties.proxy-mappings,value=[".*\\.(google|googleapis)\\.com;http://www-proxy.acme.com:8080",".*\\.acme\\.com;NO_PROXY",".*;http://fallback:8080"])

jboss-cli 명령을 실행하면 다음과 같은 하위 시스템 구성이 생성됩니다. " 문자를 "로 인코딩해야 합니다.

Copy to Clipboard Toggle word wrap
<spi name="connectionsHttpClient">
    <provider name="default" enabled="true">
        <properties>
            <property
            name="proxy-mappings"
            value="[&quot;.*\\.(google|googleapis)\\.com;http://www-proxy.acme.com:8080&quot;,&quot;.*\\.acme\\.com;NO_PROXY&quot;,&quot;.*;http://fallback:8080&quot;]"/>
        </properties>
    </provider>
</spi>

8.5.2. 표준 환경 변수 사용

또는 표준 환경 변수를 사용하여 HTTP_PROXY,HTTPS_PROXYNO_PROXY 변수인 프록시 매핑을 구성할 수 있습니다.

HTTP_PROXYHTTPS_PROXY 변수는 나가는 모든 HTTP 요청에 사용해야 하는 프록시 서버를 나타냅니다. Red Hat Single Sign-On은 둘 간에 차이가 없습니다. 둘 다 지정하면 프록시 서버가 사용하는 실제 체계에 관계없이 HTTPS_PROXY 가 우선 순위를 갖습니다.

NO_PROXY 변수는 프록시를 사용하지 않아야 하는 쉼표로 구분된 호스트 이름 목록을 정의하는 데 사용됩니다. 호스트 이름이 지정되면 모든 접두사(subdomains)도 proxy 사용에서 제외됩니다.

다음 예제를 참조하십시오.

Copy to Clipboard Toggle word wrap
HTTPS_PROXY=https://www-proxy.acme.com:8080
NO_PROXY=google.com,login.facebook.com

이 예에서 나가는 모든 HTTP 요청은 login.google.com,google.com,auth.login.facebook.com 과 같은 요청을 제외하고 https://www-proxy.acme.com:8080 프록시 서버를 사용합니다. 그러나 예를 들어 groups.facebook.com 은 프록시를 통해 라우팅됩니다.

참고

환경 변수는 소문자 또는 대문자일 수 있습니다. 소문자가 우선합니다. 예를 들어 HTTP_PROXYhttp_proxy 가 모두 정의되면 http_proxy 가 사용됩니다.

위에 설명된 대로 하위 시스템 구성을 사용하여 프록시 매핑을 정의하는 경우 환경 변수는 Red Hat Single Sign-On에서 고려하지 않습니다. 이 시나리오는 정의된 HTTP_PROXY 환경 변수의 보유에도 불구하고 프록시 서버를 사용하지 않는 경우에 적용됩니다. 이를 위해 다음과 같이 일반 프록시 경로를 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
<spi name="connectionsHttpClient">
    <provider name="default" enabled="true">
        <properties>
            <property name="proxy-mappings" value=".*;NO_PROXY"/>
        </properties>
    </provider>
</spi>

8.5.3. 발신 HTTPS 요청 신뢰 저장소

Red Hat Single Sign-On이 원격 HTTPS 엔드포인트에서 호출되면 원격 서버의 인증서가 신뢰할 수 있는 서버에 연결되어 있는지 확인해야 합니다. 이는 메시지 가로채기(man-in-the-middle) 공격을 방지하기 위해 필요합니다. 이러한 원격 서버 또는 이러한 인증서에 서명한 CA의 인증서는 신뢰 저장소에 배치해야 합니다. 이 신뢰 저장소는 Red Hat Single Sign-On 서버에서 관리합니다.

신뢰의 구성은 항상 Red Hat Single Sign-On 신뢰 저장소 SPI에서 수행합니다. 이 섹션의 지침은 JBoss Security Legacy 또는 Elytron TLS로 키 저장소를 구성한 경우 적용됩니다.

신뢰 저장소는 ID 브로커, LDAP ID 공급자, 이메일을 보낼 때, 클라이언트 애플리케이션과 백채널 통신할 때 사용됩니다.

주의

기본적으로 신뢰 저장소 공급자는 구성되지 않으며 Java의 JSSE 참조 가이드에 설명된 대로 https 연결은 표준 java truststore 구성으로 대체됩니다. 설정된 신뢰가 없으면 발신되는 HTTPS 요청이 실패합니다.

keytool 을 사용하여 새 신뢰 저장소 파일을 생성하거나 신뢰할 수 있는 호스트 인증서를 기존에 추가할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ keytool -import -alias HOSTDOMAIN -keystore truststore.jks -file host-certificate.cer

신뢰 저장소는 배포의 standalone.xml,standalone-ha.xml 또는 domain.xml 파일 내에 구성됩니다. 이 파일의 위치는 작동 모드에 따라 다릅니다. 다음 템플릿을 사용하여 신뢰 저장소 구성을 추가할 수 있습니다.

Copy to Clipboard Toggle word wrap
<spi name="truststore">
    <provider name="file" enabled="true">
        <properties>
            <property name="file" value="path to your .jks file containing public certificates"/>
            <property name="password" value="password"/>
            <property name="hostname-verification-policy" value="WILDCARD"/>
        </properties>
    </provider>
</spi>

이 설정에 사용 가능한 구성 옵션은 다음과 같습니다.

file
Java 키 저장소 파일의 경로입니다. HTTPS 요청은 통신 중인 서버의 호스트를 확인하는 방법이 필요합니다. 이것이 신뢰가 하는 것입니다. 키 저장소에는 하나 이상의 신뢰할 수 있는 호스트 인증서 또는 인증 기관이 포함됩니다. 이 신뢰 저장소 파일에는 보안 호스트의 공용 인증서만 포함되어야 합니다. 이러한 속성이 정의된 경우 REQUIRED 입니다.
암호
키 저장소의 암호입니다. 이러한 속성이 정의된 경우 REQUIRED 입니다.
hostname-verification-policy
기본적으로 WILDCARD 입니다. HTTPS 요청의 경우 서버 인증서의 호스트 이름을 확인합니다. 어떠한 경우에도 호스트 이름이 확인되지 않음을 의미합니다. WILDCARD 는 하위 도메인 이름(예: *.foo.com)에서 와일드카드를 허용합니다. STRICT CN은 호스트 이름과 정확히 일치해야 합니다.

9장. 클러스터에서 실행되도록 Red Hat Single Sign-On 구성

클러스터에서 실행되도록 Red Hat Single Sign-On을 구성하려면 다음 작업을 수행합니다.

이 가이드의 앞부분에서 작업 모드를 선택하고 공유 데이터베이스 구성에 대해 설명합니다. 이 장에서는 로드 밸런서를 설정하고 프라이빗 네트워크를 제공하고 클러스터에서 호스트를 부팅하는 방법을 설명합니다.

참고

IP Multicast 없이 Red Hat Single Sign-On을 클러스터할 수 있지만 이 내용은 이 가이드의 범위를 벗어납니다. 자세한 내용은 JBoss EAP 구성 가이드의 iPXE 장을 참조하십시오. https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.4/html-single/configuration_guide/#cluster_communication_jgroups

9.2. 클러스터링 예

Red Hat Single Sign-On에는 도메인 모드를 활용하는 즉시 사용할 수 있는 클러스터링 데모가 포함되어 있습니다. 자세한 내용은 클러스터 도메인 예제 장을 참조하십시오.

9.3. 로드 밸런서 또는 프록시 설정

이 섹션에서는 클러스터된 Red Hat Single Sign-On 배포 앞에 역방향 프록시 또는 로드 밸런서를 배치하기 전에 설정해야 할 여러 가지 사항에 대해 설명합니다. 또한 클러스터된 도메인 예제 인 기본 제공 로드 밸런서를 구성하는 방법을 설명합니다.

다음 다이어그램에서는 로드 밸런서의 사용을 보여줍니다. 이 예에서 로드 밸런서는 3개의 클라이언트와 3개의 Red Hat Single Sign-On 서버 클러스터 간의 역방향 프록시 역할을 합니다.

로드 밸런서 다이어그램의 예

load balancer

9.3.1. 클라이언트 IP 주소 식별

Red Hat Single Sign-On의 몇 가지 기능은 인증 서버에 연결된 HTTP 클라이언트의 원격 주소가 클라이언트 시스템의 실제 IP 주소라는 사실에 의존합니다. 예를 들면 다음과 같습니다.

  • 이벤트 로그 - 실패한 로그인 시도가 잘못된 소스 IP 주소로 기록됨
  • SSL 필수 - 필요한 SSL이 외부(기본값)로 설정된 경우 모든 외부 요청에 대해 SSL이 필요합니다.
  • 인증 흐름 - IP 주소를 사용하여 예를 들어 외부 요청에 대한 OTP만 표시하는 사용자 정의 인증 흐름
  • 동적 클라이언트 등록

이는 Red Hat Single Sign-On 인증 서버 앞에 역방향 프록시 또는 로드 밸런서가 있는 경우 문제가 될 수 있습니다. 일반적인 설정은 사설 네트워크에 있는 Red Hat Single Sign-On 서버 인스턴스의 백엔드에 요청을 로드 밸런싱 및 전달하는 공용 네트워크에 프런트 엔드 프록시가 있다는 것입니다. 이 시나리오에서는 Red Hat Single Sign-On 서버 인스턴스에서 실제 클라이언트 IP 주소를 전달 및 처리하도록 몇 가지 추가 구성이 있습니다. 특히 다음 내용에 유의하십시오.

  • X-Forwarded-ForX-Forwarded-Proto HTTP 헤더를 올바르게 설정하도록 역방향 프록시 또는 로드 밸런서를 구성합니다.
  • 원래 'Host' HTTP 헤더를 유지하도록 역방향 프록시 또는 로드 밸런서를 구성합니다.
  • X-Forwarded-For 헤더에서 클라이언트의 IP 주소를 읽도록 인증 서버를 구성합니다.

X-Forwarded-ForX-Forwarded-Proto HTTP 헤더를 생성하고 원래 Host HTTP 헤더를 유지하도록 프록시를 구성하는 것은 이 가이드의 범위를 벗어납니다. 프록시에 X-Forwarded-For 헤더를 설정했는지 확인하기 위해 추가 예방 조치를 취해야 합니다. 프록시가 올바르게 구성되지 않은 경우 잘못된 클라이언트가 이 헤더를 직접 설정하고 Red Hat Single Sign-On을 사용하여 클라이언트가 실제로 있는 것과 다른 IP 주소에서 연결하는 것으로 간주할 수 있습니다. 이는 IP 주소의 블랙리스트 또는 흰색 목록을 수행하는 경우 매우 중요합니다.

프록시 외에도 Red Hat Single Sign-On 측에서 구성해야 할 몇 가지 사항이 있습니다. 프록시가 HTTP 프로토콜을 통해 요청을 전달하는 경우 네트워크 패킷이 아닌 X-Forwarded-For 헤더에서 클라이언트의 IP 주소를 가져오도록 Red Hat Single Sign-On을 구성해야 합니다. 이렇게 하려면 운영 모드에따라 프로필 구성 파일(standalone.xml,standalone-ha.xml, domain.xml 또는 domain.xml)을 열고 urn:jboss:domain:undertow:12.0 XML 블록을 찾습니다.

X-Forwarded-For HTTP Config

Copy to Clipboard Toggle word wrap
<subsystem xmlns="urn:jboss:domain:undertow:12.0">
   <buffer-cache name="default"/>
   <server name="default-server">
      <ajp-listener name="ajp" socket-binding="ajp"/>
      <http-listener name="default" socket-binding="http" redirect-socket="https"
          proxy-address-forwarding="true"/>
      ...
   </server>
   ...
</subsystem>

proxy-address-forwarding 특성을 http-listener 요소에 추가합니다. 값을 true 로 설정합니다.

프록시에서 요청 전달(예: Apache HTTPD + mod-cluster) 대신 HTTP 프로토콜을 사용하는 경우 작업을 약간 다르게 구성해야 합니다. http-listener 를 수정하는 대신 filter를 추가하여 이 정보를 10.0.0.1 패킷에서 가져와야 합니다.

X-Forwarded-For AJP Config

Copy to Clipboard Toggle word wrap
<subsystem xmlns="urn:jboss:domain:undertow:12.0">
     <buffer-cache name="default"/>
     <server name="default-server">
         <ajp-listener name="ajp" socket-binding="ajp"/>
         <http-listener name="default" socket-binding="http" redirect-socket="https"/>
         <host name="default-host" alias="localhost">
             ...
             <filter-ref name="proxy-peer"/>
         </host>
     </server>
        ...
     <filters>
         ...
         <filter name="proxy-peer"
                 class-name="io.undertow.server.handlers.ProxyPeerAddressHandler"
                 module="io.undertow.core" />
     </filters>
 </subsystem>

9.3.2. 역방향 프록시를 사용하여 HTTPS/SSL 활성화

역방향 프록시가 SSL에 포트 8443을 사용하지 않는 경우 HTTPS 트래픽이 리디렉션되는 포트를 구성해야 합니다.

Copy to Clipboard Toggle word wrap
<subsystem xmlns="urn:jboss:domain:undertow:12.0">
    ...
    <http-listener name="default" socket-binding="http"
        proxy-address-forwarding="true" redirect-socket="proxy-https"/>
    ...
</subsystem>

절차

  1. redirect-socket 특성을 http-listener 요소에 추가합니다. 값은 또한 정의해야 하는 소켓 바인딩을 가리키는 proxy-https 여야 합니다.
  2. socket-binding - group 요소에 새 socket-binding 요소를 추가합니다.

    Copy to Clipboard Toggle word wrap
    <socket-binding-group name="standard-sockets" default-interface="public"
        port-offset="${jboss.socket.binding.port-offset:0}">
        ...
        <socket-binding name="proxy-https" port="443"/>
        ...
    </socket-binding-group>

9.3.3. 구성 확인

역방향 프록시 또는 로드 밸런서 구성을 확인할 수 있습니다.

절차

  1. 역방향 프록시를 통해 /auth/realms/master/.well-known/openid-configuration 경로를 엽니다.

    예를 들어 역방향 프록시 주소가 https://acme.com/ 인 경우 URL https://acme.com/auth/realms/master/.well-known/openid-configuration 를 엽니다. Red Hat Single Sign-On의 여러 엔드포인트가 나열된 JSON 문서가 표시됩니다.

  2. 역방향 프록시 또는 로드 밸런서의 주소(scheme, 도메인 및 포트)로 끝점이 시작되는지 확인합니다. 이렇게 하면 Red Hat Single Sign-On이 올바른 끝점을 사용하고 있는지 확인합니다.
  3. Red Hat Single Sign-On이 요청에 대해 올바른 소스 IP 주소가 표시되는지 확인합니다.

    이를 확인하려면 잘못된 사용자 이름 및/또는 암호를 사용하여 관리 콘솔에 로그인할 수 있습니다. 서버 로그에 다음과 같은 경고가 표시됩니다.

    Copy to Clipboard Toggle word wrap
    08:14:21,287 WARN  XNIO-1 task-45 [org.keycloak.events] type=LOGIN_ERROR, realmId=master, clientId=security-admin-console, userId=8f20d7ba-4974-4811-a695-242c8fbd1bf8, ipAddress=X.X.X.X, error=invalid_user_credentials, auth_method=openid-connect, auth_type=code, redirect_uri=http://localhost:8080/auth/admin/master/console/?redirect_fragment=%2Frealms%2Fmaster%2Fevents-settings, code_id=a3d48b67-a439-4546-b992-e93311d6493e, username=admin
  4. ipAddress 값이 역방향 프록시 또는 로드 밸런서의 IP 주소가 아닌 로그인하려는 머신의 IP 주소인지 확인합니다.

9.3.4. 기본 제공 로드 밸런서 사용

이 섹션에서는 클러스터 도메인 예제에서 설명하는 기본 제공 로드 밸런서를 구성하는 방법을 설명합니다.

클러스터 도메인 예제는 한 시스템에서만 실행되도록 설계되었습니다. 다른 호스트에 슬레이브를 표시하려면 다음을 수행해야합니다.

  1. 새 호스트 슬레이브를 가리키도록 domain.xml 파일을 편집합니다.
  2. 서버 배포를 복사합니다. domain.xml,host.xml 또는 host-master.xml 파일이 필요하지 않습니다. 독립 실행형/ 디렉터리도 필요하지 않습니다.
  3. host-slave.xml 파일을 편집하여 명령줄에서 사용된 바인딩 주소를 변경하거나 덮어 쓰기합니다.

절차

  1. 로드 밸런서 구성에 새 호스트 슬레이브를 등록할 수 있도록 domain.xml 을 엽니다.
  2. 로드 밸런서 프로필의 undertow 구성으로 이동합니다. reverse-proxy XML 블록 내에 remote- host 3 이라는 새 호스트 정의를 추가합니다.

    domain.xml reverse-proxy config

    Copy to Clipboard Toggle word wrap
    <subsystem xmlns="urn:jboss:domain:undertow:12.0">
      ...
      <handlers>
          <reverse-proxy name="lb-handler">
             <host name="host1" outbound-socket-binding="remote-host1" scheme="ajp" path="/" instance-id="myroute1"/>
             <host name="host2" outbound-socket-binding="remote-host2" scheme="ajp" path="/" instance-id="myroute2"/>
             <host name="remote-host3" outbound-socket-binding="remote-host3" scheme="ajp" path="/" instance-id="myroute3"/>
          </reverse-proxy>
      </handlers>
      ...
    </subsystem>

    output-socket-binding 은 나중에 domain.xml 파일에서 구성된 socket-binding 을 가리키는 논리 이름입니다. 부하 분산 시 고정 세션을 활성화하기 위해 이 값이 쿠키에서 사용되므로 instance-id 속성도 새 호스트에 고유해야 합니다.

  3. load-balancer-sockets socket-binding-group 으로 이동하여 remote-host3 에 대한 outbound-socket-binding 을 추가합니다.

    이 새 바인딩은 새 호스트의 호스트 및 포트를 가리켜야 합니다.

    domain.xml outbound-socket-binding

    Copy to Clipboard Toggle word wrap
    <socket-binding-group name="load-balancer-sockets" default-interface="public">
        ...
        <outbound-socket-binding name="remote-host1">
            <remote-destination host="localhost" port="8159"/>
        </outbound-socket-binding>
        <outbound-socket-binding name="remote-host2">
            <remote-destination host="localhost" port="8259"/>
        </outbound-socket-binding>
        <outbound-socket-binding name="remote-host3">
            <remote-destination host="192.168.0.5" port="8259"/>
        </outbound-socket-binding>
    </socket-binding-group>

9.3.4.1. 마스터 바인딩 주소

다음 작업은 마스터 호스트의 공개관리 바인딩 주소를 변경하는 것입니다. Bind Addresses 장에서 설명한 domain.xml 파일을 편집하거나 다음과 같이 명령줄에서 이러한 바인딩 주소를 지정합니다.

Copy to Clipboard Toggle word wrap
$ domain.sh --host-config=host-master.xml -Djboss.bind.address=192.168.0.2 -Djboss.bind.address.management=192.168.0.2
9.3.4.2. 호스트 슬레이브 바인딩 주소

다음으로 공용,관리, 도메인 컨트롤러 바인딩 주소 (jboss.domain.master-address)를 변경해야 합니다. 다음과 같이 host-slave.xml 파일을 편집하거나 명령줄에서 해당 파일을 지정합니다.

Copy to Clipboard Toggle word wrap
$ domain.sh --host-config=host-slave.xml
     -Djboss.bind.address=192.168.0.5
      -Djboss.bind.address.management=192.168.0.5
       -Djboss.domain.master.address=192.168.0.2

jboss.bind.addressjboss.bind.address.management 값은 호스트 슬레이브의 IP 주소와 관련이 있습니다. jboss.domain.master.address 값은 마스터 호스트의 관리 주소인 도메인 컨트롤러의 IP 주소여야 합니다.

추가 리소스

9.4. 고정 세션

일반적인 클러스터 배포는 사설 네트워크의 로드 밸런서(Reverse proxy)와 2개 이상의 Red Hat Single Sign-On 서버로 구성됩니다. 성능을 위해 로드 밸런서가 특정 브라우저 세션과 관련된 모든 요청을 동일한 Red Hat Single Sign-On 백엔드 노드로 전달하는 경우 유용할 수 있습니다.

그 이유는 Red Hat Single Sign-On이 현재 인증 세션 및 사용자 세션과 관련된 데이터를 저장하기 위해 Infinispan 분산 캐시를 사용하고 있기 때문입니다. Infinispan 분산 캐시는 기본적으로 하나의 소유자로 구성됩니다. 즉, 특정 세션이 하나의 클러스터 노드에만 저장되고 다른 노드는 액세스하려는 경우 세션을 원격으로 조회해야 합니다.

예를 들어 ID 10.0.0.1을 사용하여 인증 세션을 node1 의 Infinispan 캐시에 저장한 다음 node2 에서 이 세션을 조회해야 하는 경우 특정 세션 엔티티를 반환하기 위해 네트워크를 통해 node1 에 요청을 보내야 합니다.

특정 세션 엔티티를 항상 로컬에서 사용할 수 있는 경우 유용하며 고정 세션의 도움말을 사용하여 수행할 수 있습니다. 공용 프런트 엔드 로드 밸런서와 두 개의 백엔드 Red Hat Single Sign-On 노드가 있는 클러스터 환경의 워크플로는 다음과 같습니다.

  • 사용자가 Red Hat Single Sign-On 로그인 화면을 확인하기 위해 초기 요청을 보냅니다.
  • 이 요청은 임의의 노드(예: node1)로 전달하는 프런트 엔드 로드 밸런서에서 제공합니다. 노드가 무작위일 필요는 없지만 다른 기준(클라이언트 IP 주소 등)에 따라 선택할 수 있습니다. 이 모든 작업은 기본 로드 밸런서의 구현 및 구성에 따라 달라집니다(Reverse proxy).
  • Red Hat Single Sign-On은 임의의 ID(예: 10.0.0.1)를 사용하여 인증 세션을 생성하여 Infinispan 캐시에 저장합니다.
  • Infinispan 분산 캐시는 세션 ID의 해시를 기반으로 세션의 기본 소유자를 할당합니다. 이에 대한 자세한 내용은 Infinispan 설명서를 참조하십시오. Infinispan이 node2 를 이 세션의 소유자로 할당했다고 가정하겠습니다.
  • Red Hat Single Sign-On은 < session-id>.<owner-node-id >와 같은 형식으로 AUTH_SESSION_ID 쿠키를 생성합니다. 이 예에서는 10.0.0.1 .node2 가 됩니다.
  • 브라우저에서 Red Hat Single Sign-On 로그인 화면과 AUTH_SESSION_ID 쿠키를 사용하여 응답이 반환됩니다.

이 시점에서 로드 밸런서가 모든 다음 요청을 node2 로 전달하는 것이 좋습니다. 이 경우 ID 10.0.0.1이 있는 인증 세션의 소유자이므로 Infinispan이 이 세션을 로컬로 조회할 수 있습니다. 인증이 완료되면 인증 세션이 사용자 세션으로 변환되며 ID가 동일하기 때문에 node2 에도 저장됩니다.

고정 세션은 클러스터 설정에 필수는 아니지만 위에서 언급한 이유로 성능이 좋습니다. AUTH_SESSION_ID 쿠키를 고정하도록 로드 밸런서를 구성해야 합니다. 이를 수행하는 방법은 로드 밸런서에 따라 달라집니다.

시작 중에 시스템 속성 jboss.node.name 을 사용하고 경로 이름에 해당하는 값과 함께 Red Hat Single Sign-On 측에서 사용하는 것이 좋습니다. 예를 들어 -Djboss.node.name=node1node1 을 사용하여 경로를 식별합니다. 이 경로는 Infinispan 캐시에서 사용되며 노드가 특정 키의 소유자인 경우 AUTH_SESSION_ID 캐시에 연결됩니다. 다음은 이 시스템 속성을 사용하는 시작 명령의 예입니다.

Copy to Clipboard Toggle word wrap
cd $RHSSO_NODE1
./standalone.sh -c standalone-ha.xml -Djboss.socket.binding.port-offset=100 -Djboss.node.name=node1

일반적으로 프로덕션 환경에서는 경로 이름이 백엔드 호스트와 동일한 이름을 사용해야 하지만 필수는 아닙니다. 다른 경로 이름을 사용할 수 있습니다. 예를 들어 개인 네트워크 내에서 Red Hat Single Sign-On 서버의 호스트 이름을 숨기려면 다음을 수행하십시오.

9.4.1. 경로 추가 비활성화

일부 로드 밸런서는 백엔드 Red Hat Single Sign-On 노드에 의존하는 대신 자체적으로 경로 정보를 추가하도록 구성할 수 있습니다. 그러나 위에서 설명한 대로 Red Hat Single Sign-On으로 경로를 추가하는 것이 좋습니다. 이는 Red Hat Single Sign-On이 특정 세션의 소유자이며 로컬 노드가 아닌 해당 노드로 라우팅할 수 있는 엔티티를 인식하므로 이러한 방식으로 성능이 향상되기 때문입니다.

Red Hat Single Sign-On의 AUTH_SESSION_ID 쿠키(Red Hat Single Sign-On 하위 시스템 구성의 RHSSO_HOME/standalone/configuration/standalone-ha.xml 파일에 다음을 추가하여)에 경로 정보 추가를 비활성화할 수 있습니다.

Copy to Clipboard Toggle word wrap
<subsystem xmlns="urn:jboss:domain:keycloak-server:1.2">
  ...
    <spi name="stickySessionEncoder">
        <provider name="infinispan" enabled="true">
            <properties>
                <property name="shouldAttachRoute" value="false"/>
            </properties>
        </provider>
    </spi>

</subsystem>

9.5. 멀티 캐스트 네트워킹 설정

기본 클러스터링 지원에는 IP Multicast가 필요합니다. 멀티 캐스트는 네트워크 브로드캐스트 프로토콜입니다. 이 프로토콜은 부팅 시 클러스터를 검색하고 결합하는 데 사용됩니다. 또한 Red Hat Single Sign-On에서 사용하는 분산 캐시의 복제 및 무효화에 대한 메시지를 브로드캐스트하는 데 사용됩니다.

Red Hat Single Sign-On의 클러스터링 하위 시스템은 10.0.0.1 스택에서 실행됩니다. 기본적으로 클러스터링에 대한 바인딩 주소는 기본 IP 주소로 127.0.0.1을 사용하는 개인 네트워크 인터페이스에 바인딩됩니다.

절차

  1. Bind Address 장에 설명된 standalone-ha.xml 또는 domain.xml 섹션을 편집합니다.

    프라이빗 네트워크 구성

    Copy to Clipboard Toggle word wrap
        <interfaces>
            ...
            <interface name="private">
                <inet-address value="${jboss.bind.address.private:127.0.0.1}"/>
            </interface>
        </interfaces>
        <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
            ...
            <socket-binding name="jgroups-mping" interface="private" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
            <socket-binding name="jgroups-tcp" interface="private" port="7600"/>
            <socket-binding name="jgroups-tcp-fd" interface="private" port="57600"/>
            <socket-binding name="jgroups-udp" interface="private" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
            <socket-binding name="jgroups-udp-fd" interface="private" port="54200"/>
            <socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/>
            ...
        </socket-binding-group>

  2. 클러스터링 스택에서 jboss.bind.address.privatejboss.default.multicast.address 와 서비스 포트를 구성합니다.

    참고

    IP Multicast 없이 Red Hat Single Sign-On을 클러스터할 수 있지만 이 내용은 이 가이드의 범위를 벗어납니다. 자세한 내용은 JBoss EAP 구성 가이드의 CloudEvent를 참조하십시오. https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.4/html-single/configuration_guide/#cluster_communication_jgroups

9.6. 보안 클러스터 통신

클러스터 노드가 프라이빗 네트워크에서 격리된 경우 클러스터에 참여하거나 클러스터에서 통신을 보려면 사설 네트워크에 액세스해야 합니다. 또한 클러스터 통신에 대해 인증 및 암호화를 활성화할 수도 있습니다. 개인 네트워크가 안전한 경우 인증 및 암호화를 활성화할 필요가 없습니다. Red Hat Single Sign-On은 클러스터에 매우 민감한 정보를 발송하지 않습니다.

클러스터링 통신에 대한 인증 및 암호화를 활성화하려면 JBoss EAP 구성 가이드에서 클러스터 보안 을 참조하십시오.

9.7. 직렬화된 클러스터 시작

Red Hat Single Sign-On 클러스터 노드는 동시에 부팅할 수 있습니다. Red Hat Single Sign-On 서버 인스턴스가 부팅되면 일부 데이터베이스 마이그레이션, 가져오기 또는 초기화를 수행할 수 있습니다. DB 잠금은 클러스터 노드가 동시에 부팅될 때 시작 작업이 서로 충돌하지 못하도록 하는 데 사용됩니다.

기본적으로 이 잠금의 최대 제한 시간은 900초입니다. 노드가 시간 초과를 초과하는 동안 이 잠금에서 대기 중인 경우 부팅에 실패합니다. 일반적으로 기본값을 늘리거나 해독할 필요는 없지만 배포 시 standalone.xml,standalone-ha.xml 또는 domain.xml 파일에서 구성할 수 있습니다. 이 파일의 위치는 작동 모드에 따라 다릅니다.

Copy to Clipboard Toggle word wrap
<spi name="dblock">
    <provider name="jpa" enabled="true">
        <properties>
            <property name="lockWaitTimeout" value="900"/>
        </properties>
    </provider>
</spi>

9.8. 클러스터 부팅

클러스터에서 Red Hat Single Sign-On 부팅은 작동 모드에따라 다릅니다.

독립 실행형 모드

Copy to Clipboard Toggle word wrap
$ bin/standalone.sh --server-config=standalone-ha.xml

도메인 모드

Copy to Clipboard Toggle word wrap
$ bin/domain.sh --host-config=host-master.xml
$ bin/domain.sh --host-config=host-slave.xml

추가 매개 변수 또는 시스템 속성을 사용해야 할 수 있습니다. 예를 들어 바인딩 호스트 또는 시스템 속성 jboss.node.name 에 대한 매개 변수 -b 로, 경로 이름을 지정합니다 .

9.9. 문제 해결

  • 클러스터를 실행할 때 두 클러스터 노드의 로그에 다음과 유사한 메시지가 표시되어야 합니다.

    Copy to Clipboard Toggle word wrap
    INFO  [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (Incoming-10,shared=udp)
    ISPN000094: Received new cluster view: [node1/keycloak|1] (2) [node1/keycloak, node2/keycloak]

    언급된 노드가 하나만 표시되면 클러스터 호스트가 결합되지 않을 수 있습니다.

    일반적으로 통신하기 위해 방화벽 없이 프라이빗 네트워크에 클러스터 노드를 두는 것이 좋습니다. 방화벽은 공용 액세스 포인트에서 네트워크에 대한 대신 활성화할 수 있습니다. 어떤 이유로든 클러스터 노드에서 방화벽을 활성화해야 하는 경우 일부 포트를 열어야 합니다. 기본값은 UDP 포트 55200 및 멀티캐스트 주소 230.0.0.4를 사용하는 멀티 캐스트 포트 45688입니다. CloudEvent 스택에 대한 진단과 같은 추가 기능을 사용하려면 열려 있는 포트가 더 필요할 수 있습니다. Red Hat Single Sign-On은 대부분의 클러스터링 작업을 Infinispan/JGroups에 위임합니다. 자세한 내용은 JBoss EAP 구성 가이드의 CloudEvent를 참조하십시오. https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.4/html-single/configuration_guide/#cluster_communication_jgroups

  • 장애 조치 지원(고가용성), 제거, 만료 및 캐시 튜닝에 관심이 있는 경우 10장. 서버 캐시 구성 을 참조하십시오.

10장. 서버 캐시 구성

Red Hat Single Sign-On에는 두 가지 유형의 캐시가 있습니다. 한 가지 유형의 캐시는 데이터베이스 앞에 위치하여 DB의 부하를 줄이고 데이터를 메모리에 유지하여 전체 응답 시간을 줄입니다. 이러한 유형의 캐시에는 realm, 클라이언트, 역할 및 사용자 메타데이터가 유지됩니다. 이 캐시는 로컬 캐시입니다. 로컬 캐시는 클러스터에 더 많은 Red Hat Single Sign-On 서버가 있는 경우에도 복제를 사용하지 않습니다. 대신 로컬 복사본만 보관하고 항목이 업데이트되면 invalidation 메시지가 클러스터의 나머지 부분으로 전송되고 항목이 제거됩니다. 별도의 복제된 캐시 작업이 있습니다. 이 작업은 로컬 캐시에서 제거해야 하는 항목에 대한 invalidation 메시지를 전체 클러스터에 보내는 것입니다. 이를 통해 네트워크 트래픽을 크게 줄이고, 작업을 효율적으로 수행하고, 전선을 통해 민감한 메타데이터를 전송하는 것을 방지할 수 있습니다.

두 번째 유형의 캐시는 사용자 세션 관리, 오프라인 토큰을 처리하고 로그인 실패를 추적하여 서버가 암호 피싱 및 기타 공격을 탐지할 수 있도록 합니다. 이러한 캐시에 보관된 데이터는 메모리에서만 저장되지만 클러스터에 복제될 수 있습니다.

이 장에서는 클러스터된 배포와 클러스터되지 않은 배포 모두에 대한 이러한 캐시의 일부 구성 옵션에 대해 설명합니다.

참고

이러한 캐시의 고급 구성은 JBoss EAP 구성 가이드Infinispan 섹션에서 확인할 수 있습니다.

10.1. 제거 및 만료

Red Hat Single Sign-On에 대해 다양한 캐시가 여러 개 구성되어 있습니다. 보안 애플리케이션, 일반 보안 데이터 및 구성 옵션에 대한 정보를 보유하는 영역 캐시가 있습니다. 사용자 메타데이터가 포함된 사용자 캐시도 있습니다. 두 캐시 모두 기본적으로 최대 10000개의 항목으로 캐시하고 최근 사용된 제거 전략을 사용합니다. 각 오브젝트는 클러스터형 설정에서 제거를 제어하는 오브젝트 버전 캐시에도 연결됩니다. 이 캐시는 암시적으로 생성되며 구성된 두 배입니다. 권한 부여 데이터를 보유하는 권한 부여 캐시에도 동일하게 적용됩니다. 캐시에는 외부 키에 대한 데이터가 들어 있으며 전용 리버전 캐시가 필요하지 않습니다. 대신 명시적으로 선언된 만료 가 있으므로 키는 주기적으로 만료되고 외부 클라이언트 또는 ID 공급자에서 주기적으로 다운로드해야 합니다.

이러한 캐시의 제거 정책 및 max 항목은 운영 모드에 따라 standalone.xml,standalone-ha.xml, domain.xml 에서 구성할 수 있습니다. 구성 파일에는 infinispan 하위 시스템과 관련된 부분이 있으며 이는 다음과 유사합니다.

Copy to Clipboard Toggle word wrap
<subsystem xmlns="urn:jboss:domain:infinispan:12.0">
    <cache-container name="keycloak">
        <local-cache name="realms">
            <object-memory size="10000"/>
        </local-cache>
        <local-cache name="users">
            <object-memory size="10000"/>
        </local-cache>
        ...
        <local-cache name="keys">
            <object-memory size="1000"/>
            <expiration max-idle="3600000"/>
        </local-cache>
        ...
    </cache-container>

허용된 항목의 수를 제한하거나 확장하려면 오브젝트 요소 또는 특정 캐시 구성의 expiration 요소를 추가하거나 편집하기만 하면 됩니다.

또한 별도의 캐시 세션,clientSessions,offlineSessions,offlineClientSessions,loginFailuresactionTokens 도 있습니다. 이러한 캐시는 클러스터 환경에서 배포되며 기본적으로 크기가 바인딩되지 않습니다. 바인딩된 경우 일부 세션이 손실될 수 있습니다. 만료된 세션은 제한 없이 이러한 캐시의 크기를 늘리지 않도록 Red Hat Single Sign-On 자체에서 내부적으로 정리됩니다. 많은 세션으로 인해 메모리 문제가 표시되는 경우 다음을 시도할 수 있습니다.

  • 클러스터 크기 증가(클러스터의 더 많은 노드는 세션의 노드 간에 더 균등하게 분배됨)
  • Red Hat Single Sign-On 서버 프로세스의 메모리 증가
  • 캐시가 한 곳에 저장되도록 소유자 수를 줄입니다. 자세한 내용은 10.2절. “복제 및 페일오버” 을 참조하십시오.
  • 분산 캐시의 l1-lifespan을 비활성화합니다. 자세한 내용은 Infinispan 설명서를 참조하십시오.
  • Red Hat Single Sign-On 관리 콘솔의 각 영역에 대해 개별적으로 수행할 수 있는 세션 시간 초과를 줄입니다. 그러나 이는 최종 사용자의 유용성에 영향을 미칠 수 있습니다. 자세한 내용은 시간 제한을 참조하십시오.

클러스터 노드 간에 메시지를 보내는 데 주로 사용되는 추가 복제 캐시 work 가 있습니다. 이 캐시는 기본적으로 바인딩되지 않습니다. 그러나 이 캐시는 이 캐시의 항목이 매우 수명이 짧기 때문에 메모리 문제가 발생하지 않아야 합니다.

10.2. 복제 및 페일오버

세션,인증 세션,오프라인 세션 ,로그인Failure 및 기타 몇 가지 캐시(자세한 내용은 10.1절. “제거 및 만료” 참조) 클러스터형 설정을 사용할 때 분산 캐시로 구성된 캐시가 있습니다. 항목이 모든 단일 노드에 복제되는 것은 아니지만 하나 이상의 노드가 해당 데이터의 소유자로 선택됩니다. 노드가 특정 캐시 항목의 소유자가 아닌 경우 해당 노드가 클러스터를 쿼리하여 가져옵니다. 이는 장애 조치(failover)의 의미로, 데이터를 소유하는 모든 노드가 다운되면 해당 데이터가 영구적으로 손실됩니다. 기본적으로 Red Hat Single Sign-On은 데이터 소유자 한 개만 지정합니다. 따라서 이 하나의 노드가 다운되면 해당 데이터가 손실됩니다. 이는 일반적으로 사용자가 로그아웃되고 다시 로그인해야 함을 의미합니다.

distributed-cache 선언의 owners 특성을 변경하여 데이터를 복제하는 노드 수를 변경할 수 있습니다.

소유자

Copy to Clipboard Toggle word wrap
<subsystem xmlns="urn:jboss:domain:infinispan:12.0">
   <cache-container name="keycloak">
       <distributed-cache name="sessions" owners="2"/>
...

여기서는 두 개 이상의 노드가 하나의 특정 사용자 로그인 세션을 복제하도록 변경되었습니다.

작은 정보

권장 소유자 수는 실제로 배포에 따라 다릅니다. 노드가 중단될 때 사용자가 로그아웃된 경우 주의하지 않으면 하나의 소유자가 충분하고 복제를 피할 수 있습니다.

작은 정보

일반적으로 고정 세션에서 로드 밸런서를 사용하도록 환경을 구성하는 것이 좋습니다. 특정 요청이 제공되는 Red Hat Single Sign-On 서버로서 성능에 유용합니다. 일반적으로 분산 캐시의 데이터 소유자이므로 로컬에서 데이터를 검색할 수 있습니다. 자세한 내용은 9.4절. “고정 세션”를 참조하십시오.

10.3. 캐싱 비활성화

영역 또는 사용자 캐시를 비활성화할 수 있습니다.

절차

  1. 배포에서 standalone.xml,standalone-ha.xml 또는 domain.xml 파일을 편집합니다.

    이 파일의 위치는 작동 모드에 따라 다릅니다. 다음은 샘플 구성 파일입니다.

    Copy to Clipboard Toggle word wrap
        <spi name="userCache">
            <provider name="default" enabled="true"/>
        </spi>
    
        <spi name="realmCache">
            <provider name="default" enabled="true"/>
        </spi>
  2. 비활성화하려는 캐시에 enabled 특성을 false로 설정합니다.
  3. 이 변경 사항을 적용하려면 서버를 재부팅합니다.

10.4. 런타임 시 캐시 삭제

영역 캐시, 사용자 캐시 또는 외부 공개 키를 지울 수 있습니다.

절차

  1. 관리 콘솔에 로그인합니다.
  2. VMDK 설정을 클릭합니다.
  3. 캐시 탭을 클릭합니다.
  4. 영역 캐시, 외부 공개 키의 사용자 캐시 또는 캐시를 지웁니다.
참고

캐시가 모든 영역에 대해 지워집니다!

11장. Red Hat Single Sign-On Operator

Red Hat Single Sign-On Operator는 Openshift에서 Red Hat Single Sign-On 관리를 자동화합니다. 이 Operator를 사용하여 관리 작업을 자동화하는 CR(사용자 정의 리소스)을 생성합니다. 예를 들어 Red Hat Single Sign-On 관리 콘솔에서 클라이언트 또는 사용자를 생성하는 대신 사용자 정의 리소스를 생성하여 해당 작업을 수행할 수 있습니다. 사용자 지정 리소스는 관리 작업의 매개 변수를 정의하는 YAML 파일입니다.

사용자 정의 리소스를 생성하여 다음 작업을 수행할 수 있습니다.

참고

영역, 클라이언트 및 사용자에 대한 사용자 지정 리소스를 생성한 후에는 Red Hat Single Sign-On 관리 콘솔 또는 oc 명령을 사용하여 사용자 정의 리소스로 해당 리소스를 관리할 수 있습니다. 그러나 Operator는 수정한 사용자 정의 리소스에 대해 한 가지 방식으로 동기화되므로 두 가지 방법을 모두 사용할 수 없습니다. 예를 들어 영역 사용자 정의 리소스를 수정하면 변경 사항이 관리 콘솔에 표시됩니다. 그러나 관리 콘솔을 사용하여 영역을 수정하는 경우 이러한 변경 사항은 사용자 정의 리소스에 영향을 미치지 않습니다.

클러스터에 Red Hat Single Sign-On Operator를 설치하여 Operator 사용을 시작합니다.

11.1. 클러스터에 Red Hat Single Sign-On Operator 설치

Red Hat Single Sign-On Operator를 설치하려면 다음을 사용할 수 있습니다.

11.1.1. Operator Lifecycle Manager를 사용하여 설치

사전 요구 사항

  • cluster-admin 권한 또는 관리자가 부여한 동등한 수준의 권한이 있어야 합니다.

절차

OpenShift 클러스터에서 이 프로세스를 수행합니다.

  1. OpenShift Container Platform 웹 콘솔을 엽니다.
  2. 왼쪽 열에서 Operators, OperatorHub 를 클릭합니다.
  3. Red Hat Single Sign-On Operator 검색.

    OpenShift의 OperatorHub 탭

    operator openshift operatorhub

  4. Red Hat Single Sign-On Operator 아이콘을 클릭합니다.

    설치 페이지가 열립니다.

    OpenShift에 Operator 설치 페이지

    operator olm installation

  5. 설치를 클릭합니다.
  6. 네임스페이스를 선택하고 서브스크립션을 클릭합니다.

    stable 채널에 있는지 확인하십시오.

    OpenShift에서 네임스페이스 선택

    installed namespace

    Operator가 설치를 시작합니다.

추가 리소스

11.1.2. 명령줄에서 설치

명령줄에서 Red Hat Single Sign-On Operator를 설치할 수 있습니다.

사전 요구 사항

  • cluster-admin 권한 또는 관리자가 부여한 동등한 수준의 권한이 있어야 합니다.

절차

  1. 프로젝트를 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ oc new-project <namespace>
  2. rhsso-operator-olm.yaml 이라는 파일을 생성하여 YAML 그룹과 서브스크립션 운영자를 정의합니다.

    targetNamespaces 를 RH-SSO의 네임스페이스 로 업데이트합니다.

    Copy to Clipboard Toggle word wrap
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: rhsso-operator-group
    spec:
      targetNamespaces:
      -  <namespace> # change this to the namespace you will use for RH-SSO
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: rhsso-operator
    spec:
      channel: stable
      installPlanApproval: Manual
      name: rhsso-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      # Here you can specify a specific Operator version, otherwise it will use the latest
      # startingCSV: rhsso-operator.7.6.0-opr-001
  3. Operator 그룹 및 서브스크립션을 설치합니다.

    Copy to Clipboard Toggle word wrap
    $ oc apply -f rhsso-operator-olm.yaml
  4. 설치 계획을 승인하고 적절한 네임스페이스 를 작성합니다.

    Copy to Clipboard Toggle word wrap
    oc patch installplan $(oc get ip -n <namespace>  -o=jsonpath='{.items[?(@.spec.approved==false)].metadata.name}') -n <namespace> --type merge --patch '{"spec":{"approved":true}}'
  5. Operator가 실행 중인지 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ oc get pods
    NAME                              READY   STATUS    RESTARTS   AGE
    rhsso-operator-558876f75c-m25mt   1/1     Running   0          28s

추가 리소스

11.2. 프로덕션 환경에서 Red Hat Single Sign-On Operator 사용

  • 임베디드 DB의 사용은 프로덕션 환경에서 지원되지 않습니다.
  • 백업 CRD는 더 이상 사용되지 않으며 프로덕션 환경에서 지원되지 않습니다.
  • Keycloak CR의 podDisruptionBudget 필드는 더 이상 사용되지 않으며 Operator가 Kubernetes 버전 1.25 이상에 배포되면 무시됩니다.
  • v1alpha1 버전에도 불구하고 프로덕션 환경에서 나머지 CRD 사용을 완전하게 지원합니다. 이 CRD 버전의 변경 사항을 중단하지 않습니다.

11.3. 사용자 정의 리소스를 사용하여 Red Hat Single Sign-On 설치

Operator를 사용하여 Keycloak 사용자 정의 리소스를 생성하여 Red Hat Single Sign-On의 설치를 자동화할 수 있습니다. 사용자 지정 리소스를 사용하여 Red Hat Single Sign-On을 설치할 때 여기에 설명된 구성 요소와 서비스를 다음과 같이 설명합니다.

  • Keycloak-db-secret - 데이터베이스 사용자 이름, 암호 및 외부 주소와 같은 속성을 저장합니다(외부 데이터베이스에 연결하는 경우)
  • credentials-<CR-Name > - Red Hat Single Sign-On 관리 콘솔에 로그인할 수 있는 관리자 사용자 이름 및 암호(< CR-Name >는 Keycloak 사용자 정의 리소스 이름을 기반으로 함)
  • Keycloak - 고가용성을 지원하는 StatefulSet으로 구현되는 Keycloak 배포 사양
  • Keycloak-postgresql - PostgreSQL 데이터베이스 설치를 시작합니다
  • Keycloak-discovery 서비스 - JDBC_PING 검색 수행
  • Keycloak 서비스 - HTTPS를 통해 Red Hat Single Sign-On에 연결(HTTP는 지원되지 않음)
  • Keycloak-postgresql Service - 사용하는 경우 데이터베이스 인스턴스를 내부 및 외부 연결
  • Keycloak 경로 - OpenShift에서 Red Hat Single Sign-On 관리 콘솔에 액세스하기 위한 URL

Operator 구성 요소 및 서비스가 상호 작용하는 방법

operator components

11.3.1. Keycloak 사용자 정의 리소스

Keycloak 사용자 정의 리소스는 설치에 대한 매개변수를 정의하는 YAML 파일입니다. 이 파일에는 세 가지 속성이 포함되어 있습니다.

  • instances - 고가용성 모드에서 실행 중인 인스턴스 수를 제어합니다.
  • externalAccess - 활성화된 경우 Operator 는 Red Hat Single Sign-On 클러스터에 대한 OpenShift 경로를 생성합니다. 경로에 대해 자동으로 선택된 호스트 이름을 덮어쓰도록 host를 설정할 수 있습니다.
  • externalDatabase - 외부 호스트 데이터베이스에 연결하려면To connect to an external hosted database 이 주제는 이 가이드의 외부 데이터베이스 섹션에서 다룹니다. false로 설정하는 것은 테스트 목적으로만 사용해야 하며 포함된 PostgreSQL 데이터베이스를 설치합니다. 프로덕션 환경에서는 externalDatabase: false 가 지원되지 않습니다.

Keycloak 사용자 정의 리소스의 YAML 파일의 예

Copy to Clipboard Toggle word wrap
apiVersion: keycloak.org/v1alpha1
kind: Keycloak
metadata:
  name: example-sso
  labels:
    app: sso
spec:
  instances: 1
  externalAccess:
    enabled: True

참고

YAML 파일과 Red Hat Single Sign-On 관리 콘솔에 변경 사항이 표시될 수 있지만 관리 콘솔에 대한 변경 사항은 사용자 정의 리소스를 업데이트하지 않습니다.

11.3.2. OpenShift에서 Keycloak 사용자 정의 리소스 생성

OpenShift에서 사용자 지정 리소스를 사용하여 관리 콘솔의 URL인 경로를 생성하고 관리 콘솔의 사용자 이름 및 암호가 포함된 시크릿을 찾습니다.

사전 요구 사항

  • 이 사용자 정의 리소스에 대한 YAML 파일이 있습니다.
  • cluster-admin 권한 또는 관리자가 부여한 동등한 수준의 권한이 있어야 합니다.

절차

  1. YAML 파일을 사용하여 경로를 생성합니다. oc create -f <filename>.yaml -n <namespace>. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    $ oc create -f sso.yaml -n sso
    keycloak.keycloak.org/example-sso created

    경로는 OpenShift에서 생성됩니다.

  2. OpenShift 웹 콘솔에 로그인합니다.
  3. 네트워킹,경로 를 선택하고 Keycloak을 검색합니다.

    OpenShift 웹 콘솔의 경로 화면

    route ocp

  4. Keycloak 경로가 있는 화면에서 위치 아래에서 URL을 클릭합니다.

    Red Hat Single Sign-On 관리자 콘솔 로그인 화면이 표시됩니다.

    관리자 콘솔 로그인 화면

    login empty

  5. OpenShift 웹 콘솔에서 admin 콘솔의 사용자 이름과 암호를 찾습니다. Workloads 에서 Secrets 를 클릭하고 Keycloak을 검색합니다.

    OpenShift 웹 콘솔의 시크릿 화면

    secrets ocp

  6. admin 콘솔 로그인 화면에 사용자 이름과 암호를 입력합니다.

    관리자 콘솔 로그인 화면

    login complete

    이제 Keycloak 사용자 정의 리소스에서 설치한 Red Hat Single Sign-On 인스턴스에 로그인되어 있습니다. 영역, 클라이언트 및 사용자에 대한 사용자 정의 리소스를 생성할 준비가 되어 있습니다.

    Red Hat Single Sign-On 마스터 영역

    new install cr

  7. 사용자 정의 리소스의 상태를 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ oc describe keycloak <CR-name>

결과

Operator에서 사용자 정의 리소스를 처리한 후 다음 명령으로 상태를 확인합니다.

Copy to Clipboard Toggle word wrap
$ oc describe keycloak <CR-name>

Keycloak 사용자 정의 리소스 상태

Copy to Clipboard Toggle word wrap
Name:         example-keycloak
Namespace:    keycloak
Labels:       app=sso
Annotations:  <none>
API Version:  keycloak.org/v1alpha1
Kind:         Keycloak
Spec:
  External Access:
    Enabled:  true
  Instances:  1
Status:
  Credential Secret:  credential-example-keycloak
  Internal URL:       https://<External URL to the deployed instance>
  Message:
  Phase:              reconciling
  Ready:              true
  Secondary Resources:
    Deployment:
      keycloak-postgresql
    Persistent Volume Claim:
      keycloak-postgresql-claim
    Prometheus Rule:
      keycloak
    Route:
      keycloak
    Secret:
      credential-example-keycloak
      keycloak-db-secret
    Service:
      keycloak-postgresql
      keycloak
      keycloak-discovery
    Service Monitor:
      keycloak
    Stateful Set:
      keycloak
  Version:
Events:

추가 리소스

  • Red Hat Single Sign-On 설치가 완료되면 영역 사용자 정의 리소스를 만들 준비가 된 것입니다.
  • 외부 데이터베이스는 지원되는 옵션이며 Keycloak 사용자 정의 리소스에서 활성화해야 합니다. 테스트에서만 이 옵션을 비활성화하고 프로덕션 환경으로 전환할 때 활성화할 수 있습니다. 외부 데이터베이스에 연결을 참조하십시오.

11.4. 영역 사용자 정의 리소스 생성

Operator를 사용하여 사용자 정의 리소스에서 정의한 대로 Red Hat Single Sign-On에서 영역을 생성할 수 있습니다. YAML 파일에서 realm 사용자 정의 리소스의 속성을 정의합니다.

참고

YAML 파일을 생성하거나 삭제하여 영역만 만들거나 삭제할 수 있으며, 변경 사항은 Red Hat Single Sign-On 관리 콘솔에 표시됩니다. 그러나 관리 콘솔에 대한 변경 사항은 반영되지 않으며 영역이 생성된 후 CR의 업데이트가 지원되지 않습니다.

CloudEvent 사용자 정의 리소스의 YAML 파일의 예

Copy to Clipboard Toggle word wrap
apiVersion: keycloak.org/v1alpha1
kind: KeycloakRealm
metadata:
  name: test
  labels:
    app: sso
spec:
  realm:
    id: "basic"
    realm: "basic"
    enabled: True
    displayName: "Basic Realm"
  instanceSelector:
    matchLabels:
      app: sso

사전 요구 사항

  • 이 사용자 정의 리소스에 대한 YAML 파일이 있습니다.
  • YAML 파일에서 instanceSelector앱은 Keycloak 사용자 정의 리소스의 레이블과 일치합니다. 이러한 값을 일치시켜 Red Hat Single Sign-On의 오른쪽 인스턴스에서 영역을 만들 수 있습니다.
  • cluster-admin 권한 또는 관리자가 부여한 동등한 수준의 권한이 있어야 합니다.

절차

  1. 생성한 YAML 파일에서 이 명령을 사용합니다. oc create -f <realm-name>.yaml. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    $ oc create -f initial_realm.yaml
    keycloak.keycloak.org/test created
  2. Red Hat Single Sign-On의 관련 인스턴스에 대해 관리 콘솔에 로그인합니다.
  3. Select CloudEvent를 클릭하고 생성한 영역을 찾습니다.

    새 영역이 열립니다.

    관리자 콘솔 마스터 영역

    test realm cr

결과

Operator에서 사용자 정의 리소스를 처리한 후 다음 명령으로 상태를 확인합니다.

Copy to Clipboard Toggle word wrap
$ oc describe keycloak <CR-name>

영역 사용자 정의 리소스 상태

Copy to Clipboard Toggle word wrap
Name:         example-keycloakrealm
Namespace:    keycloak
Labels:       app=sso
Annotations:  <none>
API Version:  keycloak.org/v1alpha1
Kind:         KeycloakRealm
Metadata:
  Creation Timestamp:  2019-12-03T09:46:02Z
  Finalizers:
    realm.cleanup
  Generation:        1
  Resource Version:  804596
  Self Link:         /apis/keycloak.org/v1alpha1/namespaces/keycloak/keycloakrealms/example-keycloakrealm
  UID:               b7b2f883-15b1-11ea-91e6-02cb885627a6
Spec:
  Instance Selector:
    Match Labels:
      App: sso
  Realm:
    Display Name:  Basic Realm
    Enabled:       true
    Id:            basic
    Realm:         basic
Status:
  Login URL:
  Message:
  Phase:      reconciling
  Ready:      true
Events:       <none>

추가 리소스

11.5. 클라이언트 사용자 정의 리소스 생성

Operator를 사용하여 사용자 정의 리소스에서 정의한 대로 Red Hat Single Sign-On에서 클라이언트를 생성할 수 있습니다. YAML 파일에서 영역의 속성을 정의합니다.

참고

YAML 파일과 변경 사항이 Red Hat Single Sign-On 관리 콘솔에 표시될 수 있지만 관리 콘솔에 대한 변경 사항은 사용자 정의 리소스를 업데이트하지 않습니다.

Client 사용자 정의 리소스의 YAML 파일의 예

Copy to Clipboard Toggle word wrap
apiVersion: keycloak.org/v1alpha1
kind: KeycloakClient
metadata:
  name: example-client
  labels:
    app: sso
spec:
  realmSelector:
     matchLabels:
      app: <matching labels for KeycloakRealm custom resource>
  client:
    # auto-generated if not supplied
    #id: 123
    clientId: client-secret
    secret: client-secret
    # ...
    # other properties of Keycloak Client

사전 요구 사항

  • 이 사용자 정의 리소스에 대한 YAML 파일이 있습니다.
  • cluster-admin 권한 또는 관리자가 부여한 동등한 수준의 권한이 있어야 합니다.

절차

  1. 생성한 YAML 파일에서 이 명령을 사용합니다. oc create -f <client-name>.yaml. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    $ oc create -f initial_client.yaml
    keycloak.keycloak.org/example-client created
  2. Red Hat Single Sign-On의 관련 인스턴스에 대해 Red Hat Single Sign-On 관리 콘솔에 로그인합니다.
  3. 클라이언트를 클릭합니다.

    새 클라이언트가 클라이언트 목록에 나타납니다.

    clients

결과

클라이언트가 생성되면 Operator는 다음 이름 지정 패턴을 사용하여 클라이언트 ID 를 포함하는 보안을 생성합니다. keycloak-client-secret-<custom resource name > . 예를 들면 다음과 같습니다.

클라이언트의 보안

Copy to Clipboard Toggle word wrap
apiVersion: v1
data:
  CLIENT_ID: <base64 encoded Client ID>
  CLIENT_SECRET: <base64 encoded Client Secret>
kind: Secret

Operator에서 사용자 정의 리소스를 처리한 후 다음 명령으로 상태를 확인합니다.

Copy to Clipboard Toggle word wrap
$ oc describe keycloak <CR-name>

클라이언트 사용자 정의 리소스 상태

Copy to Clipboard Toggle word wrap
Name:         client-secret
Namespace:    keycloak
Labels:       app=sso
API Version:  keycloak.org/v1alpha1
Kind:         KeycloakClient
Spec:
  Client:
    Client Authenticator Type:     client-secret
    Client Id:                     client-secret
    Id:                            keycloak-client-secret
  Realm Selector:
    Match Labels:
      App:  sso
Status:
  Message:
  Phase:    reconciling
  Ready:    true
  Secondary Resources:
    Secret:
      keycloak-client-secret-client-secret
Events:  <none>

추가 리소스

11.6. 사용자 정의 리소스 생성

Operator를 사용하여 사용자 정의 리소스에서 정의한 대로 Red Hat Single Sign-On에서 사용자를 생성할 수 있습니다. YAML 파일에서 사용자 사용자 정의 리소스의 속성을 정의합니다.

참고

YAML 파일에서 속성을 업데이트할 수 있으며 변경 사항은 Red Hat Single Sign-On 관리자 콘솔에 표시되지만 관리자 콘솔에 대한 변경 사항은 사용자 정의 리소스를 업데이트하지 않습니다.

자격 증명에 동일하게 적용됩니다. credentials 필드가 정의되면 사용자 인증 정보가 CR에 설정된 값과 항상 일치합니다. 즉, 사용자가 계정 콘솔을 통해 암호를 변경하면 Operator가 CR에 설정된 값과 일치하도록 재설정됩니다.

사용자 사용자 정의 리소스의 YAML 파일의 예

Copy to Clipboard Toggle word wrap
apiVersion: keycloak.org/v1alpha1
kind: KeycloakUser
metadata:
  name: example-user
spec:
  user:
    username: "realm_user"
    firstName: "John"
    lastName: "Doe"
    email: "user@example.com"
    enabled: True
    emailVerified: False
    credentials:
      - type: "password"
        value: "12345"
    realmRoles:
      - "offline_access"
    clientRoles:
      account:
        - "manage-account"
      realm-management:
        - "manage-users"
  realmSelector:
    matchLabels:
      app: sso

사전 요구 사항

  • 이 사용자 정의 리소스에 대한 YAML 파일이 있습니다.
  • realmSelector 는 기존 영역 사용자 정의 리소스의 레이블과 일치합니다.
  • cluster-admin 권한 또는 관리자가 부여한 동등한 수준의 권한이 있어야 합니다.

절차

  1. 생성한 YAML 파일에서 이 명령을 사용합니다. oc create -f <user_cr>.yaml. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    $ oc create -f initial_user.yaml
    keycloak.keycloak.org/example-user created
  2. Red Hat Single Sign-On의 관련 인스턴스에 대해 관리 콘솔에 로그인합니다.
  3. 사용자를 클릭합니다.
  4. YAML 파일에 정의한 사용자를 검색합니다.

    사용자를 찾으려면 다른 영역으로 전환해야 할 수 있습니다.

    realm user

결과

사용자가 생성되면 Operator는 사용자 이름이 포함된 credentials -< realm name>-<username>-<namespace> , 다음 이름 지정 패턴을 사용하여 시크릿을 생성합니다. 사용자 이름 및 CR 인증 정보 속성에 지정된 경우 암호입니다.

예를 들면 다음과 같습니다.

KeycloakUser 시크릿

Copy to Clipboard Toggle word wrap
kind: Secret
apiVersion: v1
data:
  password: <base64 encoded password>
  username: <base64 encoded username>
type: Opaque

Operator가 사용자 정의 리소스를 처리한 후 다음 명령으로 상태를 봅니다.

Copy to Clipboard Toggle word wrap
$ oc describe keycloak <CR-name>

사용자 정의 리소스 상태

Copy to Clipboard Toggle word wrap
Name:         example-realm-user
Namespace:    keycloak
Labels:       app=sso
API Version:  keycloak.org/v1alpha1
Kind:         KeycloakUser
Spec:
  Realm Selector:
    Match Labels:
      App: sso
  User:
    Email:           realm_user@redhat.com
    Credentials:
      Type:          password
      Value:         <user password>
    Email Verified:  false
    Enabled:         true
    First Name:      John
    Last Name:       Doe
    Username:        realm_user
Status:
  Message:
  Phase:    reconciled
Events:     <none>

추가 리소스

11.7. 외부 데이터베이스에 연결

Operator를 사용하여 keycloak-db-secret YAML 파일을 생성하고 Keycloak CR externalDatabase 속성을 enabled로 설정하여 외부 PostgreSQL 데이터베이스에 연결할 수 있습니다. 값은 Base64로 인코딩됩니다.

keycloak-db-secret에 대한 YAML 파일의 예

Copy to Clipboard Toggle word wrap
apiVersion: v1
kind: Secret
metadata:
    name: keycloak-db-secret
    namespace: keycloak
stringData:
    POSTGRES_DATABASE: <Database Name>
    POSTGRES_EXTERNAL_ADDRESS: <External Database URL (resolvable by K8s)>
    POSTGRES_EXTERNAL_PORT: <External Database Port>
    POSTGRES_PASSWORD: <Database Password>
    # Required for AWS Backup functionality
    POSTGRES_SUPERUSER: "true"
    POSTGRES_USERNAME: <Database Username>
    SSLMODE: <TLS configuration for the Database connection>
type: Opaque

다음 속성은 데이터베이스의 호스트 이름 또는 IP 주소와 포트를 설정합니다.

  • POSTGRES_EXTERNAL_ADDRESS - 외부 데이터베이스의 호스트 이름 호스트 이름 대신 데이터베이스에 대한 IP만 있는 경우 서비스 및 해당 EndpointSlice 또는 Endpoint 를 생성하여 호스트 이름을 제공합니다.
  • POSTGRES_EXTERNAL_PORT - (선택 사항) 데이터베이스 포트입니다.

다른 속성은 호스팅 또는 외부 데이터베이스에 대해 동일한 방식으로 작동합니다. 다음과 같이 설정합니다.

  • POSTGRES_DATABASE - 사용할 데이터베이스 이름입니다.
  • POSTGRES_USERNAME - 데이터베이스 사용자 이름
  • POSTGRES_PASSWORD - 데이터베이스 암호
  • POSTGRES_SUPERUSER - 백업이 슈퍼 사용자로 실행되어야 하는지 여부를 나타냅니다. 일반적으로 true.
  • SSLMODE - 외부 PostgreSQL 데이터베이스 연결에 TLS를 사용할지 여부를 나타냅니다. 가능한 확인

SSLMODE 가 활성화되면 Operator는 PostgreSQL 데이터베이스에서 사용한 root.crt 가 포함된 keycloak-db-ssl-cert-secret 이라는 시크릿을 검색합니다. 보안 생성은 선택 사항이며 데이터베이스의 인증서를 확인하려는 경우에만 시크릿이 사용됩니다(예: SSLMODE: verify-ca). 예를 들면 다음과 같습니다.

Operator에서 사용할 TLS 시크릿에 대한 YAML 파일의 예입니다.

Copy to Clipboard Toggle word wrap
apiVersion: v1
kind: Secret
metadata:
  name: keycloak-db-ssl-cert-secret
  namespace: keycloak
type: Opaque
data:
  root.crt: {root.crt base64}

Operator는 keycloak-postgresql 이라는 서비스를 생성합니다. 이 서비스는 POSTGRES_EXTERNAL_ADDRESS 의 콘텐츠에 따라 외부 데이터베이스를 노출하도록 Operator에 의해 구성됩니다. Red Hat Single Sign-On은 이 서비스를 사용하여 데이터베이스에 연결하므로 이 서비스를 통해 데이터베이스에 직접 연결하지 않습니다.

Keycloak 사용자 정의 리소스를 사용하려면 외부 데이터베이스 지원을 활성화하기 위해 업데이트해야 합니다.

외부 데이터베이스를 지원하는 Keycloak 사용자 정의 리소스의 YAML 파일의 예

Copy to Clipboard Toggle word wrap
apiVersion: keycloak.org/v1alpha1
kind: Keycloak
metadata:
  labels:
      app: sso
  name: example-keycloak
  namespace: keycloak
spec:
  externalDatabase:
    enabled: true
  instances: 1

사전 요구 사항

  • keycloak-db-secret 에 대한 YAML 파일이 있습니다.
  • Keycloak 사용자 정의 리소스를 수정하여 externalDatabasetrue 로 설정했습니다.
  • cluster-admin 권한 또는 관리자가 부여한 동등한 수준의 권한이 있어야 합니다.

절차

  1. PostgreSQL 데이터베이스의 시크릿을 찾습니다. oc get secret <secret_for_db> -o yaml. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    $ oc get secret keycloak-db-secret -o yaml
    apiVersion: v1
    data
      POSTGRES_DATABASE: cm9vdA==
      POSTGRES_EXTERNAL_ADDRESS: MTcyLjE3LjAuMw==
      POSTGRES_EXTERNAL_PORT: NTQzMg==

    POSTGRES_EXTERNAL_ADDRESS 는 Base64 형식입니다.

  2. 시크릿 값을 디코딩합니다. echo "<encoded_secret>" | base64 -decode. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    $ echo "MTcyLjE3LjAuMw==" | base64 -decode
    192.0.2.3
  3. 디코딩된 값이 데이터베이스의 IP 주소와 일치하는지 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ oc get pods -o wide
    NAME                        READY  STATUS    RESTARTS   AGE   IP
    keycloak-0                  1/1    Running   0          13m   192.0.2.0
    keycloak-postgresql-c8vv27m 1/1    Running   0          24m   192.0.2.3
  4. keycloak-postgresql 이 실행 중인 서비스 목록에 표시되는지 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ oc get svc
    NAME                 TYPE       CLUSTER-IP     EXTERNAL-IP  PORT(S)   AGE
    keycloak             ClusterIP  203.0.113.0    <none>       8443/TCP  27m
    keycloak-discovery   ClusterIP  None           <none>       8080/TCP  27m
    keycloak-postgresql  ClusterIP  203.0.113.1    <none>       5432/TCP  27m

    keycloak-postgresql 서비스는 요청을 백엔드의 IP 주소 세트로 보냅니다. 이러한 IP 주소를 끝점이라고 합니다.

  5. keycloak-postgresql 서비스에서 사용하는 끝점을 보고 데이터베이스의 IP 주소를 사용하는지 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ oc get endpoints keycloak-postgresql
    NAME                  ENDPOINTS         AGE
    keycloak-postgresql   192.0.2.3.5432    27m
  6. Red Hat Single Sign-On이 외부 데이터베이스를 사용하여 실행 중인지 확인합니다. 이 예제에서는 모든 작업이 실행 중인지 보여줍니다.

    Copy to Clipboard Toggle word wrap
    $ oc get pods
    NAME                        READY  STATUS    RESTARTS   AGE   IP
    keycloak-0                  1/1    Running   0          26m   192.0.2.0
    keycloak-postgresql-c8vv27m 1/1    Running   0          36m   192.0.2.3

11.8. 외부 Red Hat Single Sign-On에 연결

이 Operator는 외부 Red Hat Single Sign-On 인스턴스를 부분적으로 관리하는 데 사용할 수도 있습니다. 현재 상태에서는 클라이언트만 생성할 수 있습니다.

이렇게 하려면 대상 및 구성에 사용할 KeycloakKeycloakRealm CRD의 관리되지 않는 버전을 생성해야 합니다.

external-keycloak의 YAML 파일의 예

Copy to Clipboard Toggle word wrap
apiVersion: keycloak.org/v1alpha1
kind: Keycloak
metadata:
  name: external-ref
  labels:
    app: external-sso
spec:
  unmanaged: true
  external:
    enabled: true
    url: https://some.external.url

이 keycloak에 대해 인증하기 위해 Operator는 CRD 이름 앞에 credential- 을 접두사로 지정하여 CRD에서 보안 이름을 유추합니다.

credential-external-ref의 YAML 파일의 예

Copy to Clipboard Toggle word wrap
apiVersion: v1
kind: Secret
metadata:
  name: credential-external-ref
type: Opaque
data:
  ADMIN_USERNAME: YWRtaW4=
  ADMIN_PASSWORD: cGFzcw==

external-realm의 YAML 파일 예

Copy to Clipboard Toggle word wrap
apiVersion: keycloak.org/v1alpha1
kind: KeycloakRealm
metadata:
  name: external-realm
  labels:
    app: external-sso
spec:
  unmanaged: true
  realm:
    id: "basic"
    realm: "basic"
  instanceSelector:
    matchLabels:
      app: external-sso

이제 클라이언트에서 정상적으로 영역 참조를 사용할 수 있으며 외부 Red Hat Single Sign-On 인스턴스에 클라이언트를 생성합니다.

11.9. 데이터베이스 백업 예약

주의

Backup CR은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 수 있습니다.

Operator를 사용하여 사용자 정의 리소스에 정의된 데이터베이스의 자동 백업을 예약할 수 있습니다. 사용자 정의 리소스는 백업 작업을 트리거하고 상태를 다시 보고합니다.

Operator를 사용하여 로컬 영구 볼륨에 일회성 백업을 수행하는 백업 작업을 생성할 수 있습니다.

Backup 사용자 정의 리소스의 YAML 파일의 예

Copy to Clipboard Toggle word wrap
apiVersion: keycloak.org/v1alpha1
kind: KeycloakBackup
metadata:
  name: test-backup

사전 요구 사항

  • 이 사용자 정의 리소스에 대한 YAML 파일이 있습니다.
  • claimRef 가 있는 PersistentVolume 을 사용하여 Red Hat Single Sign-On Operator에서 생성한 PersistentVolumeClaim 에만 예약할 수 있습니다.

절차

  1. 백업 작업 생성: oc create -f <backup_crname>. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    $ oc create -f one-time-backup.yaml
    keycloak.keycloak.org/test-backup

    Operator는 다음 이름 지정 체계인 Keycloak-backup-<CR-name>을 사용하여 PersistentVolumeClaim 을 생성합니다.

  2. 볼륨 목록을 표시합니다.

    Copy to Clipboard Toggle word wrap
    $ oc get pvc
    NAME                          STATUS   VOLUME
    keycloak-backup-test-backup   Bound    pvc-e242-ew022d5-093q-3134n-41-adff
    keycloak-postresql-claim      Bound    pvc-e242-vs29202-9bcd7-093q-31-zadj
  3. 백업 작업 목록을 표시합니다.

    Copy to Clipboard Toggle word wrap
    $ oc get jobs
    NAME           COMPLETIONS     DURATION     AGE
    test-backup    0/1             6s           6s
  4. 실행된 백업 작업 목록을 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ oc get pods
    NAME                               READY    STATUS       RESTARTS    AGE
    test-backup-5b4rf                  0/1      Completed    0           24s
    keycloak-0                         1/1      Running      0           52m
    keycloak-postgresql-c824c6-vv27m   1/1      Running      0           71m
  5. 완료된 백업 작업의 로그를 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ oc logs test-backup-5b4rf
    ==> Component data dump completed
    .
    .
    .
    .

추가 리소스

11.10. 확장 및 구성 요소 설치

운영자를 사용하여 회사 또는 조직에 필요한 확장 기능 및 주제를 설치할 수 있습니다. 확장 또는 주제는 Red Hat Single Sign-On에서 사용할 수 있는 모든 항목일 수 있습니다. 예를 들어 메트릭 확장을 추가할 수 있습니다. Keycloak 사용자 정의 리소스에 확장 또는 주제를 추가합니다.

Keycloak 사용자 정의 리소스의 YAML 파일의 예

Copy to Clipboard Toggle word wrap
apiVersion: keycloak.org/v1alpha1
kind: Keycloak
metadata:
  name: example-keycloak
  labels:
   app: sso
spec:
  instances: 1
  extensions:
   - <url_for_extension_or_theme>
  externalAccess:
    enabled: True

주제를 다른 확장 프로그램과 동일한 방식으로 패키징하고 배포할 수 있습니다. 자세한 내용은 Themes 수동 항목 배포를 참조하십시오.

사전 요구 사항

  • Keycloak 사용자 정의 리소스에 대한 YAML 파일이 있습니다.
  • cluster-admin 권한 또는 관리자가 부여한 동등한 수준의 권한이 있어야 합니다.

절차

  1. Keycloak 사용자 정의 리소스의 YAML 파일을 편집합니다. oc edit <CR-name>
  2. instances 행 뒤에 extensions: 라는 행을 추가합니다.
  3. 사용자 지정 확장 또는 주제를 위해 JAR 파일에 URL을 추가합니다.
  4. 파일을 저장합니다.

Operator는 확장 또는me을 다운로드하여 설치합니다.

11.11. 사용자 정의 리소스를 관리하기 위한 명령 옵션

사용자 정의 요청을 생성한 후 oc 명령을 사용하여 편집하거나 삭제할 수 있습니다.

  • 사용자 정의 요청을 편집하려면 oc edit <CR-name> 명령을 사용하십시오.
  • 사용자 정의 요청을 삭제하려면 oc delete <CR-name> 명령을 사용하십시오.

예를 들어 test-realm 이라는 영역 사용자 정의 요청을 편집하려면 다음 명령을 사용합니다.

Copy to Clipboard Toggle word wrap
$ oc edit test-realm

변경할 수 있는 창이 열립니다.

참고

Keycloak CR YAML 파일을 업데이트할 수 있으며 변경 사항이 배포에 적용됩니다.

다른 리소스에 대한 업데이트는 제한됩니다.

Keycloak CloudEvent CR은 동기화 옵션 없이 기본 생성 및 삭제만 지원합니다. Keycloak 사용자 및 클라이언트 CR은 단방향 업데이트를 지원합니다(CR으로 변경 사항은 Keycloak에 반영되지만 Keycloak에서 수행된 변경 사항은 CR에서 업데이트되지 않습니다).

11.12. 업그레이드 전략

Operator가 Red Hat Single Sign-On 업그레이드를 수행하는 방법을 구성할 수 있습니다. 다음 업그레이드 전략 중에서 선택할 수 있습니다.

  • recreate: 기본 전략입니다. Operator는 모든 Red Hat Single Sign-On 복제본을 제거하고 선택적으로 백업을 생성한 다음 최신 Red Hat Single Sign-On 이미지를 기반으로 복제본을 생성합니다. 이 전략은 단일 Red Hat Single Sign-On 버전이 기본 데이터베이스에 액세스하므로 주요 업그레이드에 적합합니다. 단점은 업그레이드 중에 Red Hat Single Sign-On을 종료해야 합니다.
  • Rolling: Operator는 한 번에 하나의 복제본을 제거하고 최신 Red Hat Single Sign-On 이미지를 기반으로 다시 생성합니다. 따라서 제로 다운 타임 업그레이드를 통해 여러 Red Hat Single Sign-On 버전에서 데이터베이스에 동시에 액세스하므로 데이터베이스 마이그레이션이 필요하지 않은 마이너 버전 업그레이드에 더 적합합니다. 이 전략에서는 자동 백업이 지원되지 않습니다.

Keycloak 사용자 정의 리소스의 YAML 파일의 예

Copy to Clipboard Toggle word wrap
apiVersion: keycloak.org/v1alpha1
kind: Keycloak
metadata:
  name: example-keycloak
  labels:
   app: sso
spec:
  instances: 2
  migration:
    strategy: recreate
    backups:
      enabled: True
  externalAccess:
    enabled: True

참고

이전 버전의 Operator에 도입된 버그로 인해 구성에 따라 Red Hat Single Sign-On StatefulSet의 Selector 필드가 잘못 구성될 수 있습니다. Operator에서 이러한 상태를 감지하고 재현 전략을 사용하는 경우 올바른 Selector 필드를 사용하여 StatefulSet을 삭제하고 다시 생성합니다. Selector 필드는 변경할 수 없기 때문에 이 작업이 필요합니다.

"삭제" 작업으로 인해 매우 드물게 위험한 부작용이 발생할 수 있습니다. 예를 들어 Operator에 unknown을 StatefulSet 정의에 추가한 경우 대신 StatefulSet을 수동으로 삭제할 수 있습니다.

법적 공지

Copyright © 2024 Red Hat, Inc.
Apache License, 버전 2.0 (License")에 따라 라이센스가 부여되었으며 라이센스 준수를 제외하고 이 파일을 사용할 수 없습니다. 다음에서 라이센스 사본을 받을 수 있습니다.
관련 법률에서 요구하거나 서면으로 동의한 경우를 제외하고, 라이센스 하에 배포된 소프트웨어는 "AS IS" BASIS, skopeoOUT WARRANTIES OR CONDITIONS OF ANY KIND에 배포됩니다. 라이센스 아래의 특정 언어 관리 권한 및 제한 사항에 대한 라이선스를 참조하십시오.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat, Inc.