RabbitMQ 사용자 및 권한 관리: 명령줄 가이드
`rabbitmqctl` 명령어를 마스터하여 RabbitMQ에서 강력한 사용자 및 권한 관리를 수행하세요. 이 포괄적인 가이드는 새 사용자 생성, 태그를 사용한 관리자 또는 애플리케이션 역할 할당, 세분화된 가상 호스트 권한(읽기/쓰기/구성) 설정, 안전한 액세스 철회 방법을 단계별로 제공하여 명령줄을 통한 통제된 관리를 보장합니다.
RabbitMQ 사용자 및 권한 관리: 명령줄 가이드
RabbitMQ 권한은 거의 올바르게 설정하기 쉽습니다. 사용자가 존재하더라도 게시하지 못할 수 있습니다. 사용자가 management 태그를 가지고 있어도 애플리케이션 vhost에 접근하지 못할 수 있습니다. 광범위한 정규식은 실수로 서비스가 소비만 해야 하는 큐를 생성하게 할 수 있습니다. 대부분의 권한 문제는 사용자, 태그, vhost 권한이라는 세 가지 별개의 개념을 혼동하는 데서 발생합니다.
이 가이드는 일반적인 사용자 관리 워크플로우를 위해 rabbitmqctl을 사용합니다: 사용자 생성, 태그 할당, vhost 권한 설정, 액세스 확인, 비밀번호 교체, 액세스 깔끔하게 제거.
사전 요구 사항
진행하기 전에 다음 사항이 있는지 확인하세요:
- RabbitMQ 서버 설치: 브로커가 실행 중이어야 합니다.
rabbitmqctl액세스: 노드 또는 클러스터에 대한 관리 액세스 권한이 필요합니다. 명령어는 일반적으로 RabbitMQ 노드에서 실행되지만, 환경이 구성된 경우 원격 CLI 사용도 가능합니다.- 올바른 Vhost 이름: 권한은 가상 호스트별로 범위가 지정됩니다.
/,/prod,prod는 서로 바꿔 사용할 수 없습니다.
rabbitmqctl로 사용자 관리
rabbitmqctl 도구는 모든 사용자 관련 작업에 user_* 명령어군을 사용합니다. RabbitMQ 사용자가 운영 체제 사용자와 구별된다는 점을 이해하는 것이 중요합니다.
1. 기존 사용자 나열
현재 브로커에 액세스할 수 있는 사용자를 확인하려면 list_users 명령어를 사용하세요:
rabbitmqctl list_users
출력 예시:
사용자 나열 중 ...
user: guest tags: [administrator]
user: app_prod tags: [policymaker]
2. 새 사용자 생성
새 서비스 계정이나 관리자를 설정할 때는 사용자를 생성하고 초기 비밀번호를 할당해야 합니다.
api_user라는 사용자를 초기 비밀번호와 함께 생성하려면:
rabbitmqctl add_user api_user '길고-무작위인-비밀번호로-교체하세요'
실제 프로덕션 비밀번호를 셸 히스토리에 넣지 마세요. 자동화된 시스템에서는 비밀번호 관리자와 플랫폼에서 이미 사용하는 프로비저닝 메커니즘을 선호하세요.
3. 사용자 태그(역할) 수정
사용자 태그는 특정 관리 기능을 부여하는 사전 정의된 역할을 정의합니다. 가장 일반적인 태그는 administrator, policymaker, management입니다.
administrator: 사용자, 권한, vhost, 정책 및 클러스터 전체 설정을 관리할 수 있습니다.policymaker: 사용자가 액세스할 수 있는 vhost의 정책 및 매개변수를 관리할 수 있습니다.management: 관리 UI/API에 로그인할 수 있지만, vhost 권한이 사용자가 사용할 수 있는 리소스를 제어합니다.monitoring: 관리 정보를 볼 수 있으며, 관찰 가능성 계정에 유용합니다.
현재 태그 보기
list_user_tags를 사용하여 현재 역할을 확인하세요:
rabbitmqctl list_user_tags api_user
태그 설정
api_user에 management 태그를 할당하려면:
rabbitmqctl set_user_tags api_user management
set_user_tags는 사용자의 태그 목록을 정확히 제공한 태그로 대체합니다. 관리자와 policymaker 태그를 모두 부여하려면 동일한 명령어에 둘 다 포함하세요:
rabbitmqctl set_user_tags api_user administrator policymaker
태그 제거
사용자에서 모든 태그를 제거하려면:
rabbitmqctl set_user_tags api_user
일부 RabbitMQ 버전은 clear_user_tags도 제공합니다. 스크립팅하기 전에 설치된 버전에서 rabbitmqctl help clear_user_tags를 확인하세요.
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 내에서 리소스를 구성, 읽기 또는 쓰기할 수 있는 권한을 사용자에게 부여합니다.
구문: rabbitmqctl set_permissions -p <vhost> <user> <configure> <write> <read>
권한 값은 정규식입니다. .*는 모든 리소스 이름을 의미합니다. ^$는 리소스 이름이 없음을 의미합니다.
예시: 특정 VHost에 전체 액세스 권한 부여
app_prod가 /prod_vhost에만 전체 CRUD(구성, 읽기, 쓰기) 액세스 권한을 가지도록 하려면:
rabbitmqctl set_permissions -p /prod_vhost app_prod "^.*" "^.*" "^.*"
| 권한 | 의미 | 일반적인 사용 사례 |
|---|---|---|
| 구성 | 정규식과 일치하는 큐, 교환, 바인딩을 생성, 삭제 또는 수정합니다. | 자체 토폴로지를 선언하는 배포자 또는 앱. |
| 쓰기 | 일치하는 교환에 게시합니다. | 생산자. |
| 읽기 | 일치하는 큐에서 소비합니다. | 소비자. |
예시: 사용자를 게시 전용으로 제한
파이어호스 생산자의 일반적인 패턴은 쓰기만 허용하는 것입니다:
# 'publisher' 사용자는 /analytics_vhost에서 구성하거나 메시지를 읽을 수 없고 쓰기만 가능
rabbitmqctl set_permissions -p /analytics_vhost publisher "^$" "^events\\." "^$"
이 예시는 이름이 events.로 시작하는 교환에 게시하는 것을 허용합니다. 사용자가 토폴로지를 구성하거나 메시지를 소비하는 것은 허용하지 않습니다.
예시: 소비자 제한
# worker.로 시작하는 큐에서 읽을 수 있지만 게시하거나 구성할 수 없음
rabbitmqctl set_permissions -p /jobs worker_consumer "^$" "^$" "^worker\\."
정규식 권한은 강력하지만, 너무 광범위해지기 쉽습니다. 큐 이름이 동일한 vhost에서 prod.orders.created와 staging.orders.created인 경우, .*orders.*와 같은 정규식은 의도한 것보다 더 많은 범위를 포함할 수 있습니다. 복잡한 정규식 경계보다는 별도의 vhost를 사용하는 것이 일반적으로 더 깔끔합니다.
3. 권한 지우기
특정 vhost에서 사용자가 가진 모든 권한을 완전히 제거하려면 clear_permissions를 사용하세요:
rabbitmqctl clear_permissions -p /prod_vhost app_prod
4. 사용자 권한 나열
vhost에 부여된 권한을 확인하려면:
rabbitmqctl list_permissions -p /prod_vhost
한 사용자에게 vhost 전체에 할당된 모든 권한을 보려면:
rabbitmqctl list_user_permissions app_prod
사용자 관리 모범 사례
- 최소 권한 사용: 생산자는 일반적으로 쓰기 권한이 필요하고, 소비자는 일반적으로 읽기 권한이 필요하며, 토폴로지 소유자만 구성 권한이 필요합니다.
- 전용 vhost 사용: 모든 것을 정규식으로 해결하려고 하지 말고 vhost로 환경과 테넌트를 분리하세요.
guest를 의도적으로 처리: 기본guest사용자는 기본적으로 localhost로 제한됩니다. 많은 프로덕션 팀이 실제 관리자 계정을 만든 후 삭제합니다.- 원하는 상태를 스크립팅: 사용자, vhost, 권한 설정을 배포 자동화에 유지하여 재구축된 브로커가 메모리에 의존하지 않도록 하세요.
- 변경 후 확인: 프로덕션에서 각 변경 후
list_users,list_permissions,list_user_permissions를 실행하세요.
실용적인 애플리케이션 설정은 종종 다음과 같습니다:
rabbitmqctl add_vhost /orders
rabbitmqctl add_user orders_publisher '비밀로-교체하세요'
rabbitmqctl add_user orders_worker '비밀로-교체하세요'
rabbitmqctl set_permissions -p /orders orders_publisher "^$" "^orders\\." "^$"
rabbitmqctl set_permissions -p /orders orders_worker "^$" "^$" "^orders\\."
rabbitmqctl list_user_permissions orders_publisher
rabbitmqctl list_user_permissions orders_worker
이렇게 하면 게시 및 소비 자격 증명이 분리됩니다. 작업자 비밀번호가 유출되면 새 메시지를 게시할 수 없습니다. 게시자 비밀번호가 유출되면 큐를 비울 수 없습니다. 이 분리는 간단하지만 가장 유용한 RabbitMQ 보안 습관 중 하나입니다.