20200415

Redis 6 ACL 운영 도입

redis 6 GA 됐고 ACL이 제일 기다렸던 기능. 지금까진 requirepass 하나로 "다 되거나 안 되거나"였는데 이제 유저 단위 권한 줄 수 있음.

설정 예.

ACL SETUSER reporter on >s3cret ~stats:* +@read
ACL SETUSER worker on >w0rkerpw ~jobs:* +@read +@write -@admin
ACL SETUSER default off

설명:

  • ~stats:* : key 패턴 제한
  • +@read : read 계열 명령만 허용
  • -@admin : admin 명령 차단
  • default off : 무인증 접속 차단

우리는 prod에서 앱 서비스별로 별도 유저 생성. reporter는 읽기 전용, worker는 쓰기/읽기, backup은 스캔 + 덤프 계열만 허용.

aclfile /etc/redis/users.acl로 외부 파일로 빼서 관리. ConfigMap에 올리고 SIGHUP으로 리로드. CONFIG REWRITE는 ACL 반영이 완전하지 않아서 aclfile 쓰는 게 낫다.

운영 팁:

  1. 패스워드는 >로 평문 넣지 말고 SHA256 해시로 # 접두어 써서 넣기
  2. MONITOR 명령은 기본적으로 큼직한 권한이라 운영 유저엔 주지 말 것. -monitor 박자
  3. slow log 같은 건 +@slow+slowlog로 따로

기존 requirepass 써드파티들은 호환 모드로 그대로 돌아감. 다만 redis-cli 쓸 때 6 이후로는 AUTH 명령이 AUTH user pass 형태로 변해서 스크립트들 수정 필요.

클러스터에도 적용하려면 각 노드에 같은 ACL 배포 필요. 아직 통합 관리는 없고 Sentinel도 따로. 이 부분은 개선 여지.