[Redis] ACL 이란? ACL 사용 방법

hwwwa·2023년 1월 25일
2
post-thumbnail

Redis ACL

  • ACL : Access Control List. 접근 제어
  • 사용자를 생성하고 암호 지정, 사용 가능한 커맨드와 키 지정 가능
  • ACL 사용을 통해 보안성과 안전성 구현 가능
    • KEYS/FLUSHALL 호출 방지, 사용자에게 필요한 권한만 부여 등

사용자 조회

  • 사용자 정보 리스트 조회
    > ACL LIST
    1) "user default on nopass ~* +@all"
    • 초기 Redis 서버에는 default user가 등록되어있음
    • 사용자명 default, 활성 상태, 비밀번호 없음, 모든 키 접근 가능, 모든 커맨드 수행 가능
  • 사용자 목록 조회

    > ACL USERS
  • 사용자 조회

    > ACL GETUSER user
  • 본인 확인

    > ACL WHOAMI

로그인 AUTH

> AUTH user password
  • user명 생략 시 default user로 로그인

사용자 등록 ACL SETUSER

> 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 : 사용 가능한 커맨드 지정
    • 모든 커맨드 허용 : allcommands 또는 +@all
    • 모든 커맨드 비허용 : nocommands 또는 -@all
    • 커맨드 지정 : +command로 추가, -command로 빼기
    • 커맨드 그룹 지정 : +@group으로 추가, -@group으로 빼기
  • ACL SETUSER 커맨드는 비밀번호가 포함되므로 로그에 남지 않음
  • 관리자 user 설정
    > ACL SETUSER admin on >password allkeys allcommands
  • 조회 user 설정
    > ACL SETUSER reader on >password allkeys +@read
  • Read/Write 가능한 일반 사용자 설정
    > ACL SETUSER writer on >password allkeys allcommands -@dangerous

커맨드 그룹

커맨드 그룹 목록 조회

> 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 그룹

  • 보안 위험, 성능 저하 위험이 있는 커맨드들이 포함됨
  • flushall : 레디스 서버의 모든 데이터(key, value) 삭제
  • flushdb : 현재 사용중인 DB의 모든 데이터(key, value) 삭제
  • swapdb : 두 DB를 swap
  • keys : 패턴에 일치하는 모든 key 반환 ➡️ scan 사용으로 대체
  • shutdown : 레디스 종료
  • monitor : 서버에서 실행되는 모든 커맨드 관찰/감시. monitor 수행 시 서버 성능 50% 하락
  • role : 자신의 역할(master/slave/sentinel)과 부가 정보 조회
  • sync : 내부 커맨드 replication
  • psync : 내부 커맨드 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 : 레디스 서버 정보와 통계값 조회
  • debug, pfdebug : redis 개발/테스트 용도. 여러 관리 명령 실행 가능
  • save : RDB 파일 저장 (foreground 수행). 수행 완료까지 서버가 다른 일 수행 불가
  • bgsave : RDB 파일 저장 (background 수행). 하위 프로세스를 생성하여 수행
  • bgrewriteaof: AOF 파일 저장(background 수행). 하위 프로세스를 생성하여 수행
  • lastsave : RDB 마지막 저장 일시를 timestamp 형식으로 출력
  • slaveof : 슬레이브 설정 변경
  • replicaof : 복제노드 설정 변경
  • config : 서버 설정 변경
  • client : 클라이언트 관리 (조회, 제거, 이름 변경 등)
  • cluster : 클러스터 설정 변경
  • module : 모듈 관리
  • slowlog : 명령 성능 측정/기록. 성능 저하 발생
  • latency : 서버 성능 분석. 성능 저하 발생
  • acl : 사용자 관리

그룹의 커맨드 목록 조회

> ACL CAT group
  • 커맨드가 어느 그룹에 속하는지 확인
    > COMMAND INFO 커맨드명

사용자 삭제 DELUSER

> ACL DELUSER user
  • Default user 삭제 불가

ACL file

  • 사용자 정보 저장
    > ACL SAVE
    • 사용자 정보를 redis.conf에 설정된 옵션에 따라 acl file에 저장
    • 저장하는 사용자 정보는 ACL LIST의 결과와 같음
  • 사용자 정보 로드
    > ACL LOAD
    • redis 서버 시작 시 acl file에서 사용자 정보 로드

ACL(Auth) 로그

> ACL LOG [<count> | RESET]
  • 실패한 로그인 정보 조회

참고
https://redis.com/blog/getting-started-redis-6-access-control-lists-acls/
https://redis.io/commands/
http://redisgate.kr/redis/server/acl.php
https://medium.com/garimoo/%EB%A0%88%EB%94%94%EC%8A%A4-acl-7dc10b1b7acb

0개의 댓글