MQTT · 2026-01-29

Mosquitto ACL로 주제별 접근 관리

Mosquitto ACL 설정을 통해 MQTT 토픽별 접근 권한을 세분화하는 방법과 실무 예제, 테스트 절차를 포함한 구성 방법

작성일 : 2026-01-29 ㆍ 작성자 : 관리자
post
목차

소개

Mosquitto 브로커에서 ACL(Access Control List)은 토픽별로 퍼블리시와 서브스크라이브 권한을 제어하는 핵심 수단이다. 작은 홈 자동화부터 다수 디바이스가 연결되는 산업용 환경까지, 잘 설계된 ACL은 민감한 데이터 노출을 줄이고 시스템 안정성을 높인다. 이 글은 처음 접하는 사람도 이해하도록 기본 개념부터 실제 설정 예제, 테스트 방법까지 단계별로 설명한다.

ACL의 핵심 개념

권한 단위

ACL은 주로 사용자 또는 클라이언트 ID 단위로 적용된다. 각 항목은 허용 또는 거부 규칙을 포함하며, 토픽 패턴에 와일드카드 사용이 가능하다. mosquitto는 일반적으로 다음 두 가지 권한을 구분한다.

  • topic read: 해당 토픽 구독(서브스크라이브) 허용 여부
  • topic write: 해당 토픽 퍼블리시(발행) 허용 여부

우선순위와 적용 순서

ACL 파일은 위에서 아래로 순차 검증된다. 앞서 매칭된 규칙이 권한을 결정하므로 구체 규칙을 상단에 두고 일반 규칙을 하단에 배치하는 것이 안전하다.

기본 설정 위치와 연동

mosquitto.conf와 연동

mosquitto.conf에서 acl_file과 password_file을 지정한다. 예를 들어 별도 ACL 파일을 불러오려면 다음과 같이 설정한다.

allow_anonymous false
password_file /etc/mosquitto/passwd
acl_file /etc/mosquitto/aclfile

ACL 파일 예제와 설명

아래 예제는 사용자별로 읽기와 쓰기 권한을 세분화하는 기본 패턴을 보여준다. 실제 환경에 맞춰 사용자 이름과 토픽을 변경하면 된다.

# /etc/mosquitto/aclfile
# 관리자: 모든 토픽 읽기/쓰기 허용
user admin
topic readwrite #

# 센서 사용자: 센서 데이터 퍼블리시 권한만 허용
user sensor01
topic write sensors/sensor01/data

# 뷰어 사용자: 특정 센서 토픽 구독만 허용
user viewer01
topic read sensors/+/data

# 장치별 클라이언트ID 제어 예
clientid device-100
topic readwrite devices/device-100/#

# 기본 거부 규칙(명시적 거부는 없으므로 필요시 추가)
# 예: 특정 토픽 차단
# pattern deny topic sensors/private

설명:

  • user 행은 이후에 오는 topic 규칙이 해당 사용자에게 적용됨을 의미한다.
  • topic readwrite는 read와 write 권한을 모두 허용한다.
  • 와일드카드 +와 #을 이용해 유연한 패턴 매칭이 가능하다.

실무에서 자주 쓰는 mqtt acl 예제 패턴

다음은 실제 운영에서 유용한 패턴 모음이다.

  • 디바이스가 자신의 토픽만 발행하도록 제한: topic write devices/%u/data
  • 관리자는 모든 토픽 접근 허용: topic readwrite #
  • 모니터 전용 계정은 읽기만 허용: topic read sensors/#
# 사용자명 치환 예시 (Mosquitto 자체 패턴 지원은 제한적이므로 필요시 외부 인증 사용)
user device01
topic write devices/device01/data
user monitor
topic read devices/+/data

패스워드 파일 생성과 테스트

비밀번호 파일은 mosquitto_passwd 유틸로 생성한다. 다음 명령으로 사용자 추가가 가능하다.

mosquitto_passwd -c /etc/mosquitto/passwd admin
mosquitto_passwd /etc/mosquitto/passwd sensor01

설정 적용 후에는 브로커 재시작이 필요하다. 테스트는 mosquitto_pub과 mosquitto_sub로 수행한다.

# 퍼블리시 테스트(센서 권한 확인)
mosquitto_pub -u sensor01 -P '비밀번호' -t sensors/sensor01/data -m 'payload'

# 구독 테스트(뷰어 권한 확인)
mosquitto_sub -u viewer01 -P '비밀번호' -t sensors/+/data

보안 권장 사항

  • allow_anonymous를 false로 설정해 익명 접속을 차단한다.
  • TLS 암호화를 적용해 전송 중 도청을 방지한다.
  • 사용자별 최소 권한 원칙을 적용해 필요한 토픽만 부여한다.
  • 정기적으로 패스워드를 갱신하고, 장기 미사용 계정은 비활성화한다.

트러블슈팅 포인트

권한이 기대대로 작동하지 않을 때 확인해야 할 사항들.

  • mosquitto.conf에서 acl_file 경로가 올바른지 확인
  • ACL 파일의 문법 오류(주석 위치, 줄바꿈 등) 여부 확인
  • 동일 사용자에 대해 상충하는 규칙이 없는지 검토
  • 브로커 로그에서 인증 및 권한 관련 에러 메시지 확인

마무리

Mosquitto ACL 설정은 토픽 보안을 강화하는 효과적인 방법이다. 작은 설정 실수로도 권한이 과도하게 열릴 수 있으므로 구체 규칙을 상단에 배치하고 테스트 절차를 통해 권한을 검증하는 습관이 중요하다. 위 예제를 기반으로 환경에 맞게 규칙을 설계하면 토픽별 접근 제어 mqtt 환경을 안전하게 구축할 수 있다.

mosquitto acl 설정 mqtt acl 예제 주제별 접근 제어 mqtt mosquitto 설정 MQTT 보안 ACL 파일 예제 토픽 권한 관리 mosquitto password_file