RabbitMQ 사용자 및 권한 관리: 명령줄 가이드

RabbitMQ의 강력한 사용자 및 권한 관리를 위해 `rabbitmqctl` 명령어를 완벽하게 익히세요. 이 종합 가이드는 새 사용자 생성, 태그를 이용한 관리자 또는 애플리케이션 역할 할당, 세분화된 가상 호스트 권한(읽기/쓰기/구성) 설정, 그리고 안전한 액세스 철회에 대한 단계별 지침을 제공하여, 명령줄을 통한 통제된 관리를 보장합니다.

49 조회수

RabbitMQ 사용자 및 권한 관리: 명령줄 가이드

사용자를 관리하고 액세스 권한을 정의하는 것은 모든 메시지 브로커 인프라를 보호하는 기본 측면입니다. 강력한 메시지 브로커인 RabbitMQ는 주로 rabbitmqctl 명령줄 유틸리티를 통해 관리되는 강력한 사용자 인증 및 권한 부여 메커니즘을 제공합니다. 이 가이드는 rabbitmqctl을 사용하여 사용자 생성 및 역할 할당부터 가상 호스트 전반에 걸친 세부 권한 설정까지 마스터하는 데 중점을 둡니다.

적절하게 구성된 권한은 애플리케이션과 관리자가 필요한 곳에서만 브로커와 상호 작용하도록 보장하여 보안 위험과 운영 혼란을 최소화합니다. 이러한 명령줄 도구를 활용하면 복잡한 보안 설정을 효율적으로 스크립팅하고 자동화할 수 있습니다.

전제 조건

계속하기 전에 다음 사항을 확인하십시오.

  1. RabbitMQ 서버 설치됨: 브로커가 실행 중이어야 합니다.
  2. rabbitmqctl 액세스: 실행 중인 RabbitMQ 인스턴스에 대해 명령을 실행하는 데 필요한 권한(일반적으로 관리자 권한)이 있어야 합니다. 명령은 일반적으로 RabbitMQ 서버가 있는 머신에서 실행됩니다.

rabbitmqctl을 사용한 사용자 관리

rabbitmqctl 도구는 모든 사용자 관련 작업에 대해 user_* 계열 명령을 사용합니다. RabbitMQ 사용자는 운영 체제 사용자(OS user)와는 별개라는 점을 이해하는 것이 중요합니다.

1. 기존 사용자 나열

현재 브로커에 액세스할 수 있는 사용자를 보려면 list_users 명령을 사용합니다.

rabbitmqctl list_users

예시 출력:

사용자 나열 중 ...
user: guest   tags: [administrator]
user: app_prod tags: [policymaker]

2. 새 사용자 생성

새 서비스 계정이나 관리자를 설정할 때 사용자를 생성하고 초기 암호를 할당해야 합니다.

securepass 암호로 api_user라는 사용자를 생성하려면 다음을 사용합니다.

rabbitmqctl add_user api_user securepass

3. 사용자 태그(역할) 수정

사용자 태그는 특정 관리 기능을 부여하는 사전 정의된 역할을 정의합니다. 가장 일반적인 태그는 administrator, policymaker, management입니다.

  • administrator: 사용자, 권한, vhost를 수정하고 클러스터 매개변수를 설정할 수 있습니다.
  • policymaker: 정책(예: 고가용성 또는 메시지 TTL)을 설정할 수 있습니다.
  • management: 관리 플러그인 인터페이스를 사용할 수 있습니다(설치된 경우).

현재 태그 보기

현재 역할을 보려면 list_user_tags를 사용합니다.

rabbitmqctl list_user_tags api_user

태그 설정 또는 덮어쓰기

api_usermanagement 태그를 할당하려면 다음을 사용합니다.

rabbitmqctl set_user_tags api_user management

기존 태그 외에 policymaker 태그를 추가하려면 add_tag 명령을 사용합니다. (참고: set_user_tags는 기본적으로 모든 기존 태그를 덮어쓰므로, 여러 태그를 추가하려면 모든 태그를 지정해야 합니다. 이 가이드에서는 set_user_tags를 사용하여 여러 태그를 설정하는 예를 따릅니다.)

rabbitmqctl set_user_tags api_user administrator policymaker

태그 제거

특정 태그를 제거하려면 다음을 사용합니다.

rabbitmqctl clear_user_tags api_user policymaker

4. 사용자 암호 변경

자격 증명을 갱신해야 하는 경우 change_password 명령을 사용합니다.

rabbitmqctl change_password api_user newsecurepass123

5. 사용자 삭제

사용자를 완전히 제거하고 연결된 모든 액세스를 취소하려면 다음을 사용합니다.

rabbitmqctl delete_user api_user

경고: 보안상의 이유로 프로덕션 환경에서는 일반적으로 guest 사용자를 삭제하는 것이 권장되지만, 먼저 새 관리자 사용자를 생성해야 합니다.

가상 호스트 권한 관리

RabbitMQ의 권한은 가상 호스트(vhost)별로 정의됩니다. vhost는 큐, 익스체인지 및 바인딩을 위한 네임스페이스 역할을 합니다. 기본적으로 RabbitMQ에는 /라는 루트 vhost가 있습니다.

1. Vhost 나열

먼저 사용 가능한 vhost를 확인합니다.

rabbitmqctl list_vhosts

2. VHost에서 사용자에 대한 권한 설정

set_permissions 명령은 애플리케이션 보안에 가장 중요합니다. 특정 vhost 내의 리소스 구성, 읽기 또는 쓰기에 대한 사용자의 권한을 부여합니다.

구문: set_permissions <vhost> <user> <conf> <read> <write>

권한 값은 정규 표현식입니다 (.*는 모든 리소스를 의미).

예시: 특정 VHost에 대한 전체 액세스 권한 부여

app_prod/prod_vhost에 대해서만 전체 CRUD(구성, 읽기, 쓰기) 액세스 권한을 갖도록 하려면 다음을 수행합니다.

rabbitmqctl set_permissions -p /prod_vhost app_prod "^.*" "^.*" "^.*" 
권한 의미 (정규식) 설명
구성 (conf) .* 익스체인지, 큐, 바인딩 생성/삭제 및 vhost 매개변수 설정 가능.
읽기 (read) .* 메시지 소비 및 큐/익스체인지 상태 가져오기 가능.
쓰기 (write) .* 메시지 게시 및 바인딩 생성 가능.

예시: 사용자를 게시 전용으로 제한

파이어호스 프로듀서(Firehose producer)에 대한 일반적인 패턴은 쓰기 전용으로 제한하는 것입니다.

# 사용자 'publisher'는 /analytics_vhost에서 쓰기는 가능하지만 구성하거나 메시지를 읽을 수는 없습니다.
rabbitmqctl set_permissions -p /analytics_vhost publisher "^$" "^$" "^.*$"

3. 권한 지우기

사용자가 특정 vhost에 대해 갖는 모든 권한을 완전히 제거하려면 clear_permissions를 사용합니다.

rabbitmqctl clear_permissions -p /prod_vhost app_prod

4. 사용자 권한 나열

특정 vhost에서 사용자에게 부여된 권한을 확인하려면 다음을 사용합니다.

rabbitmqctl list_permissions -p /prod_vhost app_prod

사용자 관리 모범 사례

  • 최소 권한 원칙(PoLP): 애플리케이션이나 사용자가 기능하는 데 필요한 최소한의 권한만 항상 부여합니다. administrator 태그는 절대적으로 필요하지 않은 한 사용하지 마십시오.
  • 전용 Vhost 사용: 서로 다른 환경(예: dev, staging, prod)에 대해 서로 다른 가상 호스트를 사용하고 그 사이의 액세스를 엄격하게 제어합니다.
  • Guest 사용자 피하기: 보안을 위해 기본 guest 사용자는 비활성화하거나 제한해야 합니다(기본적으로 localhost에 대한 액세스만 허용됨).
  • 스크립팅: 이 모든 명령은 명령줄 기반이고 멱등성이 있으므로 일관된 배포를 위해 사용자 설정 및 해제 루틴을 스크립팅하십시오.

이러한 rabbitmqctl 명령들을 숙달하면 메시지 브로커 리소스에 누가 액세스할 수 있는지에 대해 세밀하고 스크립트 가능한 제어 권한을 얻게 되므로, 더욱 안전하고 관리하기 쉬운 RabbitMQ 배포로 이어집니다.