ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

     

    rabbitmq - Official Image | Docker Hub

    Quick reference Supported tags and respective Dockerfile links 4.1.0-beta.3, 4.1-rc⁠4.1.0-beta.3-management, 4.1-rc-management⁠4.1.0-beta.3-alpine, 4.1-rc-alpine⁠4.1.0-beta.3-management-alpine, 4.1-rc-management-alpine⁠4.0.5, 4.0, 4, latest⁠4.0.5

    hub.docker.com

     

    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
Designed by Tistory.