검색

4.3. 인증 및 권한 부여 구성

download PDF

기본적으로 AMQ Broker는 Java Authentication and Authorization Service(JAAS) 속성 로그인 모듈을 사용하여 사용자를 인증하고 권한을 부여합니다. 기본 login 모듈의 구성은 각 브로커 Pod의 /home/jboss/amq-broker/etc/login.config 파일에 저장되고 동일한 디렉터리의 artemis-users.propertiesartemis-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에 대한 액세스 권한을 부여하도록 권한을 구성해야 합니다.

절차

  1. 새 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.propertiesartemis-roles.properties 파일을 사용합니다. 새 로그인 모듈 구성에 기본 로그인 모듈을 포함하는 경우 baseDir 을 각 브로커 Pod의 기본 속성 파일이 포함된 /home/jboss/amq-broker/etc 디렉터리로 설정해야 합니다.
    • Operator에서 브로커로 인증하는 데 필요한 사용자 및 역할 정보를 새 로그인 모듈 구성에서 참조하는 속성 파일에 추가합니다. 브로커 Pod의 /home/jboss/amq-broker/etc 디렉터리에 있는 기본 artemis-users.propertiesartemis- roles.properties 파일에서 이 정보를 복사할 수 있습니다.

      참고

      로그인 모듈에서 참조된 속성 파일은 브로커가 로그인 모듈을 처음 호출할 때만 로드됩니다. 브로커는 사용자를 인증할 로그인 모듈을 찾을 때까지 login.config 파일에 나열된 순서대로 로그인 모듈을 호출합니다. login.config 파일 끝에 Operator에서 사용하는 인증 정보가 포함된 login 모듈을 배치하면 브로커가 Operator를 인증할 때 이전의 모든 로그인 모듈이 호출됩니다. 결과적으로 속성 파일이 브로커에 표시되지 않음을 나타내는 상태 메시지가 지워집니다.

  2. 생성한 login.config 파일에 properties 로그인 모듈이 포함된 경우 모듈에 지정된 사용자 및 역할 파일에 사용자 및 역할 정보가 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.

    new-users.properties
    ruben=ruben01!
    anne=anne01!
    rick=rick01!
    bob=bob01!
    new-roles.properties
    admin=ruben, rick
    group1=bob
    group2=anne
  3. 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 문서 의 보안을 참조하십시오.

  4. 브로커 배포를 위해 생성한 시크릿을 CR(사용자 정의 리소스) 인스턴스에 추가합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포의 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
      2. 배포의 CR을 편집합니다.

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 왼쪽 창에서 Operators Installed Operator 를 클릭합니다.
      3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) operator를 클릭합니다.
      4. AMQ Broker 탭을 클릭합니다.
      5. ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
      6. YAML 탭을 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

  5. extraMounts 요소와 secrets 요소를 생성하고 시크릿 이름을 추가합니다. 다음 예제에서는 CR에 custom-jaas-config 라는 보안을 추가합니다.

    deploymentPlan:
      ...
      extraMounts:
        secrets:
        - "custom-jaas-config"
      ...
  6. CR에서 브로커에 구성된 역할에 권한을 부여합니다.

    1. 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 및 모든 주소에 대한 권한을 검색합니다.

  7. CR을 저장합니다.

    Operator는 각 Pod의 /amq/extra/secrets/시크릿 이름 디렉터리에 있는 시크릿에 login.config 파일을 마운트하고 기본 login.config 파일 대신 마운트된 login.config 파일을 읽도록 브로커 JVM을 구성합니다. login.config 파일에 properties 로그인 모듈이 포함된 경우 참조된 사용자 및 역할 속성 파일도 각 포드에 마운트됩니다.

  8. CR의 상태 정보를 보고 배포의 브로커가 인증을 위해 시크릿의 10.0.0.1 로그인 모듈을 사용하고 있는지 확인합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커의 CR에서 상태 조건을 가져옵니다.

        $ oc get activemqartemis -o yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR에서 status 섹션으로 이동합니다.
    3. 상태 정보에서 브로커가 시크릿에 구성된 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
  9. 시크릿에서 참조되는 속성 파일에서 사용자 또는 역할 정보를 업데이트할 때 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 로그인 모듈을 구성하는 방법을 보여줍니다.

사전 요구 사항

절차

브로커 배포를 생성하기 전이나 후에 보안 CR을 배포할 수 있습니다. 그러나 브로커 배포를 생성한 후 보안 CR을 배포하면 브로커 Pod가 다시 시작하여 새 구성을 수락합니다.

  1. CR(사용자 정의 리소스) 인스턴스 구성을 시작하여 브로커 배포에 대한 사용자 및 관련 보안 구성을 정의합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포의 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        oc login -u <user> -p <password> --server=<host:port>
      2. 배포의 CR을 편집합니다.

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 왼쪽 창에서 Operators Installed Operator 를 클릭합니다.
      3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) operator를 클릭합니다.
      4. AMQ Broker 탭을 클릭합니다.
      5. ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
      6. YAML 탭을 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

  2. 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 Domain 및 broker 섹션에 정의되어 있습니다. 예를 들어 send 역할은 해당 역할을 가진 사용자가 모든 주소에 있는 영구 대기열을 생성할 수 있도록 정의되었습니다. 기본적으로 구성은 현재 네임스페이스의 CR에 정의된 모든 배포된 브로커에 적용됩니다. 특정 브로커 배포로 구성을 제한하려면 8.1.3절. “보안 사용자 정의 리소스 구성 참조” 에 설명된 applyToCrNames 옵션을 사용합니다.

    참고

    metadata 섹션에서 namespace 속성을 포함하고 OpenShift Container Platform 웹 콘솔을 사용하여 CR 인스턴스를 생성하는 경우에만 값을 지정해야 합니다. 지정해야 하는 값은 브로커 배포를 위한 OpenShift 프로젝트의 이름입니다.

  3. CR 인스턴스를 배포합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR 파일을 저장합니다.
      2. 브로커 배포를 위해 프로젝트로 전환합니다.

        $ oc project <project_name>
      3. CR 인스턴스를 생성합니다.

        $ oc create -f <path/to/security_custom_resource_instance>.yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR 구성을 마쳤으면 생성을 클릭합니다.

4.3.2.2. 시크릿에 사용자 암호 저장

4.3.2.1절. “보안 사용자 정의 리소스(CR)를 사용하여 기본 10.0.0.1 로그인 모듈 구성” 절차에서 사용자 암호는 ActiveMQArtemisSecurity CR에 일반 텍스트로 저장됩니다. CR에 암호를 일반 텍스트로 저장하지 않으려면 CR에서 암호를 제외하여 시크릿에 저장할 수 있습니다. CR을 적용하면 Operator는 시크릿에서 각 사용자의 암호를 검색하여 브로커 Pod의 artemis-users.properties 파일에 삽입합니다.

절차

  1. oc create secret 명령을 사용하여 보안을 생성하고 각 사용자의 이름과 암호를 추가합니다. 보안 이름은 security-properties-모듈 이름 지정 규칙을 따라야 합니다. 여기서 모듈 이름은 CR에 구성된 로그인 모듈의 이름입니다. 예를 들면 다음과 같습니다.

    oc create secret generic security-properties-prop-module \
      --from-literal=sam=samspassword \
      --from-literal=rob=robspassword
  2. 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"
                  ...
  3. CR 인스턴스를 배포합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR 파일을 저장합니다.
      2. 브로커 배포를 위해 프로젝트로 전환합니다.

        $ oc project <project_name>
      3. CR 인스턴스를 생성합니다.

        $ oc create -f <path/to/address_custom_resource_instance>.yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR 구성을 완료하면 생성을 클릭합니다.

추가 리소스

OpenShift Container Platform의 보안에 대한 자세한 내용은 OpenShift Container Platform 설명서의 Pod에 중요한 데이터 제공을 참조하십시오.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.