8.3. 로드 밸런서 또는 프록시 설정
이 섹션에서는 클러스터형 Red Hat Single Sign-On 배포 앞에 역방향 프록시 또는 로드 밸런서를 배치하기 전에 구성해야 하는 여러 사항에 대해 설명합니다. 또한 클러스터된 도메인 예제 를 사용한 로드 밸런서의 구성을 설명합니다.
8.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 서버 인스턴스로 전달하는 공용 네트워크에 프런트 엔드 프록시가 있다는 것입니다. 이 시나리오에서는 실제 클라이언트 IP 주소가 Red Hat Single Sign-On 서버 인스턴스에서 전달 및 처리하도록 몇 가지 추가 구성이 있습니다. 특히 다음 내용에 유의하십시오.
-
역방향 프록시 또는 로드 밸런서를 구성하여
X-Forwarded-For및X-Forwarded-ProtoHTTP 헤더를 올바르게 설정합니다. - 원래 'Host' HTTP 헤더를 유지하도록 역방향 프록시 또는 로드 밸런서를 구성합니다.
-
X-Forwarded-For헤더에서 클라이언트의 IP 주소를 읽도록 인증 서버를 구성합니다.
X-Forwarded-For 및 X-Forwarded-Proto HTTP 헤더를 생성하고 원래 Host HTTP 헤더를 보존하도록 프록시를 구성하는 것은 이 가이드의 범위를 벗어납니다. 프록시를 통해 X-Forwared-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 )을 열고 urn:jboss:domain:undertow:6.0 XML 블록을 찾습니다.
X-Forwarded-For HTTP Config
http-listener 요소에 proxy-address-forwarding 속성을 추가합니다. 값을 true 로 설정합니다.
프록시가 HTTP 대신 requests(즉, Apache HTTPD + mod-cluster)를 사용하는 경우 약간 다르게 구성해야 합니다. http-listener 를 수정하는 대신, 이 정보를 패킷에서 가져오기 위해 필터를 추가해야 합니다.
X-Forwarded-For Cryostat Config
8.3.2. 역방향 프록시로 HTTPS/SSL 활성화 링크 복사링크가 클립보드에 복사되었습니다!
역방향 프록시에서 SSL에 포트 8443을 사용하지 않는 경우 리디렉션되는 포트 HTTPS 트래픽을 구성해야 합니다.
http-listener 요소에 redirect-socket 속성을 추가합니다. 값은 또한 정의해야 하는 소켓 바인딩을 가리키는 proxy-https 여야 합니다.
그런 다음 socket-binding - group 요소에 새 socket-binding 요소를 추가합니다.
8.3.3. 설정 확인 링크 복사링크가 클립보드에 복사되었습니다!
역방향 프록시를 통해 /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 문서가 표시됩니다. 끝점이 역방향 프록시 또는 로드 밸런서의 주소(scheme, 도메인 및 포트)로 시작하는지 확인합니다. 이렇게 하면 Red Hat Single Sign-On이 올바른 엔드포인트를 사용하고 있는지 확인합니다.
또한 Red Hat Single Sign-On에 요청에 대한 올바른 소스 IP 주소가 표시되는지 확인해야 합니다. 잘못된 사용자 이름 및/또는 암호를 사용하여 관리자 콘솔에 로그인할 수 있는지 확인합니다. 서버 로그에 다음과 같은 경고가 표시됩니다.
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
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
ipAddress 값이 역방향 프록시 또는 로드 밸런서의 IP 주소가 아닌 로그인하려는 시스템의 IP 주소인지 확인합니다.
8.3.4. Built-In Load Balancer 사용 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 클러스터형 도메인 예에 설명된 기본 로드 밸런서 구성에 대해 설명합니다.
Clustered Domain Example 은 하나의 시스템에서만 실행되도록 설계되었습니다. 다른 호스트에 슬레이브를 가져오려면 다음을 수행해야 합니다.
- 새 호스트 슬레이브를 가리키도록 domain.xml 파일을 편집합니다.
- 서버 배포를 복사합니다. domain.xml,host.xml 또는 host-master.xml 파일이 필요하지 않습니다. 또한 standalone/ 디렉터리도 필요하지 않습니다.
- host-slave.xml 파일을 편집하여 사용된 바인드 주소를 변경하거나 명령줄에서 재정의합니다.
8.3.4.1. 로드 밸런서를 사용하여 새 호스트 등록 링크 복사링크가 클립보드에 복사되었습니다!
먼저 domain.xml 의 로드 밸런서 구성에 새 호스트 슬레이브를 등록합니다. 이 파일을 열고 load-balancer 프로필의 undertow 구성으로 이동합니다. reverse-proxy XML 블록 내에 remote- 이라는 새 호스트 정의를 추가합니다.
host 3
domain.xml reverse-proxy config
output-socket-binding 은 domain.xml 파일에서 나중에 구성된 socket-binding 을 가리키는 논리 이름입니다. instance-id 특성은 로드 밸런싱 시 고정 세션을 활성화하기 위해 쿠키에서 이 값을 사용하므로 새 호스트에 고유해야 합니다.
다음으로 load-balancer-sockets socket-binding-group 으로 이동하고 remote-host3 에 대한 outbound-socket-binding 을 추가합니다. 이 새 바인딩은 새 호스트의 호스트와 포트를 가리켜야 합니다.
domain.xml outbound-socket-binding
8.3.4.2. 마스터 바인딩 주소 링크 복사링크가 클립보드에 복사되었습니다!
다음으로 해야 할 일은 마스터 호스트의 공용 및 관리 바인딩 주소를 변경하는 것입니다. 주소 바인딩 장에 설명된 대로 domain.xml 파일을 편집하거나 다음과 같이 명령줄에서 이러한 바인딩 주소를 지정합니다.
domain.sh --host-config=host-master.xml -Djboss.bind.address=192.168.0.2 -Djboss.bind.address.management=192.168.0.2
$ domain.sh --host-config=host-master.xml -Djboss.bind.address=192.168.0.2 -Djboss.bind.address.management=192.168.0.2
8.3.4.3. 호스트 슬라브 바인딩 주소 링크 복사링크가 클립보드에 복사되었습니다!
다음으로 공용,관리 및 도메인 컨트롤러 바인딩 주소 (jboss.domain.master-address)를 변경해야 합니다. host-slave.xml 파일을 편집하거나 다음과 같이 명령줄에서 지정합니다.
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
$ 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.address 및 jboss.bind.addres.management 의 값은 호스트 슬레이브의 IP 주소와 관련이 있습니다. jboss.domain.master.address 의 값은 마스터 호스트의 관리 주소인 도메인 컨트롤러의 IP 주소여야 합니다.
8.3.5. 다른 로드 밸런서 구성 링크 복사링크가 클립보드에 복사되었습니다!
다른 소프트웨어 기반 로드 밸런서 사용 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드 의 로드 밸런싱 섹션을 참조하십시오.