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
- ๋ชจ๋ ๋ช
๋ น : allcommands ๋๋ +@all
์ฌ์ฉ์ ์กฐํ
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]
โ ๊ณต์๋ฌธ์
๋ชฉ์ฐจ
- ACL์ด ์ ์ฉํ ๊ฒฝ์ฐ
- ACL ๋ช ๋ น์ผ๋ก ACL ๊ตฌ์ฑ
- ACL ๊ท์น
- ACL SETUSER ๋ช ๋ น์ผ๋ก ์ฌ์ฉ์ ACL ์์ฑ ๋ฐ ํธ์ง
- ACL SETUSER์ ๋ํ ๋ค์ค ํธ์ถ
- ๋ช ๋ น์ด ์นดํ ๊ณ ๋ฆฌ
- ํ์ ๋ช ๋ น ํ์ฉ/์ฐจ๋จ
- ์ฐจ๋จ๋ ๋ช ๋ น์ ์ฒซ ๋ฒ์งธ ์ธ์ ํ์ฉ
- +@a,ll VS -@all
- ์ ํ์
- ์ฃผ์ ๊ถํ
- ์ํธ๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ ์ฅ๋๋ ๋ฐฉ์
- ์ธ๋ถ ACL ํ์ผ ์ฌ์ฉ
- ์ผํฐ๋ ๋ฐ ๋ฆฌํ๋ฆฌ์นด์ ๋ํ 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