13 KiB
title, source_type, url, archive_url, related_branches, related_projects, tags, created
| title | source_type | url | archive_url | related_branches | related_projects | tags | created | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| official-doc / Redis ACL — Access Control Lists (command·key 단위 최소 권한) | official-doc | https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/ |
|
|
|
2026-07-28 |
Redis ACL — Access Control Lists (command·key 단위 최소 권한)
Layer:
raw/— 외부 자료(공식 문서)의 원문 발췌·출처 기록. Redis 공식 문서 — Operate › Management › Security › ACL
Parent / 활용 branch (필수)
| Branch | 이 자료가 정당화하는 결정 |
|---|---|
| raw/branch-notes/feature-redis-runtime-role-isolation-contract | Redis role(cache-runtime / coordination-runtime / session-runtime)마다 별도 named ACL user 를 두고, reset 으로 초기화된(=-@all) 상태에서 필요한 command category·key pattern 만 선택적으로 부여하는 least-privilege 결정의 공식 근거 |
출처 / Source
- 원본 URL: https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/
- 아카이브 URL: (미확보)
- 저자 / 조직: Redis (공식 문서)
- 발행일: (버전 미표기 페이지 — Redis 7.0+ 기능 포함 서술)
- 마지막 확인일: 2026-07-28
왜 저장했는지 / Why archived
feature-redis-runtime-role-isolation-contract branch 가 role 별 별도 named ACL user + reset -@all 기반 least-privilege 부여를 결정하려면, ACL 이 실제로 command·key 단위로 권한을 제한하는 메커니즘인지, 새 user 가 기본적으로 무권한 상태로 생성되는지, +@<category>/~<pattern> 문법이 무엇을 의미하는지를 Redis 공식 문서로 확인해야 했음. 이 자료는 그 메커니즘 전체(정의·문법·기본값·reset 동작·카테고리 예시)를 공식 근거로 제공한다.
핵심 인용 / Key quotes (verbatim, 7개)
[§(intro), self-grep L214] "The Redis ACL, short for Access Control List, is the feature that allows certain connections to be limited in terms of the commands that can be executed and the keys that can be accessed."
[§ACL rules — key patterns, self-grep L104] "
~<pattern>: Add a pattern of keys that can be mentioned as part of commands. For instance~*allows all the keys. The pattern is a glob-style pattern like the one of KEYS. It is possible to specify multiple patterns."
[§Create and edit user ACLs — new user status, self-grep L170] "* There are no key patterns that the user can access."
[§ACL rules — command categories, self-grep L96] "
+@<category>: Add all the commands in such category to be called by the user, with valid categories being like @admin, @set, @sortedset, ... and so forth, see the full list by calling the ACL CAT command. The special category @all means all the commands, both the ones currently present in the server, and the ones that will be loaded in the future via modules."
[§ACL rules — reset directive, self-grep L135] "
resetPerforms the following actions: resetpass, resetkeys, resetchannels, allchannels (if acl-pubsub-default is set), off, clearselectors, -@all. The user returns to the same state it had immediately after its creation."
[§When ACLs are useful — goal 2, self-grep L41] "2. You want to improve operational safety, so that processes or humans accessing Redis are not allowed to damage the data or the configuration due to software errors or manual mistakes. For instance, there is no reason for a worker that fetches delayed jobs from Redis to be able to call the FLUSHALL command."
[§Command categories — admin, self-grep L216] "* admin - Administrative commands. Normal applications will never need to use these. Includes REPLICAOF, CONFIG, DEBUG, SAVE, MONITOR, ACL, SHUTDOWN, etc."
Claims Extracted / 추출된 주장
이 자료가 직접 말하는 것만 claim 으로 분리한다. 내 프로젝트에 적용한 결론은 여기 쓰지 않는다.
| Claim ID | Claim (이 자료가 직접 말하는 것) | Evidence quote | Strength | Applies to | Does not prove |
|---|---|---|---|---|---|
| REDIS-ACL-C1 | Redis ACL 은 연결(connection) 단위로 실행 가능한 command 와 접근 가능한 key 를 제한하는 기능이다 | [§intro] "...is the feature that allows certain connections to be limited in terms of the commands that can be executed and the keys that can be accessed." | official-vendor-doc |
Redis 6 이상의 모든 ACL 사용 배포 | 네트워크 계층 격리(포트 분리, VPC/보안그룹)까지 ACL 이 대신한다는 뜻은 아님 — ACL 은 인증된 연결 내부의 command/key 권한만 제한 |
| REDIS-ACL-C2 | ~<pattern> 규칙은 glob-style 패턴으로 접근 가능한 key 를 지정하며, 여러 패턴을 동시에 지정할 수 있다 |
[§key patterns] "~<pattern>: Add a pattern of keys that can be mentioned as part of commands... It is possible to specify multiple patterns." |
official-vendor-doc |
ACL SETUSER 또는 aclfile 로 정의되는 모든 named user 의 key 접근 범위 |
key pattern 만으로 read/write 를 구분하지 않음 — read-only 또는 write-only 제한이 필요하면 별도 %R~<pattern>/%W~<pattern> (Redis 7.0+) 을 써야 함 |
| REDIS-ACL-C3 | ACL SETUSER <name> 으로 새로 생성된 user 는 기본적으로 접근 가능한 key pattern 이 하나도 없다 |
[§new user status] "* There are no key patterns that the user can access." | official-vendor-doc |
ACL SETUSER 로 새로 생성되는 named user (예: alice) |
이미 존재하는 default user 에는 적용되지 않음 — default user 는 별도 설정 없이 on nopass ~* &* +@all (모든 key·모든 command 허용) 상태로 존재함 |
| REDIS-ACL-C4 | +@<category> 는 해당 카테고리에 속한 모든 command 를 user 에게 허용하고, @all 은 현재/향후 모듈 command 를 포함한 모든 command 를 의미하는 특수 카테고리다 |
[§command categories rule] "+@<category>: Add all the commands in such category... The special category @all means all the commands..." |
official-vendor-doc |
Redis 6 이상 ACL rule DSL 전체 (+@<category>/-@<category> 조합) |
어떤 command 가 어느 카테고리에 속하는지 이 문장만으로는 규정하지 않음 — 카테고리 소속 목록은 ACL CAT <category> 런타임 조회 또는 개별 카테고리 설명(C7 등)으로 별도 확인 필요 |
| REDIS-ACL-C5 | reset 지시어는 resetpass, resetkeys, resetchannels, off, clearselectors, -@all 을 모두 수행해 user 를 생성 직후 상태로 되돌린다 |
[§reset directive] "reset Performs the following actions: resetpass, resetkeys, resetchannels, allchannels (if acl-pubsub-default is set), off, clearselectors, -@all." |
official-vendor-doc |
ACL SETUSER <user> reset ... 호출 |
reset 뒤에 별도로 -@all 을 다시 명시하는 것이 필수 문법이라는 뜻은 아님 — reset 자체가 이미 -@all 효과를 포함하므로, reset -@all +get ... 처럼 이어 쓰는 것은 명시적 표현이지 문법상 필수 절차가 아님 |
| REDIS-ACL-C6 | 공식 문서는 ACL 을 쓰는 이유로 (1) untrusted/trusted client 의 접근을 최소 권한으로 제한하는 "보안" 목적과 (2) 소프트웨어 오류·사람 실수로 데이터/설정이 손상되지 않도록 하는 "운영 안전성" 목적, 두 가지를 나란히 제시한다 | [§goal 2] "You want to improve operational safety, so that processes or humans accessing Redis are not allowed to damage the data or the configuration due to software errors or manual mistakes. For instance, there is no reason for a worker that fetches delayed jobs from Redis to be able to call the FLUSHALL command." | official-vendor-doc |
worker/서비스 role 별 command 제한 근거 (예: cache-runtime 이 FLUSHALL/CONFIG 를 호출할 이유가 없다는 논리) |
ACL이 "보안 경계가 아니라 실수 방지 목적"이라고 이 문서가 말하지는 않는다 — 원문은 보안(goal 1)과 운영 안전성(goal 2)을 별개의 두 목적으로 병렬 제시할 뿐, 운영 안전성이 보안을 대체하거나 ACL이 보안 경계가 아니라고 단정하지 않음 |
| REDIS-ACL-C7 | @admin 카테고리는 REPLICAOF, CONFIG, DEBUG, SAVE, MONITOR, ACL, SHUTDOWN 등을 포함하며, 공식 문서는 "일반 애플리케이션은 이 command 들이 전혀 필요 없다"고 명시한다 |
[§admin category] "admin - Administrative commands. Normal applications will never need to use these. Includes REPLICAOF, CONFIG, DEBUG, SAVE, MONITOR, ACL, SHUTDOWN, etc." | official-vendor-doc |
일반 애플리케이션 역할(캐시/좌표/세션 client)의 ACL 에서 @admin 을 제외하는 결정의 근거 |
목록이 "etc." 로 끝나 완전한 목록이 아님 — @admin 카테고리의 정확한 전체 command 목록은 런타임 ACL CAT admin 으로 별도 확인 필요 |
Usage Boundaries / 적용 경계
- 이 자료가 직접 증명하는 것:
REDIS-ACL-C1~C2: ACL 이 command·key pattern 단위로 권한을 제한하는 메커니즘 자체REDIS-ACL-C3: named user 를 새로 만들면 기본적으로 key 접근 권한이 0인 default-deny 상태로 시작 (role 별 named user 분리 설계의 안전한 출발점 근거)REDIS-ACL-C4~C5:+@<category>/-@<category>/reset(=-@all포함) 문법 의미REDIS-ACL-C6: least-privilege 부여가 "운영 실수 방지"라는 공식적으로 인정된 목적 중 하나임 (단 유일한 목적은 아님 — 아래 참조)REDIS-ACL-C7:@admin카테고리에 속하는 대표 command 예시와 "일반 애플리케이션엔 불필요"라는 공식 권고
- 이 자료가 증명하지 않는 것:
- ACL이 "보안 경계가 아니라 실수 방지용"이라는 이분법 — 원문은 보안과 운영 안전성을 병렬적인 두 목적으로 제시하며, 어느 한쪽이 다른 쪽을 배제하거나 대체한다고 말하지 않음. branch 결정 근거에 이 이분법을 쓴다면
REDIS-ACL-C6로 과대 해석한 것이 되므로 사용 금지 @dangerous카테고리의 정확한 전체 command 목록 (이 자료엔@admin만 verbatim 인용 확보 —@dangerous는FLUSHALL,MIGRATE,RESTORE,SORT,KEYS등을 포함한다고 서술되어 있으나 이번 인용 세트엔 미포함, 별도 확인 필요)- TLS·네트워크 계층 인증/암호화 (ACL 은 인증된 연결 내부의 command/key 권한만 다룸 — TLS·mTLS·network policy 는 별도 관심사)
%R~<pattern>/%W~<pattern>(read/write 세분화 key permission, Redis 7.0+) 과 selector((...), Redis 7.0+) 의 실제 branch 적용 여부 — 이 문서는 문법을 설명할 뿐 branch 가 이를 채택해야 한다고 규정하지 않음
- ACL이 "보안 경계가 아니라 실수 방지용"이라는 이분법 — 원문은 보안과 운영 안전성을 병렬적인 두 목적으로 제시하며, 어느 한쪽이 다른 쪽을 배제하거나 대체한다고 말하지 않음. branch 결정 근거에 이 이분법을 쓴다면
- 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
- cache-runtime / coordination-runtime / session-runtime 각 role 이 실제로 필요로 하는 command 목록(예: cache-runtime 은
@string+@hash+@keyspace일부만, coordination-runtime 은 Lua/Function 실행 관련@scripting포함 여부) — role 별 command 카탈로그는 이 문서 범위 밖,feature-redis-atomic-program-catalog-contract등 sibling branch 산출물과 대조 필요 defaultuser 를 실제로off처리하거나 강한 password 로 잠그는 배포 설정 — 이 문서는 문법만 제공하며 배포 시defaultuser 처리 방침은 별도 결정 사항- Redis 버전별
%R/%W/selector 기능 가용 여부 (Redis 7.0 이상 조건부 기능) — 실제 배포 Redis 버전 확인 필요
- cache-runtime / coordination-runtime / session-runtime 각 role 이 실제로 필요로 하는 command 목록(예: cache-runtime 은
메모 / Notes
- 문서 자체는 Redis 버전을 페이지 상단에 명시하지 않고, 본문 곳곳에 "Redis 6.2 and later", "Redis 7.0 and later" 조건부 문구로 기능별 최소 버전을 표기하는 구조. 인용 시 버전 조건이 붙은 기능(
%R~/%W~, selector, subcommand allow/block)은 branch 적용 전 배포 Redis 버전 확인 필요. reset이 이미-@all을 포함한다는 사실(C5)은 branch 결정 문구의 "reset -@all" 표현이 강조적 병기(중복 명시)이지 필수 2단계 절차가 아님을 의미 —/branch-spec단계에서 이 표현을 "reset (내부적으로 -@all 포함) 후 필요한 command·key 만 추가 부여"로 다듬을 것을 권고.- C6 관련 — least-privilege 를 "보안이 아니라 실수 방지"로 단정하는 프레이밍은 이 공식 문서로 뒷받침되지 않으므로, branch-note 본문에 그렇게 쓰지 말 것 (Usage Boundaries 참조).
Related / 관련
- 같은 주제 다른 official-doc: (아직 없음 — Redis TLS/mTLS 공식 문서,
%R/%Wkey permission 세부 공식 문서는 추후 별도 수집 후보) - 이 자료를 인용한 wiki 요약: (생성 시 추가)