Redis ACL #
Redis 6 Version 부터 ACL(Access Control List)로 User라는 개념이 도입
- 이 User를 통해 실행 가능 Command와 접근 가능 키를 제한할 수 있다.
ACL : Access Control List. 접근 제어
사용자를 생성하고 암호 지정, 사용 가능한 Command와 키 지정 가능
ACL 사용을 통해 보안성과 안전성 구현 가능
- KEYS/FLUSHALL 호출 방지, 사용자에게 필요한 권한만 부여 등
사용자 조회 #
사용자 정보 리스트 조회 #
1127.0.0.1:6379> ACL LIST
21) "user default on nopass ~* +@all"- 초기 Redis 서버에는 default user가 등록되어 있음
- 사용자명 default
- 활성 상태
- 비밀번호 없음
- 모든 키 접근 가능
- 모든 Command 수행 가능
사용자 목록 조회 #
1127.0.0.1:6379> ACL USERS사용자 조회 #
1127.0.0.1:6379> ACL GETUSER user본인 확인 #
1127.0.0.1:6379> ACL WHOAMI로그인 AUTH #
1127.0.0.1:6379> AUTH user password- user명 생략 시 default user로 로그인
사용자 등록 ACL SETUSER #
1127.0.0.1:6379> ACL SETUSER user on|off >password keys commandsuser: 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 설정
1127.0.0.1:6379> ACL SETUSER admin on >password allkeys allcommands조회 user 설정
1127.0.0.1:6379> ACL SETUSER reader on >password allkeys +@readRead/Write 가능한 일반 사용자 설정
1127.0.0.1:6379> ACL SETUSER writer on >password allkeys allcommands -@dangerousread-only:로 시작하는 key만 접근 가능1127.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 그룹 목록 조회 #
1127.0.0.1:6379> ACL CAT
2 1) "keyspace"
3 2) "read"
4 3) "write"
5 4) "set"
6 5) "sortedset"
7 6) "list"
8 7) "hash"
9 8) "string"
10 9) "bitmap"
1110) "hyperloglog"
1211) "geo"
1312) "stream"
1413) "pubsub"
1514) "admin"
1615) "fast"
1716) "slow"
1817) "blocking"
1918) "dangerous"
2019) "connection"
2120) "transaction"
2221) "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 목록 조회 #
1127.0.0.1:6379> ACL CAT groupCommand가 어느 그룹에 속하는지 확인
1127.0.0.1:6379> COMMAND INFO <Command명>
사용자 삭제 DELUSER #
1127.0.0.1:6379> ACL DELUSER user- Default user 삭제 불가
ACL file #
사용자 정보 저장
1127.0.0.1:6379> ACL SAVE- 사용자 정보를 redis.conf에 설정된 옵션에 따라 acl file에 저장
- 저장하는 사용자 정보는 ACL LIST의 결과와 같음
사용자 정보 로드
1127.0.0.1:6379> ACL LOAD- redis 서버 시작 시 acl file에서 사용자 정보 로드
ACL(Auth) 로그 #
1127.0.0.1:6379> ACL LOG [<count> | RESET]- 실패한 로그인 정보 조회
ACL 참고
Advertisement