8.3. 예: Red Hat Single Sign-On을 사용하도록 AMQ 브로커 구성
이 예에서는 JAAS 로그인 모듈을 사용하여 인증 및 권한 부여에 Red Hat Single Sign-On을 사용하도록 AMQ Broker를 구성하는 방법을 보여줍니다.
사전 요구 사항
LDAP 디렉터리와 통합된 Red Hat Single Sign-On 인스턴스.
- LDAP 디렉터리는 AMQ Broker의 사용자 및 역할 정보로 채워집니다.
- Red Hat Single Sign-On은 LDAP 서버에서 사용자를 통합하도록 구성되어 있습니다.
- Red Hat Single Sign-On은 role-ldap-mapper를 사용하여 LDAP의 역할 정보를 Red Hat Single Sign-On에 매핑하도록 구성되어 있습니다.
다음을 포함하는 Red Hat Single Sign-On 영역
oAuth 프로토콜을 사용하여 토큰을 가져올 수 있는 AMQ 관리 콘솔과 같은 애플리케이션에 대해 다음 설정으로 구성된 클라이언트는 다음과 같습니다.
인증 흐름: 표준 흐름
유효한 리디렉션 URI: AMQ Management Console의 OpenShift Container Platform 경로입니다. 예: http://artemis-wconsj-0-svc-rte-kc-ldap-tests-0eae49.apps.redhat-412t.broker.app-services-dev.net/console/*
oAuth 프로토콜을 사용하여 토큰을 가져올 수 없는 메시징 클라이언트 애플리케이션이 있는 경우 다음 설정으로 구성된 별도의 클라이언트입니다.
인증 흐름: 직접 액세스 권한 부여
유효한 리디렉션 URI: *
Red Hat Single Sign-On의 각 영역에는 Broker
라는 클라이언트가 포함되어 있습니다. 이 클라이언트는 AMQ Broker와 관련이 없습니다.
절차
login.config
라는 텍스트 파일을 생성하고 JAAS 로그인 모듈 구성을 추가하여 AMQ Broker를 Red Hat Single Sign-On과 연결합니다. 예를 들면 다음과 같습니다.console { // ensure the operator can connect to the broker by referencing the existing properties config org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient org.apache.activemq.jaas.properties.user="artemis-users.properties" org.apache.activemq.jaas.properties.role="artemis-roles.properties" baseDir="/home/jboss/amq-broker/etc"; org.keycloak.adapters.jaas.BearerTokenLoginModule sufficient keycloak-config-file="/amq/extra/secrets/sso-jaas-config/_keycloak-bearer-token.json" role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal; }; activemq { org.keycloak.adapters.jaas.BearerTokenLoginModule sufficient keycloak-config-file="/amq/extra/secrets/sso-jaas-config/_keycloak-bearer-token.json" role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal; org.keycloak.adapters.jaas.DirectAccessGrantsLoginModule sufficient keycloak-config-file="/amq/extra/secrets/sso-jaas-config/_keycloak-direct-access.json" role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal; org.apache.activemq.artemis.spi.core.security.jaas.PrincipalConversionLoginModule required principalClassList=org.keycloak.KeycloakPrincipal; };
참고-
.json
구성 파일의 경로는/amq/extra/secrets/name-jaas-config
형식이어야 합니다. name 의 경우 문자열 값을 지정합니다. 이 절차의 뒷부분에서 생성하는 시크릿의 이름을 지정하려면 동일한 문자열 값과-jaas-config
접미사를 사용해야 합니다. -
login.config
파일에서console
이라는 영역은 AMQ Management Console 사용자 및 메시징 클라이언트를 인증하기 위해activemq
라는 영역을 인증하는 데 사용됩니다.
-
다음 로그인 모듈은 login.config
파일 예제에서 구성됩니다.
로그인 모듈 | 설명 및 사용 |
---|---|
org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule |
이는 기본 로그인 모듈이며 브로커로 인증하는 Operator에 필요한 기본 사용자가 포함된 |
org.keycloak.adapters.jaas.BearerTokenLoginModule | 이 로그인 모듈은 oAuth 프로토콜을 사용하여 토큰을 가져올 수 있는 AMQ 관리 콘솔과 같은 애플리케이션용입니다. 사용자가 브라우저 창에서 AMQ Management Console을 열면 전달자 토큰을 얻기 위해 Red Hat Single Sign-On 콘솔로 리디렉션됩니다. |
org.keycloak.adapters.jaas.DirectAccessGrantsLoginModule | 이 로그인 모듈은 oAuth 프로토콜을 사용할 수 없는 메시징 클라이언트와 같은 HTTP 이외의 애플리케이션에 필요합니다. 이 로그인 모듈을 사용하여 브로커는 먼저 Red Hat Single Sign-On에 구성된 시크릿을 사용하여 클라이언트를 인증한 다음 클라이언트를 대신하여 토큰을 가져옵니다. |
org.apache.activemq.artemis.spi.core.security.jaas.PrincipalConversionLoginModule | 이 로그인 모듈은 수신된 Keycloak 주체를 AMQ Broker에서 사용할 수 있는 JAAS 주체로 변환하는 데 필요합니다. |
login.config
파일 예에서 각 .json
속성 파일 이름에 밑줄 접두사가 있습니다. Operator는 JaasPropertiesApplied
조건의 상태를 보고할 때 밑줄이 붙은 파일을 무시합니다. 밑줄 접두사가 없는 경우 브로커가 타사 로그인 모듈에서 사용하는 속성 파일을 인식하지 못하기 때문에 JaasPropertiesApplied
조건의 상태는 OutofSync
로 표시됩니다. 상태 보고에 대한 자세한 내용은 4.3.2.1절. “보안 사용자 정의 리소스(CR)를 사용하여 기본 10.0.0.1 로그인 모듈 구성” 을 참조하십시오.
로그인 모듈에서 참조하는 각
.json
속성 파일에 대한 텍스트 파일을 생성하고 AMQ Broker를 Red Hat Single Sign-On에 연결하는 데 필요한 세부 정보를 구성합니다. 예를 들면 다음과 같습니다._keycloak-bearer-token.json
{ "realm": "amq-broker-ldap", "resource": "amq-console", "auth-server-url": "https://keycloak-svc-rte-kc-ldap-tests-0eae49.apps.412t.broker.app-services-dev.net", "principal-attribute": "preferred_username", "use-resource-role-mappings": false, "ssl-required": "external", "confidential-port": 0 }
_keycloak-direct-access.json
{ "realm": "amq-broker-ldap", "resource": "amq-broker", "auth-server-url": "https://keycloak-svc-rte-kc-ldap-tests-0eae49.apps.412t.broker.app-services-dev.net", "principal-attribute": "preferred_username", "use-resource-role-mappings": false, "ssl-required": "external", "credentials": { "secret": "Lfk6g1ZKlGzNT6eRkz0d1scM4M29Ohmn" } }
- realm
- Red Hat Single Sign-On에서 AMQ Broker 애플리케이션 및 서비스를 인증하도록 구성된 영역입니다.
- resource
- Red Hat Single Sign-On에 구성된 클라이언트의 클라이언트 ID입니다.
- auth-server-url
- Red Hat Single Sign-On 서버의 기본 URL입니다.
- principal-attribute
- UserPrincipal 이름을 채울 토큰 특성입니다.
- use-resource-role-mappings
- true로 설정하면 Red Hat Single Sign-On은 토큰 내부에서 사용자의 애플리케이션 수준 역할 매핑을 찾습니다. false인 경우 사용자 역할 매핑의 영역 수준을 확인합니다. 기본값은 false입니다.
- ssl-required
-
Red Hat Single Sign-On 서버와의 모든 통신이 HTTPS를 초과하도록 합니다. 기본값은
external
입니다. 즉, 외부 요청에 HTTPS가 기본적으로 필요합니다. - 인증 정보
- 브로커가 Red Hat Single Sign-On에 로그인하고 클라이언트를 대신하여 토큰을 얻는 데 사용하는 Red Hat Single Sign-On에 구성된 시크릿입니다.
_keycloak-js-client.json
이라는 텍스트 파일을 생성하고 AMQ Management Console에서 사용자를 자격 증명을 입력하는 Red Hat Single Sign-On 관리 콘솔의 URL로 리디렉션하는 데 필요한 구성을 추가합니다. 예를 들면 다음과 같습니다.{ "realm": "amq-broker-ldap", "clientId": "amq-console", "url": "https://keycloak-svc-rte-kc-ldap-tests-0eae49.apps.412t.broker.app-services-dev.net" }
oc create secret
명령을 사용하여 로그인 모듈 구성에서 참조되는 파일이 포함된 보안을 생성합니다. 예를 들면 다음과 같습니다.oc create secret generic sso-jaas-config --from-file=login.config --from-file=artemis-users.properties --from-file=artemis-roles.properties --from-file=_keycloak-bearer-token.json --from-file=_keycloak-direct-access.json --from-file=_keycloak-js-client.json
참고-
Operator가 로그인 모듈 구성이 포함되어 있음을 인식하고 각 브로커 Pod에 업데이트를 전파할 수 있도록 시크릿 이름에
-jaas-config
접미사가 있어야 합니다. -
시크릿 이름은
login.config
파일에 지정한.json
구성 파일의 경로에 있는 마지막 디렉터리 이름과 일치해야 합니다. 예를 들어 구성 파일의 경로가/amq/extra/secrets/sso-jaas-config
인 경우 시크릿 이름을sso-jaas-config
여야 합니다.
보안을 생성하는 방법에 대한 자세한 내용은 Kubernetes 문서 의 보안을 참조하십시오.
-
Operator가 로그인 모듈 구성이 포함되어 있음을 인식하고 각 브로커 Pod에 업데이트를 전파할 수 있도록 시크릿 이름에
브로커 배포를 위해 ActiveMQArtemis CR(사용자 정의 리소스) 인스턴스에 생성한 시크릿을 추가합니다.
OpenShift 명령줄 인터페이스 사용:
- 브로커 배포의 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
배포의 CR을 편집합니다.
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
OpenShift Container Platform 웹 콘솔 사용:
- 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 콘솔에 로그인합니다.
-
왼쪽 창에서
를 클릭합니다. - Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) operator를 클릭합니다.
- AMQ Broker 탭을 클릭합니다.
- ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
YAML 탭을 클릭합니다.
콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.
extraMounts
속성 및 secret 속성을 생성하고 시크릿 이름을 추가합니다.다음 예제에서는 CR에
custom-jaas-config
라는 보안을 추가합니다.deploymentPlan: ... extraMounts: secrets: - "sso-jaas-config" ...
ActiveMQArtemis
CR에서 인증에 Red Hat Single Sign-On을 사용하기 위해 AMQ Management Console에 필요한 hawtio 설정이 포함된 환경 변수를 생성합니다. 환경 변수의 내용은 브로커를 호스팅하는 JVM이 시작될 때 Java 애플리케이션 시작자에게 인수로 전달됩니다. 예를 들면 다음과 같습니다.env: - name: JAVA_ARGS_APPEND value: -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Dhawtio.keycloakEnabled=true -Dhawtio.keycloakClientConfig=/amq/extra/secrets/sso-jaas-config/_keycloak-js-client.json -Dhawtio.authenticationEnabled=true -Dhawtio.realm=console
hawtio 설정에 대한 자세한 내용은 hawtio 설명서 를 참조하십시오.
ActiveMQArtemis
CR의spec
섹션에서brokerProperties
속성을 추가하고 LDAP 디렉터리에 구성된 역할에 대한 권한을 추가합니다. 단일 주소에 역할 권한을 부여할 수 있습니다. 또는#
기호를 사용하여 와일드카드를 지정하여 모든 주소에 역할 권한을 부여할 수 있습니다. 예를 들면 다음과 같습니다.spec: ... brokerProperties: - securityRoles.#.producers.send=true - securityRoles.#.consumers.consume=true ...
CR을 저장합니다.
Operator는 각 Pod의
/amq/extra/secrets/시크릿 이름
디렉터리에 있는 시크릿에 파일을 마운트하고 기본login.config
파일 대신 SSO 구성이 포함된 마운트된login.config
파일을 읽도록 브로커 JVM을 구성합니다.