화요일, 12월 10, 2024
HomeLinuxzookeeper ACL(Action Control List) 설정

zookeeper ACL(Action Control List) 설정

zookeeper ACL(Action Control List) 설정

 

Action Control List (ACL) – ACL은 기본적으로 z 노드에 액세스하기위한 인증 메커니즘입니다. 
모든 znode 읽기 및 쓰기 조작을 제어합니다.

ACL Permissions

 ZooKeeper에서의 권한은 unix-like 파일시스템의 권한과 크게 다를 것은 없다.
 특정 권한들에 대해 allow flag가 있어서 이것이 어떻게 설정되는가에 따라서 해당 권한을 실행시킬 수 있는지가 결정된다.

 ZooKeeper에서 설정할 수 있는 ACL의 종류는 아래의 5가지이다.

  • CREATE : 해당 znode의 자식 node를 만들 수 있는 권한.
  • READ : 해당 znode에서 data를 읽고 와 그 자식들의 목록을 읽을 수 있는 권한.
  • WRITE : 해당 znode에 값을 쓸 수 있는 권한.
  • DELETE : 해당 znode의 자식들을 지울 수 있는 권한.
  • ADMIN : 해당 znode에 권한을 설정할 수 있는 권한.

 unix-like file system과 다른 부분이 2가지 있다.
 첫 번째는 보통의 file system에는 없는 CREATE와 DELETE라는 권한이 존재하여 자식 node를 생성하고 삭제할 수 있는 권한이 있다는 것이다.
 unix-like file system에서 directory는 실제로는 자기 자식의 list를 가지고 있는 file이다.
 그래서 자식을 만들고 지우는 것은 부모 directory에 내용을 변경하는 것이고, 부모 directory에 쓰기 권한이 있는지가 자식을 만들고 지우는 권한이 된다.
 하지만 ZooKeeper에서는 모든 znode가 directory이기도 하고, file이기도 해서 자기 자신에 대한 쓰기 권한과 자식 node에 대한 생성/삭제 권한을 같이 쓸 수 없다.

Schemes

 ZooKeeper는 unix-like 시스템과 다르게 각 znode에 user/group/others라는 개념이 존재하지 않는다.
 대신 scheme이라는 것을 이용하여 권한을 구분하게 되어 있다.
 built in으로 제공되는 설정할 수 있는 scheme은 아래와 같이 4가지가 있다.

  • WORLD
  • AUTH
  • DIGEST
  • HOST
  • IP
 WORLD는 모든 요청에 대해 허락하는 것이고, AUTH는 authenticated된 session에서 들어오는 요청에 대해서만 허락하는 것이다.
 DIGEST는 username과 password를 보내서 이를 이용하여 만든 MD5 hash값이 같은 요청에 대해서만 처리하는 것이고, IP는 해당 IP에서의 요청만을 처리하도록 하는 것이다.

Stat

 ZNode는 node와 node의 data에 관한 여러 정보를 들고 있고, 이것을 stat이라고 부른다. stat이 가지는 정보는 다음과 같다.
  • czxid : znode를 생성한 트랜잭션의 id
  • mzxid : znode를 마지막으로 수정 트랜잭션의 id
  • ctime : znode가 생성됐을 때의 시스템 시간
  • mtime : znode가 마지막으로 변경되었을 때의 시스템 시간
  • version : znode가 변경된 횟수
  • cversion : znode의 자식 node를 수정한 횟수
  • aversion : ACL 정책을 수정한 횟수
  • ephemeralOwner : 임시 노드인지에 대한 flag
  • dataLength : data의 길이
  • numChildren : 자식 node의 수

Scheme ACL 살펴보기

WORLD Scheme명령 구문은 다음과 같습니다.

setAcl /znode world:anyone:crdwa
[zk: localhost:2181(CONNECTED) 3] setAcl /znode world:anyone:crdwa
cZxid = 0x18600000003
ctime = Tue Aug 06 09:20:54 GMT+09:00 2019
mZxid = 0x18600000003
mtime = Tue Aug 06 09:20:54 GMT+09:00 2019
pZxid = 0x18600000003
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0

AUTH Scheme 명령 구문은 다음과 같습니다.

인증 사용자를 추가 후 ACL 설정을 할 수 있습니다.

addauth digest [username]:[password]

인증 사용자를 추가후 znode에 ACL을 설정합니다.

setAcl /znode auth:[username]:[password]:crdwa

아래와같이 설정합니다.

[zk: localhost:2181(CONNECTED) 7] addauth digest user1:pwd1
[zk: localhost:2181(CONNECTED) 8] setAcl /authznode auth:user1:pwd1:crdwa
cZxid = 0x18600000005
ctime = Tue Aug 06 09:24:05 GMT+09:00 2019
mZxid = 0x18600000005
mtime = Tue Aug 06 09:24:05 GMT+09:00 2019
pZxid = 0x18600000005
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
[zk: localhost:2181(CONNECTED) 9] getAcl /authznode
'digest,'user1:a9l5yfb9zl8WCXjVmi5/XOC0Ep4=
: cdrwa

 

DIGEST Scheme 명령 구문은 다음과 같습니다.

setAcl /[node_name] digest:[usename]:[password]:crdwa
[zk: localhost:2181(CONNECTED) 11] setAcl /digznode digest:user1:pwd1:crdwa 
cZxid = 0x18600000007
ctime = Tue Aug 06 09:33:08 GMT+09:00 2019
mZxid = 0x18600000007
mtime = Tue Aug 06 09:33:08 GMT+09:00 2019
pZxid = 0x18600000007
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
[zk: localhost:2181(CONNECTED) 12] getAcl /digznode
'digest,'user1:pwd1
: cdrwa

 

HOST Scheme 명령 구문은 다음과 같습니다.

setAcl /[node_name] host:[hostname]:crdwa

 

IP Scheme 명령 구문은 다음과 같습니다.

setAcl /[node_name] ip:[IPv4Address]:crdwa

 

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular