Redis ACL 보안 가이드: 개발자 접근 제어

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 자동화 스크립트를 참고해 실제 환경에 적용 가능