Redis ACL을 활용한 보안 접근 제어: 개발자 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
인프라/DevOps/보안
대상자
- 대상자: 백엔드 개발자, DevOps 엔지니어, Redis 클라이언트 관리자
- 난이도: 중급 (Redis 기본 이해 및 구성 경험 필요)
핵심 요약
- Redis ACL(접근 제어 목록)은 Redis 6부터 도입된 사용자 기반의 세분화된 권한 관리 기능으로,
+xadd
,+xread
,~logs_stream
등의 명령어/키 패턴 제한이 가능 - 사용자 생성 예시:
```plaintext
user runner-8 on >mySecretPass +xadd +xread ~logs_stream
```
+xadd
,+xread
: Redis Streams 관련 명령어만 허용~logs_stream
: 특정 키에 대한 접근 제한- 보안 강화:
SHA256
해시 암호화(sanitize-payload #
) 사용으로 비밀번호 보호 가능
섹션별 세부 요약
1. Redis ACL의 필요성
- Redis 6 이전: 전역 비밀번호만 지원 → 모든 사용자가 동일한 권한 보유
- 문제점:
- KEYS *
와 같은 명령어로 데이터 삭제/변경 위험
- 다중 서비스/팀 환경에서 권한 관리 어려움
- 해결책: ACL을 통한 사용자별 권한 분리
2. ACL 구성 방법
- 사용자 정의:
redis.conf
또는users.acl
파일에서 정의
```plaintext
user default on >supersecret +@all ~*
user runner-8 on >mySecretPass +xadd +xread ~logs_stream
```
- 명령어/키 제한:
- +xadd
, +xread
: Redis Streams 명령어 허용
- ~logs_stream
: 특정 키(logs_stream
)에 대한 접근 제한
- 비밀번호 보안: SHA256 해시 암호화(
sanitize-payload #
) 사용
3. 실무 적용 예시 (Go + Asynq)
- 사용자 정의 예:
```plaintext
user runner-8 on >Masd2dnnsd +xadd +xread +xrange +xrevrange +subscribe +psubscribe +publish +unsubscribe ~logs_stream ~runners:heartbeat ~__asynq ~asynq
```
- 허용 명령어:
XADD
,XREAD
,XRANGE
,PUBLISH
등 - 허용 키 패턴:
logs_stream
,runners:heartbeat
,__asynq
,asynq
- 코드 적용:
```go
asynq.RedisClientOpt{
Addr: "localhost:6379",
Username: "runner-8",
Password: "Masd2dnnsd",
}
```
4. 자동화 구성 (Ansible)
- ACL 파일 설정:
```yaml
- name: Configure Redis ACL file
copy:
dest: /etc/redis/users.acl
content: |
user default on >supersecret +@all ~*
user runner-8 on >Masd2dnnsd +xadd +xread +xrange +xrevrange +subscribe +psubscribe +publish +unsubscribe ~logs_stream ~runners:heartbeat ~__asynq ~asynq
owner: redis
group: redis
mode: "0644"
```
- Redis 재시작:
sudo systemctl restart redis
결론
- Redis ACL을 통해 최소 권한 원칙을 적용해 보안 강화 가능
- 사용자별 명령어/키 제한을 통해 불필요한 데이터 조작 방지
- 예제 구성 파일 및 Ansible 자동화 스크립트를 참고해 실제 환경에 적용 가능