-
[RabbitMQ] Read Only User 생성하기RabbitMQ 2024. 1. 7. 06:08반응형
- 목차
들어가며.
이번 글에서는 RabbitMQ 에서 User 의 생성과 생성된 User 에게 Read Only Permission 을 적용하는 방법에 대해서 알아봅니다.
RabbitMQ UI 에서 User 와 Permission 생성.
RabbitMQ 의 Management 플러그인이 설치되면 RabbitMQ Web UI 가 제공됩니다.
https://hub.docker.com/_/rabbitmq
Docker Hub 에서 management 로 태깅된 버전들은 내부적으로 Management 를 위한 Web UI 기능이 탑재됩니다.
아래의 도커 명령어 실행 후 http://localhost:8080 에 접속할 수 있습니다.
( id 와 password 는 모두 guest/guest 로 설정되어 있습니다. )
docker run -d --name rabbitmq \ -e RABBITMQ_DEFAULT_USER=guest \ -e RABBITMQ_DEFAULT_PASS=guest \ -p 8080:15672 \ rabbitmq:3-management
Web Management 페이지에 접속 후에는 아래와 같이 Admin 영역이 존재합니다.
Admin Tab 에서 User 의 생성 및 관리가 가능합니다.
저는 단순히 read_only 라는 User 를 생성합니다.
그리고 생성된 User 는 아래와 같이 Permission 의 설정이 가능합니다.
Permission 은 크게 configure, write, read 로 구성됩니다.
이번 글의 주제인 read 권한에 대해서만 설명드리면,
Read regexp : ".*" 와 같이 설정합니다.
이는 모든 Queue 에 대해서 Read 가 가능함을 의미합니다.
만약 특정 "my_queue" 라는 Queue 에 대해서만 Read 범위를 제한하고자한다면, my_.* 또는 my_queue 등과 같이 설정이 가능합니다.
Queue 와 message 생성하기.
이제 아래와 같이 데이터를 생성해봅니다.
test_queue, test_exchange 라는 이름의 Queue 와 Exchange 를 생성하였고, guest User 를 통해서 메시지를 생성합니다.
guest 계정은 Write 의 권한을 가지기 때문에 데이터를 생성할 수 있습니다.
import pika connection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost', port=5672, credentials=pika.PlainCredentials('guest', 'guest') )) channel = connection.channel() channel.queue_declare(queue='test_queue', passive=False) channel.exchange_declare(exchange='test_exchange', exchange_type='direct') channel.queue_bind(exchange='test_exchange', queue='test_queue', routing_key='test_key') channel.basic_publish( exchange='test_exchange', routing_key='test_key', body='test_data1' ) channel.close() connection.close()
반면 read_only 계정은 데이터를 생성할 수 없습니다.
connection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost', port=5672, credentials=pika.PlainCredentials('read_only', 'read_only') ))
pika.exceptions.ChannelClosedByBroker: (403, "ACCESS_REFUSED - configure access to queue 'test_queue' in vhost '/' refused for user 'read_only'") pika.exceptions.ChannelClosedByBroker: (403, "ACCESS_REFUSED - write access to exchange 'test_exchange' in vhost '/' refused for user 'read_only'")
read_only User 로 메시지 소비하기.
아래와 같이 read_only User 를 통해서 단순한 메시지의 Consume 은 가능합니다.
import pika connection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost', port=5672, credentials=pika.PlainCredentials('read_only', 'read_only') )) channel = connection.channel() def callback(ch, method, properties, body): print(f" [x] Received {body.decode()}") channel.basic_consume(queue='test_queue', on_message_callback=callback, auto_ack=True) print(' [*] Waiting for messages. To exit press CTRL+C') channel.start_consuming()
반응형'RabbitMQ' 카테고리의 다른 글
[RabbitMQ] Exchange 알아보기 (0) 2024.01.28