๐Ÿ—‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/Redis

[Redis] ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ! (8) - ACL

๋ฏธ์ธ์ฃผ 2023. 1. 25. 18:50

ACL

Access Control List์˜ ์ค„์ž„๋ง๋กœ redis 6๋ถ€ํ„ฐ ๋„์ž…๋œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

 

๋‹ค๋ฅธ RDBMS(MySQL, Oracle ๋“ฑ)์—๋Š” ์œ ์ €๋ณ„๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ

redis์—๋Š” ์œ ์ €๋ผ๋Š” ๊ฐœ๋…์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

 

ACL์€ ์œ ์ €๋ฅผ ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ปค๋งจ๋“œ์™€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค ์ธก๋ฉด์—์„œ ํŠน์ • ์—ฐ๊ฒฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

 

# 1
ACL SETUSER alice on >p1pp0 ~cached:* +get

# 2
AUTH alice p1pp0
  • #1 : alice ๋ผ๋Š” user๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • ์ด๋ฆ„ 
    • ํŒจ์Šค์›Œ๋“œ : p1pp0
    • ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ํ‚ค ํŒจํ„ด : cached ๋กœ ์‹œ์ž‘ํ•˜๋Š” key๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. (allkeys : ๋ชจ๋“  ํ‚ค์— ์ ‘๊ทผ ๊ฐ€๋Šฅ)
    • ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ปค๋งจ๋“œ : ์ ‘๊ทผํ•  ๋•Œ๋Š” get ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (allcommands : ๋ชจ๋“  ๋ช…๋ น์–ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
  • #2 : alice ๊ณ„์ •์œผ๋กœ redis๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ๋งŒ ์„ค์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์€ "default" user๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

ACL feature๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ user๋ฅผ ์ƒ์„ฑํ•˜๊ณ , user๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” key์™€ command๋ฅผ ์ง€์ •ํ•ด๋†“๋Š”๋‹ค๋ฉด, redis๋ฅผ ์กฐ๊ธˆ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ์ž ๋“ฑ๋ก

> ACL SETUSER user on/off >password keys commands
  • user: user-id๋ฅผ ์„ค์ •ํ•œ๋‹ค.
  • on/off: ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์ •ํ•œ๋‹ค. on์ด๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ , off์ด๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
    • Off๋Š” ์‚ฌ์šฉ์ž๋Š” ๋“ฑ๋กํ•˜์ง€๋งŒ ์ผ๋‹จ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•  ๊ฒฝ์šฐ ๋˜๋Š” ๊ธฐ์กด ์‚ฌ์šฉ์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์ด ๊ฒฝ์šฐ ์ƒˆ๋กœ ๋กœ๊ทธ์ธ(auth)์€ ํ•  ์ˆ˜ ์—†์ง€๋งŒ, ์ด๋ฏธ ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ ์‚ฌ์šฉ์„ ๋ง‰์ง€๋Š” ๋ชปํ•œ๋‹ค.
  • >password: '>' ๊ตฌ๋ถ„์ž ๋‹ค์Œ์— ์ง€์ •ํ•œ๋‹ค. ์ž์œ ๋กญ๊ฒŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํŒจ์Šค์›Œ๋“œ ์—†์ด ์‚ฌ์šฉํ•˜๋ ค๋ฉด nopass๋ฅผ ์ง€์ •ํ•œ๋‹ค. ๋กœ๊ทธ์ธ ์‹œ ์–ด๋–ค ๋ฌธ์ž์—ด์ด๋“  ์ž…๋ ฅํ•ด๋„ ๋œ๋‹ค.
    • ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ง€์ •ํ–ˆ์„ ๊ฒฝ์šฐ: auth user password ๋กœ ๋กœ๊ทธ์ธ
  • keys:
    • ๋ชจ๋“  ํ‚ค : allkeys ๋˜๋Š” ~*
    • ํŠน์ • ํŒจํ„ด : ์˜ˆ) ~user*, ~key* ์ด๋ ‡๊ฒŒ ์ง€์ •ํ•˜๋ฉด user ๋˜๋Š” key๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ‚ค์— ๋Œ€ํ•ด์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ‚ค X : Resetkeys
    • ํ‚ค ํŒจํ„ด์„ ์ง€์ •ํ•˜๋ฉด ๋งค ๋ช…๋ น๋งˆ๋‹ค ๋น„๊ตํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ์„ฑ๋Šฅ์ด ์šฐ์„ ์ผ ๊ฒฝ์šฐ ์‚ฌ์šฉ์— ์ฃผ์˜
  • commands:
    • ๋ชจ๋“  ๋ช…๋ น : allcommands ๋˜๋Š” +@all
    • ๋ช…๋ น X : Nocommands ๋˜๋Š” -@all
    • ๋ช…๋ น์€ ๊ทธ๋ฃน ๋˜๋Š” ๋ช…๋ น์œผ๋กœ ์ถ”๊ฐ€ ๋˜๋Š” ๋บ„ ์ˆ˜ ์žˆ๋‹ค.
      • ๋ช…๋ น ๊ทธ๋ฃน : +@group/-@group, ๋ช…๋ น : +command/-command

 

์‚ฌ์šฉ์ž ์กฐํšŒ

ACL GETUSER user

 

์‚ฌ์šฉ์ž ์‚ญ์ œ

ACL DELUSER user

 

๋ณธ์ธ ํ™•์ธ

ACL WHOAMI

 

์‚ฌ์šฉ์ž ๋ฆฌ์ŠคํŠธ ์กฐํšŒ

ACL USERS

 

์‚ฌ์šฉ์ž ์ •๋ณด ๋ฆฌ์ŠคํŠธ ์กฐํšŒ

ACL LIST

 

์‚ฌ์šฉ์ž ์ •๋ณด ์ €์žฅ

ACL SAVE

 

์‚ฌ์šฉ์ž ์ •๋ณด ๋กœ๋“œ

ACL LOAD

 

๋ช…๋ น ๊ทธ๋ฃน ์กฐํšŒ

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: flushdb, keys, shutdown, info, client ๋“ฑ
  • connection: hello, client, auth, echo, ping, command
  • transaction: watch, multi, unwatch, discard, exec
  • scripting: evalsha, eval, script

๊ฐ ๋ช…๋ น์ด ์–ด๋Š ๊ทธ๋ฃน์— ์†ํ•˜๋Š”์ง€๋Š” "command info ๋ช…๋ น"์„ ์‚ฌ์šฉํ•ด์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด, SET ๋ช…๋ น์€ write, string, slow์ด๊ณ , GET ๋ช…๋ น์€ read, string, fast์ด๋‹ค.

 

ํŒจ์Šค์›Œ๋“œ ์ƒ์„ฑ

ACL GENPASS [<bits>]
  • ๋””ํดํŠธ๋กœ 64๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด๋กœ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ SHA-256์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

ACL(Auth) ๋กœ๊ทธ

ACL LOG [<count> | RESET]

โœ… ๊ณต์‹๋ฌธ์„œ

https://redis.io/topics/acl

 

๋ชฉ์ฐจ

 

 

 

 

 

 

์ฐธ๊ณ 

http://redisgate.kr/redis/server/acl.php

https://sungbin.dev/post/Redis%20%ED%95%B4%ED%82%B9%EB%8B%B9%ED%95%9C%20%EC%9D%B4%EC%95%BC%EA%B8%B0