SASL Authentication / Authorization
Concept
Authentication
현재
SCRAM-SHA-256
인증 방식만을 지원한다.ZooKeeper에 암호화된 형태의 비밀번호를 보관하며, ZooKeeper에 저장된 데이터를 확인하더라도 해당 계정으로 인증할 수 없다.
Cyrus SASL 라이브러리 사용하며, ZooKeeper에 인증/권한 정보를 저장하기 위한 arcus auxprop plugin을 직접 구현한다.
Permissions
각 계정에는 아래와 같은 권한을 부여할 수 있다.
특정 type의 item을 조회/수정할 수 있는 권한:
kv
,list
,set
,map
,btree
Item attribute 관련 명령의 수행 권한:
attr
Flush 계열 명령의 수행 권한:
flush
설정/운영 관련 명령의 수행 권한:
admin
ACL Group
인증/권한 관련 규칙의 집합을 구분하는 단위이다.
하나의 ACL group에는 여러 사용자가 포함될 수 있으며, 각 사용자에게 권한을 부여할 수 있다.
서로 다른 ACL group에는 같은 이름을 갖는 사용자가 존재할 수 있으며, 독립적인 password와 권한을 갖게 된다.
ARCUS Cache Server는 구동 시 하나의 ACL group을 선택하여 해당 ACL group의 인증/권한 정보에 따라 동작하게 된다.
Manage
계정/권한 관리를 위한 도구로 arcusctl
을 제공하며, 아래와 같은 기능을 지원한다.
ACL group 생성/제거
ACL group 하위 사용자 생성/제거
arcusctl 사용하여 ACL group 정보를 ZooKeeper에 저장/조회할 수 있다. 아래는 2개의 ACL group(userGroup01, userGroup02)을 포함하는 znode 예시이다.
userGroup01의 alice와 userGroup02의 alice는 서로 연관이 없는 별도의 계정이다. 각자의 고유한 비밀번호와 권한을 갖는다.
*
으로 시작하는 사용자 계정(bob)은, 서버에 연결해서 수행하는 모든 명령 이력을 감사 로그로 기록한다.
/arcus_acl
/arcus_acl/userGroup01
/arcus_acl/userGroup01/alice : kv,list,attr,flush
/arcus_acl/userGroup01/alice/authPassword : SCRAM-SHA-256$4096:zYKWe/t...
/arcus_acl/userGroup01/*bob : attr,flush,admin
/arcus_acl/userGroup01/*bob/authPassword : SCRAM-SHA-256$...
/arcus_acl/userGroup02
/arcus_acl/userGroup02/alice : btree,attr
/arcus_acl/userGroup02/alice/authPassword : SCRAM-SHA-256$4096:Wx8F+2m...
/arcus_acl
: 다수의 ACL group znode가 포함되는 최상위 znode/arcus_acl/userGroup01
: userGroup01 이름을 갖는 ACL group/arcus_acl/userGroup01/alice
: userGroup01에 속한 alice 사용자의 권한 정보/arcus_acl/userGroup01/alice/authPassword
: userGroup01에 속한 alice 사용자의 암호화된 비밀번호
Cache Server
Build
ARCUS Cache Server 빌드 시 configure option으로 --enable-sasl
지정 시 SASL 인증 관련 기능을 사용할 수 있다.
./configure ... --enable-sasl [--with-sasl=<cyrus-sasl_install_path>]
Running
ZooKeeper에 저장된 인증/권한 정보를 ARCUS Cache Server에서 사용하기 위하여 아래와 같이 환경변수를 설정해야 한다.
ARCUS_ACL_ZOOKEEPER
: ACL group 정보가 저장된 ZooKeeper 주소ARCUS_ACL_GROUP
: ACL group 이름
Cache Server 구동 시 -S
옵션을 지정하여 클라이언트 연결에 대한 SASL 인증을 요구할 수 있으며, 실행 명령 예시는 아래와 같다.
ARCUS_ACL_ZOOKEEPER="127.0.0.1:2181" ARCUS_ACL_GROUP="userGroup01"\
$INSTALL_PATH/bin/memcached ... -S
-S
옵션 지정하지 않고 구동하더라도 동적으로 SASL 인증을 활성화하기 위한 config auth on
기능을 제공한다. 이 경우 ARCUS_ACL_ZOOKEEPER
, ARCUS_ACL_GROUP
환경변수는 설정된 상태여야 정상 동작한다. 반대로, SASL 인증을 동적으로 비활성화하는 기능은 제공하지 않는다.
ARCUS Cache Server는 ZooKeeper에 저장된 인증/권한 정보를 가져와서 캐싱하여 사용하며, 24시간 주기로 갱신한다. 따라서 ACL 사용자 정보를 추가/수정/제거하는 경우 캐시에 반영되어 사용되기까지 최대 24시간이 소요될 수 있다. 필요 시 빠른 반영을 위해 reload auth
명령을 제공한다.
Commands
--enable-sasl
설정 시 활성화되는 명령(ascii protocol 기준)은 다음과 같다.
sasl mech
: 캐시 서버가 지원하는 인증 방식 목록 조회sasl auth
: 특정 인증 방식으로 인증 과정 수행config auth on
: 동적으로 SASL 인증을 활성화reload auth
: 외부에 저장된 인증/권한 정보를 로딩하여 캐싱
Audit Log
감사 로그는 SECURITY_EVENT
keyword로 시작하며, 아래 상황에서 기록한다.
인증 성공/실패
SECURITY_EVENT client=10.0.0.1 user=alice authentication succeeded
SECURITY_EVENT client=10.0.0.1 user=alice authentication failed(no mechanism available)
명령 수행 이력
일반 user: 권한 없는 명령 수행 시도 이력
*
문자로 시작하는 user: 모든 명령 수행 이력
SECURITY_EVENT client=10.0.0.1 user=alice cmd="mop create 0 100 10" unauthorized
SECURITY_EVENT client=10.0.0.1 user= cmd="set kv 0 60 5" unauthorized
SECURITY_EVENT client=10.0.0.1 user=*bob cmd="set kv 0 60 5" unauthorized
SECURITY_EVENT client=10.0.0.1 user=*bob cmd="config memlimit" authorized
Last updated
Was this helpful?