[Redis] ACL
[Redis] ACL
Redis ACL
- Redis 6 Version 부터 ACL(Access Control List)로 User라는 개념이 도입
- 이 User를 통해 실행 가능 Command와 접근 가능 키를 제한할 수 있다.
- ACL : Access Control List. 접근 제어
- 사용자를 생성하고 암호 지정, 사용 가능한 Command와 키 지정 가능
- ACL 사용을 통해 보안성과 안전성 구현 가능
- KEYS/FLUSHALL 호출 방지, 사용자에게 필요한 권한만 부여 등
사용자 조회
사용자 정보 리스트 조회
1
2
127.0.0.1:6379> ACL LIST
1) "user default on nopass ~* +@all"
- 초기 Redis 서버에는 default user가 등록되어 있음
- 사용자명 default
- 활성 상태
- 비밀번호 없음
- 모든 키 접근 가능
- 모든 Command 수행 가능
사용자 목록 조회
1
127.0.0.1:6379> ACL USERS
사용자 조회
1
127.0.0.1:6379> ACL GETUSER user
본인 확인
1
127.0.0.1:6379> ACL WHOAMI
로그인 AUTH
1
127.0.0.1:6379> AUTH user password
- user명 생략 시 default user로 로그인
사용자 등록 ACL SETUSER
1
127.0.0.1:6379> ACL SETUSER user on|off >password keys commands
user
: user id 설정on|off
: 활성화 여부 설정. 사용자를 등록하지만 일단 사용하지 못하게 할 때 off 사용- 새로 로그인(auth) 할 수는 없지만, 이미 로그인한 사용자의 사용을 막을 수는 없음
>password
: 비밀번호는>
구분자 다음에 지정nopass
: 비밀번호 없이 사용하려는 경우 지정. 로그인 시 아무 문자열이나 입력해도 됨- 비밀번호 저장 시 내부적으로 SHA-256 암호화 알고리즘 사용
keys
: 사용가능한 키 지정- 모든 키 허용 :
allkeys
또는~*
- 특정 패턴 지정 :
~user*
로 지정 시 user로 시작하는 키만 사용 가능 ~*
상태에서 특정 패턴을 지정하려면resetkeys
사용 ex)ACL SETUSER user resetkeys ~user*
- 모든 키 허용 :
commands
: 사용 가능한 Command 지정- 모든 Command 허용 :
allcommands
또는+@all
- 모든 Command 비허용 :
nocommands
또는-@all
- Command 지정 :
+command
로 추가,-command
로 빼기 - Command 그룹 지정 :
+@group
으로 추가,-@group
으로 빼기
- 모든 Command 허용 :
ACL SETUSER Command는 비밀번호가 포함되므로 로그에 남지 않음
관리자 user 설정
1
127.0.0.1:6379> ACL SETUSER admin on >password allkeys allcommands
조회 user 설정
1
127.0.0.1:6379> ACL SETUSER reader on >password allkeys +@read
Read/Write 가능한 일반 사용자 설정
1
127.0.0.1:6379> ACL SETUSER writer on >password allkeys allcommands -@dangerous
read-only:
로 시작하는 key만 접근 가능1
127.0.0.1:6379> ACL SETUSER reader on >abcd ~read-only:* +@all -@set &*
- reader라는 User의 비밀번호를 abcd로 설정
- key는
read-only:
로 시작하는 key만 접근 가능 +@all
은 모든 Command 사용 가능-@set
은 set Command는 사용 불가능&*
는 모든 pub/sub채널에 대해 접근 가능
Command 그룹
Command 그룹 목록 조회
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
127.0.0.1:6379> ACL CAT
1) "keyspace"
2) "read"
3) "write"
4) "set"
5) "sortedset"
6) "list"
7) "hash"
8) "string"
9) "bitmap"
10) "hyperloglog"
11) "geo"
12) "stream"
13) "pubsub"
14) "admin"
15) "fast"
16) "slow"
17) "blocking"
18) "dangerous"
19) "connection"
20) "transaction"
21) "scripting"
- keyspace : del, expire, flushdb, keys, ttl, scan 등
- read : get, lrange, smembers, zrange, hget, xrange 등
- write : set, lpush, sadd, zadd, hset, xadd 등
- set : sadd, scard, srem, spop 등
- sortedset : zadd, zcard, srem, zpopmin 등
- list : lpush, llen, lrem, lpop 등
- hash : hset, hlen, ldel, hget 등
- string : set, get, incr 등
- bitmap : setbit, bitop, getbit 등
- hyperloglog : pfadd, pfmerge, pfcount, pfselftest
- geo : geoadd, geodist, georadius 등
- stream : xadd, xlen, xrange, xdel 등
- pubsub : publish, subscribe, pubsub 등
- admin : bgsave, config, debug, shutdown 등
- admin 명령은 dangerous 그룹에 포함됨
- fast : get, lpush, hget 등
- slow : lrem, mset, save 등
- blocking : blpop, brpop, brpoplpush, bzpopmin, bzpopmax, xread, xreadgroup
- dangerous : flushall, keys, shutdown, failover, cluster, client, module 등
- connection : hello, client, auth, echo, ping, command
- transaction : watch, multi, unwatch, discard, exec
- scripting : evalsha, eval, script
Dangerous 그룹
- 보안 위험, 성능 저하 위험이 있는 Command들이 포함됨
- flushall : Redis 서버의 모든 데이터(key, value) 삭제
- flushdb : 현재 사용중인 DB의 모든 데이터(key, value) 삭제
- swapdb : 두 DB를 swap
- keys : 패턴에 일치하는 모든 key 반환 ➡️ scan 사용으로 대체
- shutdown : Redis 종료
- monitor : 서버에서 실행되는 모든 Command 관찰/감시. monitor 수행 시 서버 성능 50% 하락
- role : 자신의 역할(master/slave/sentinel)과 부가 정보 조회
- sync : 내부 Command replication
- psync : 내부 Command partial replication
- replconf : 내부 명령 cluster
- pfselftest : 내부 명령 HyperLogLog
- sort : list 데이터를 정렬
- sort_ro : sort와 동일하지만 결과를 저장하지 않음
- migrate : data를 다른 redis server로 옮기기. 내부적으로 dump, restore, del 명령이 실행됨
- restore, restore-asking : serialized value를 deserialize하여 저장
- failover : master와 replica 변경
- info : Redis 서버 정보와 통계값 조회
- debug, pfdebug : redis 개발/테스트 용도. 여러 관리 명령 실행 가능
- save : RDB 파일 저장 (foreground 수행). 수행 완료까지 서버가 다른 일 수행 불가
- bgsave : RDB 파일 저장 (background 수행). 하위 프로세스를 생성하여 수행
- bgrewriteaof : AOF 파일 저장(background 수행). 하위 프로세스를 생성하여 수행
- lastsave : RDB 마지막 저장 일시를 timestamp 형식으로 출력
- slaveof : 슬레이브 설정 변경
- replicaof : 복제노드 설정 변경
- config : 서버 설정 변경
- client : 클라이언트 관리 (조회, 제거, 이름 변경 등)
- cluster : 클러스터 설정 변경
- module : 모듈 관리
- slowlog : 명령 성능 측정/기록. 성능 저하 발생
- latency : 서버 성능 분석. 성능 저하 발생
- acl : 사용자 관리
그룹의 Command 목록 조회
1
127.0.0.1:6379> ACL CAT group
Command가 어느 그룹에 속하는지 확인
1
127.0.0.1:6379> COMMAND INFO <Command명>
사용자 삭제 DELUSER
1
127.0.0.1:6379> ACL DELUSER user
- Default user 삭제 불가
ACL file
사용자 정보 저장
1
127.0.0.1:6379> ACL SAVE
- 사용자 정보를 redis.conf에 설정된 옵션에 따라 acl file에 저장
- 저장하는 사용자 정보는 ACL LIST의 결과와 같음
사용자 정보 로드
1
127.0.0.1:6379> ACL LOAD
- redis 서버 시작 시 acl file에서 사용자 정보 로드
ACL(Auth) 로그
1
127.0.0.1:6379> ACL LOG [<count> | RESET]
- 실패한 로그인 정보 조회
ACL 참고
This post is licensed under CC BY 4.0 by the author.