4.3. 인증 및 권한 부여 구성
기본적으로 AMQ Broker는 Java Authentication and Authorization Service(JAAS) 속성 로그인 모듈을 사용하여 사용자를 인증하고 권한을 부여합니다. 기본 login 모듈의 구성은 각 브로커 Pod의 /home/jboss/amq-broker/etc/login.config
파일에 저장되고 동일한 디렉터리의 artemis-users.properties
및 artemis-roles.properties 파일에서
사용자 및 역할 정보를 읽습니다. ActiveMQArtemisSecurity
Custom Resource(CR)를 업데이트하여 기본 로그인 모듈의 속성 파일에 사용자 및 역할 정보를 추가합니다.
사용자 및 역할 정보를 기본 속성 파일에 추가하도록 ActiveMQArtemisSecurity
CR을 업데이트하는 대안은 시크릿에서 하나 이상의 login 모듈을 구성하는 것입니다. 이 보안은 각 브로커 Pod에 파일로 마운트됩니다. 시크릿에 CloudEvent 로그인 모듈을 구성하면 사용자 및 역할 정보를 추가하기 위해 ActiveMQArtemisSecurity
CR을 사용하여 다음과 같은 이점이 있습니다.
- 시크릿에서 속성 로그인 모듈을 구성하는 경우 브로커는 속성 파일을 업데이트할 때마다 다시 시작할 필요가 없습니다. 예를 들어 새 사용자를 속성 파일에 추가하고 시크릿을 업데이트하면 브로커를 다시 시작하지 않아도 변경 사항이 적용됩니다.
-
ActiveMQArtemisSecurity
CRD에 정의되지 않은 iPXE 로그인 모듈을 구성하여 사용자를 인증할 수 있습니다. 예를 들어 LDAP 로그인 모듈 또는 기타 login 모듈을 구성할 수 있습니다.
AMQ Broker에 대한 인증 및 권한 부여를 구성하는 두 가지 방법은 다음 섹션에 설명되어 있습니다.
4.3.1. 시크릿에서 CloudEvent 로그인 모듈 구성
시크릿에서 CloudEvent 로그인 모듈을 구성하여 AMQ Broker를 사용하여 사용자를 인증할 수 있습니다. 보안을 생성한 후 기본 브로커 CR(사용자 정의 리소스)의 보안에 대한 참조를 추가하고 CR에서 사용자에게 AMQ Broker에 대한 액세스 권한을 부여하도록 권한을 구성해야 합니다.
절차
새 10.0.0.1 로그인 모듈 구성으로 텍스트 파일을 생성하고 파일을
login.config
로 저장합니다. 파일을login.config
로 저장하면 텍스트 파일에서 생성한 시크릿에 올바른 키가 삽입됩니다. 다음은 로그인 모듈 구성의 예입니다.activemq { org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient reload=true org.apache.activemq.jaas.properties.user="new-users.properties" org.apache.activemq.jaas.properties.role="new-roles.properties"; org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient reload=false org.apache.activemq.jaas.properties.user="artemis-users.properties" org.apache.activemq.jaas.properties.role="artemis-roles.properties" baseDir="/home/jboss/amq-broker/etc"; };
시크릿에서 CloudEvent 로그인 모듈을 구성하고 CR의 보안에 대한 참조를 추가한 후 기본 로그인 모듈이 더 이상 AMQ Broker에서 사용되지 않습니다. 그러나 기본 로그인 모듈에서 참조되는
artemis-users.properties
파일의 사용자는 Operator에서 브로커를 인증하는 데 필요합니다. 새 CloudEvent 로그인 모듈을 구성한 후 Operator가 브로커로 인증할 수 있도록 하려면 다음 중 하나를 수행해야 합니다.-
위 예제와 같이 새 로그인 모듈 구성에 기본 properties login 모듈을 포함합니다. 이 예제에서 기본 속성 로그인 모듈은
artemis-users.properties
및artemis-roles.properties
파일을 사용합니다. 새 로그인 모듈 구성에 기본 로그인 모듈을 포함하는 경우baseDir
을 각 브로커 Pod의 기본 속성 파일이 포함된/home/jboss/amq-broker/etc
디렉터리로 설정해야 합니다. Operator에서 브로커로 인증하는 데 필요한 사용자 및 역할 정보를 새 로그인 모듈 구성에서 참조하는 속성 파일에 추가합니다. 브로커 Pod의
/home/jboss/amq-broker/etc 디렉터리에 있는 기본
파일에서 이 정보를 복사할 수 있습니다.artemis-users.properties
및artemis-
roles.properties참고로그인 모듈에서 참조된 속성 파일은 브로커가 로그인 모듈을 처음 호출할 때만 로드됩니다. 브로커는 사용자를 인증할 로그인 모듈을 찾을 때까지
login.config
파일에 나열된 순서대로 로그인 모듈을 호출합니다.login.config
파일 끝에 Operator에서 사용하는 인증 정보가 포함된 login 모듈을 배치하면 브로커가 Operator를 인증할 때 이전의 모든 로그인 모듈이 호출됩니다. 결과적으로 속성 파일이 브로커에 표시되지 않음을 나타내는 상태 메시지가 지워집니다.
-
위 예제와 같이 새 로그인 모듈 구성에 기본 properties login 모듈을 포함합니다. 이 예제에서 기본 속성 로그인 모듈은
생성한
login.config
파일에 properties 로그인 모듈이 포함된 경우 모듈에 지정된 사용자 및 역할 파일에 사용자 및 역할 정보가 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.- new-users.properties
ruben=ruben01! anne=anne01! rick=rick01! bob=bob01!
- new-roles.properties
admin=ruben, rick group1=bob group2=anne
oc create secret
명령을 사용하여 새 로그인 모듈 구성으로 생성한 텍스트 파일에서 시크릿을 생성합니다. 로그인 모듈 구성에 properties 로그인 모듈이 포함된 경우 연결된 사용자 및 역할 파일도 시크릿에 포함합니다. 예를 들면 다음과 같습니다.oc create secret generic custom-jaas-config --from-file=login.config --from-file=new-users.properties --from-file=new-roles.properties
참고Operator가 로그인 모듈 구성이 포함되어 있음을 인식하고 각 브로커 Pod에 업데이트를 전파할 수 있도록 시크릿 이름에
-jaas-config
접미사가 있어야 합니다.보안을 생성하는 방법에 대한 자세한 내용은 Kubernetes 문서 의 보안을 참조하십시오.
브로커 배포를 위해 생성한 시크릿을 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
요소와secrets
요소를 생성하고 시크릿 이름을 추가합니다. 다음 예제에서는 CR에custom-jaas-config
라는 보안을 추가합니다.deploymentPlan: ... extraMounts: secrets: - "custom-jaas-config" ...
CR에서 브로커에 구성된 역할에 권한을 부여합니다.
CR의
spec
섹션에서brokerProperties
요소를 추가하고 권한을 추가합니다. 단일 주소에 역할 권한을 부여할 수 있습니다. 또는#
기호를 사용하여 모든 주소에 역할 권한을 부여하여 와일드카드 일치를 지정할 수 있습니다. 예를 들면 다음과 같습니다.spec: ... brokerProperties: - securityRoles.#.group2.send=true - securityRoles.#.group1.consume=true - securityRoles.#.group1.createAddress=true - securityRoles.#.group1.createNonDurableQueue=true - securityRoles.#.group1.browse=true ...
이 예에서 group2 역할에는 모든 주소에 대한
전송
권한이 할당되고 group1 역할에는consume
,createAddress
,createNonDurableQueue
및 모든 주소에 대한 권한을검색합니다
.
CR을 저장합니다.
Operator는 각 Pod의
/amq/extra/secrets/시크릿 이름
디렉터리에 있는 시크릿에login.config
login.config
파일 대신 마운트된 login.config 파일을 읽도록 브로커 JVM을 구성합니다.login.config
파일에 properties 로그인 모듈이 포함된 경우 참조된 사용자 및 역할 속성 파일도 각 포드에 마운트됩니다.CR의 상태 정보를 보고 배포의 브로커가 인증을 위해 시크릿의 10.0.0.1 로그인 모듈을 사용하고 있는지 확인합니다.
OpenShift 명령줄 인터페이스 사용:
브로커의 CR에서 상태 조건을 가져옵니다.
$ oc get activemqartemis -o yaml
OpenShift 웹 콘솔 사용:
-
CR에서
status
섹션으로 이동합니다.
-
CR에서
상태 정보에서 브로커가 시크릿에 구성된 10.0.0.1 로그인 모듈을 사용하고 있음을 나타내는
JaasPropertiesApplied
유형이 있는지 확인합니다. 예를 들면 다음과 같습니다.- lastTransitionTime: "2023-02-06T20:50:01Z" message: "" reason: Applied status: "True" type: JaasPropertiesApplied
시크릿의 파일을 업데이트할 때
reason
필드의 값은 OpenShift Container Platform이 각 브로커 포드에 시크릿의 최신 파일을 전달할 때까지Sync
가 노출됩니다. 예를 들어 새 사용자를new-users-properties
파일에 추가하고 보안을 업데이트하면 업데이트된 파일이 각 Pod에 전파될 때까지 다음 상태 정보가 표시됩니다.- lastTransitionTime: "2023-02-06T20:55:20Z" message: 'new-users.properties status out of sync, expected: 287641156, current: 2177044732' reason: OutOfSync status: "False" type: JaasPropertiesApplied
시크릿에서 참조되는 속성 파일에서 사용자 또는 역할 정보를 업데이트할 때
oc set data
명령을 사용하여 시크릿을 업데이트합니다.login.config
파일을 포함하여 모든 파일을 시크릿에 다시 읽혀야 합니다. 예를 들어 이 절차의 앞부분에서 생성한new-users.properties
파일에 새 사용자를 추가하는 경우 다음 명령을 사용하여custom-jaas-config
시크릿을 업데이트합니다.oc set data secret/custom-jaas-config --from-file=login.config=login.config --from-file=new-users.properties=new-users.properties --from-file=new-roles.properties=new-roles.properties
브로커 JVM은 시작 시에만 login.config
파일에서 구성을 읽습니다. 예를 들어 새 로그인 모듈을 추가하고 보안을 업데이트하기 위해 login.config
파일에서 구성을 변경하면 브로커는 브로커가 다시 시작될 때까지 새 구성을 사용하지 않습니다.
추가 리소스
8.3절. “예: Red Hat Single Sign-On을 사용하도록 AMQ 브로커 구성”
10.0.0.1 로그인 모듈 형식에 대한 자세한 내용은 Login Configuration File 을 참조하십시오.
4.3.2. 보안 사용자 정의 리소스(CR)를 사용하여 기본 10.0.0.1 로그인 모듈 구성
ActiveMQArtemisSecurity
Custom Resource(CR)를 사용하여 기본 CloudEvent 속성 로그인 모듈에서 사용자 및 역할 정보를 구성하여 AMQ Broker를 사용하여 사용자를 인증할 수 있습니다. 시크릿을 사용하여 AMQ Broker에 인증 및 권한 부여를 구성하는 다른 방법은 4.3.1절. “시크릿에서 CloudEvent 로그인 모듈 구성” 을 참조하십시오.
4.3.2.1. 보안 사용자 정의 리소스(CR)를 사용하여 기본 10.0.0.1 로그인 모듈 구성
다음 절차에서는 보안 사용자 정의 리소스(CR)를 사용하여 기본 10.0.0.1 로그인 모듈을 구성하는 방법을 보여줍니다.
사전 요구 사항
AMQ Broker Operator가 설치되어 있어야 합니다. Operator를 설치하는 두 가지 다른 방법에 대한 자세한 내용은 다음을 참조하십시오.
- 보안 브로커에 설명된 대로 브로커 보안에 대해 잘 알고 있어야 합니다. https://access.redhat.com/documentation/en-us/red_hat_amq_broker/7.11/html-single/configuring_amq_broker/#assembly-br-securing-brokers_configuring
브로커 배포를 생성하기 전이나 후에 보안 CR을 배포할 수 있습니다. 그러나 브로커 배포를 생성한 후 보안 CR을 배포하면 브로커 Pod가 다시 시작하여 새 구성을 수락합니다.
CR(사용자 정의 리소스) 인스턴스 구성을 시작하여 브로커 배포에 대한 사용자 및 관련 보안 구성을 정의합니다.
OpenShift 명령줄 인터페이스 사용:
브로커 배포의 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
oc login -u <user> -p <password> --server=<host:port>
배포의 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 인스턴스를 구성할 수 있습니다.
CR의
spec
섹션에서 사용자 및 역할을 정의하는 행을 추가합니다. 예를 들면 다음과 같습니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemisSecurity metadata: name: ex-prop spec: loginModules: propertiesLoginModules: - name: "prop-module" users: - name: "sam" password: "samspassword" roles: - "sender" - name: "rob" password: "robspassword" roles: - "receiver" securityDomains: brokerDomain: name: "activemq" loginModules: - name: "prop-module" flag: "sufficient" securitySettings: broker: - match: "#" permissions: - operationType: "send" roles: - "sender" - operationType: "createAddress" roles: - "sender" - operationType: "createDurableQueue" roles: - "sender" - operationType: "consume" roles: - "receiver" ...
참고항상 이전 예제의 요소 값을 지정합니다. 예를 들어
securityDomains.brokerDomain
또는 역할의 값을 지정하지 않으면 결과 구성으로 인해 예기치 않은 결과가 발생할 수 있습니다.앞의 구성은 두 사용자를 정의합니다.
-
sender
라는 역할로sam
이라는 사용자를 정의하는propertiesLoginModule
이라는prop-module
. -
receiver
라는 역할이 있는 developer라는 사용자를 정의하는prop-
이라는module
propertiesLoginModule
입니다.
이러한 역할의 속성은
securityDomains
섹션의broker
Domainsend
역할은 해당 역할을 가진 사용자가 모든 주소에 있는 영구 대기열을 생성할 수 있도록 정의되었습니다. 기본적으로 구성은 현재 네임스페이스의 CR에 정의된 모든 배포된 브로커에 적용됩니다. 특정 브로커 배포로 구성을 제한하려면 8.1.3절. “보안 사용자 정의 리소스 구성 참조” 에 설명된applyToCrNames
옵션을 사용합니다.참고metadata
섹션에서namespace
속성을 포함하고 OpenShift Container Platform 웹 콘솔을 사용하여 CR 인스턴스를 생성하는 경우에만 값을 지정해야 합니다. 지정해야 하는 값은 브로커 배포를 위한 OpenShift 프로젝트의 이름입니다.-
CR 인스턴스를 배포합니다.
OpenShift 명령줄 인터페이스 사용:
- CR 파일을 저장합니다.
브로커 배포를 위해 프로젝트로 전환합니다.
$ oc project <project_name>
CR 인스턴스를 생성합니다.
$ oc create -f <path/to/security_custom_resource_instance>.yaml
OpenShift 웹 콘솔 사용:
- CR 구성을 마쳤으면 생성을 클릭합니다.
4.3.2.2. 시크릿에 사용자 암호 저장
4.3.2.1절. “보안 사용자 정의 리소스(CR)를 사용하여 기본 10.0.0.1 로그인 모듈 구성” 절차에서 사용자 암호는 ActiveMQArtemisSecurity
CR에 일반 텍스트로 저장됩니다. CR에 암호를 일반 텍스트로 저장하지 않으려면 CR에서 암호를 제외하여 시크릿에 저장할 수 있습니다. CR을 적용하면 Operator는 시크릿에서 각 사용자의 암호를 검색하여 브로커 Pod의 artemis-users.properties
파일에 삽입합니다.
절차
oc create secret
명령을 사용하여 보안을 생성하고 각 사용자의 이름과 암호를 추가합니다. 보안 이름은security-properties-모듈 이름
지정 규칙을 따라야 합니다. 여기서 모듈 이름은 CR에 구성된 로그인 모듈의 이름입니다. 예를 들면 다음과 같습니다.oc create secret generic security-properties-prop-module \ --from-literal=sam=samspassword \ --from-literal=rob=robspassword
CR의
spec
섹션에서 역할 정보와 함께 시크릿에 지정한 사용자 이름을 추가하지만 각 사용자의 암호는 포함하지 않습니다. 예를 들면 다음과 같습니다.apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemisSecurity metadata: name: ex-prop spec: loginModules: propertiesLoginModules: - name: "prop-module" users: - name: "sam" roles: - "sender" - name: "rob" roles: - "receiver" securityDomains: brokerDomain: name: "activemq" loginModules: - name: "prop-module" flag: "sufficient" securitySettings: broker: - match: "#" permissions: - operationType: "send" roles: - "sender" - operationType: "createAddress" roles: - "sender" - operationType: "createDurableQueue" roles: - "sender" - operationType: "consume" roles: - "receiver" ...
CR 인스턴스를 배포합니다.
OpenShift 명령줄 인터페이스 사용:
- CR 파일을 저장합니다.
브로커 배포를 위해 프로젝트로 전환합니다.
$ oc project <project_name>
CR 인스턴스를 생성합니다.
$ oc create -f <path/to/address_custom_resource_instance>.yaml
OpenShift 웹 콘솔 사용:
- CR 구성을 완료하면 생성을 클릭합니다.
추가 리소스
OpenShift Container Platform의 보안에 대한 자세한 내용은 OpenShift Container Platform 설명서의 Pod에 중요한 데이터 제공을 참조하십시오.