서비스 레벨 인가 가이드
서비스 레벨 인가 가이드 (Service Level Authorization Guide)
이 문서는 Hadoop의 **서비스 레벨 인가(Service Level Authorization)**를 구성하고 관리하는 방법을 설명합니다.
전제 조건 (Prerequisites)
Hadoop이 올바르게 설치·구성·설정되었는지 확인하세요. 자세한 내용은 다음을 참고하면 됩니다.
- 처음 사용자는 Single Node Setup.
- 대규모 분산 클러스터는 Cluster Setup.
개요 (Overview)
서비스 레벨 인가는 특정 Hadoop 서비스에 연결하는 클라이언트가 필요한 사전 구성된 권한을 갖고 해당 서비스에 접근할 수 있는지 확인하는 초기 인가 메커니즘입니다. 예를 들어 MapReduce 클러스터는 이 메커니즘을 사용해 구성된 사용자/그룹 목록만 작업을 제출하도록 허용할 수 있습니다.
$HADOOP_CONF_DIR/hadoop-policy.xml 설정 파일은 다양한 Hadoop 서비스에 대한 접근 제어 목록(ACL)을 정의하는 데 사용됩니다.
서비스 레벨 인가는 파일 권한 검사, 작업 큐 접근 제어 같은 다른 접근 제어 검사보다 훨씬 먼저 수행됩니다.
설정 (Configuration)
이 절에서는 $HADOOP_CONF_DIR/hadoop-policy.xml 설정 파일을 통해 서비스 레벨 인가를 구성하는 방법을 설명합니다.
서비스 레벨 인가 활성화
기본적으로 서비스 레벨 인가는 Hadoop에서 비활성화되어 있습니다. 활성화하려면 $HADOOP_CONF_DIR/core-site.xml에서 hadoop.security.authorization 설정 속성을 true로 설정합니다.
Hadoop 서비스와 설정 속성
이 절에서는 다양한 Hadoop 서비스와 그 설정 노브를 나열합니다:
| 속성 | 서비스 |
|---|---|
security.client.protocol.acl |
ClientProtocol에 대한 ACL. DistributedFileSystem을 통해 사용자 코드가 사용합니다. |
security.client.datanode.protocol.acl |
ClientDatanodeProtocol(블록 복구를 위한 클라이언트-투-데이터노드 프로토콜)에 대한 ACL. |
security.datanode.protocol.acl |
DatanodeProtocol에 대한 ACL. datanode가 namenode와 통신하는 데 사용합니다. |
security.inter.datanode.protocol.acl |
InterDatanodeProtocol(세대 타임스탬프 업데이트를 위한 데이터노드 간 프로토콜)에 대한 ACL. |
security.namenode.protocol.acl |
NamenodeProtocol에 대한 ACL. secondary namenode가 namenode와 통신하는 데 사용하는 프로토콜. |
security.job.client.protocol.acl |
JobSubmissionProtocol에 대한 ACL. 작업 클라이언트가 작업 제출, 상태 조회 등을 위해 resourcemanager와 통신하는 데 사용합니다. |
security.job.task.protocol.acl |
TaskUmbilicalProtocol에 대한 ACL. map과 reduce 태스크가 부모 nodemanager와 통신하는 데 사용합니다. |
security.refresh.policy.protocol.acl |
RefreshAuthorizationPolicyProtocol에 대한 ACL. dfsadmin과 rmadmin 명령이 시행 중인 보안 정책을 새로고침하는 데 사용합니다. |
security.ha.service.protocol.acl |
HAService 프로토콜에 대한 ACL. HAAdmin이 namenode의 active와 stand-by 상태를 관리하는 데 사용합니다. |
접근 제어 목록 (Access Control Lists)
$HADOOP_CONF_DIR/hadoop-policy.xml은 각 Hadoop 서비스에 대한 접근 제어 목록을 정의합니다. 모든 접근 제어 목록은 간단한 형식입니다.
사용자 목록과 그룹 목록은 모두 쉼표로 구분된 이름 목록입니다. 두 목록은 공백으로 구분됩니다.
예: user1,user2 group1,group2.
그룹 목록만 제공하려면 줄 시작에 공백을 추가합니다. 즉, 쉼표로 구분된 사용자 목록 뒤에 공백이 있거나 없으면 주어진 사용자 집합만 의미합니다.
특수 값 *는 모든 사용자가 서비스에 접근할 수 있음을 의미합니다.
서비스에 대한 접근 제어 목록이 정의되지 않으면 security.service.authorization.default.acl의 값이 적용됩니다. security.service.authorization.default.acl도 정의되지 않으면 *가 적용됩니다.
차단 접근 제어 목록 (Blocked Access Control Lists)
경우에 따라 서비스에 대한 차단 접근 제어 목록(blocked access control list)을 지정해야 합니다. 이는 서비스 접근이 허용되지 않는 사용자와 그룹 목록을 지정합니다. 차단 접근 제어 목록의 형식은 접근 제어 목록과 동일합니다. 차단 접근 제어 목록은 $HADOOP_CONF_DIR/hadoop-policy.xml로 지정할 수 있습니다. 속성 이름은 ".blocked"를 접미사로 붙여 파생됩니다.
예: security.client.protocol.acl의 차단 접근 제어 목록 속성 이름은 security.client.protocol.acl.blocked입니다.
서비스에 대해 접근 제어 목록과 차단 제어 목록을 모두 지정할 수 있습니다. 사용자가 접근 제어 목록에 있고 차단 접근 제어 목록에 없다면 서비스에 접근할 수 있습니다.
서비스에 대한 차단 접근 제어 목록이 정의되지 않으면 security.service.authorization.default.acl.blocked의 값이 적용됩니다. 이것도 정의되지 않으면 빈 차단 접근 제어 목록이 적용됩니다.
IP 주소, 호스트 이름, IP 범위 목록을 사용한 접근 제어
서비스 접근은 서비스에 접근하는 클라이언트의 ip 주소를 기준으로 제어할 수 있습니다. IP 주소, 호스트 이름, ip 범위 목록을 지정하면 특정 머신 집합에서만 서비스에 접근하도록 제한할 수 있습니다. 각 서비스의 속성 이름은 해당 acl의 속성 이름에서 파생됩니다. acl의 속성 이름이 security.client.protocol.acl이면 hosts 목록의 속성 이름은 security.client.protocol.hosts입니다.
서비스에 대한 hosts 목록이 정의되지 않으면 security.service.authorization.default.hosts의 값이 적용됩니다. 이것도 정의되지 않으면 *가 적용됩니다.
차단된 hosts 목록도 지정할 수 있습니다. hosts 목록에 있지만 차단된 hosts 목록에 없는 머신만 서비스에 접근할 수 있습니다. 속성 이름은 ".blocked"를 접미사로 붙여 파생됩니다.
예: security.client.protocol.hosts의 차단된 hosts 목록 속성 이름은 security.client.protocol.hosts.blocked입니다.
서비스에 대한 차단된 hosts 목록이 정의되지 않으면 security.service.authorization.default.hosts.blocked의 값이 적용됩니다. 이것도 정의되지 않으면 빈 차단된 hosts 목록이 적용됩니다.
서비스 레벨 인가 설정 새로고침
NameNode와 ResourceManager의 서비스 레벨 인가 설정은 두 마스터 데몬 중 하나를 다시 시작하지 않고 변경할 수 있습니다. 클러스터 관리자는 마스터 노드에서 $HADOOP_CONF_DIR/hadoop-policy.xml을 변경한 뒤, 각각 dfsadmin과 rmadmin 명령에 -refreshServiceAcl 스위치를 사용해 NameNode와 ResourceManager가 각자의 설정을 다시 로드하도록 지시할 수 있습니다.
NameNode의 서비스 레벨 인가 설정을 새로고침합니다:
$ bin/hdfs dfsadmin -refreshServiceAcl
ResourceManager의 서비스 레벨 인가 설정을 새로고침합니다:
$ bin/yarn rmadmin -refreshServiceAcl
물론 $HADOOP_CONF_DIR/hadoop-policy.xml의 security.refresh.policy.protocol.acl 속성으로 서비스 레벨 인가 설정을 새로고침하는 기능에 대한 접근을 특정 사용자/그룹으로 제한할 수 있습니다.
예시 (Examples)
alice, bob 사용자와 mapreduce 그룹의 사용자만 MapReduce 클러스터에 작업을 제출하도록 허용:
<property>
<name>security.job.client.protocol.acl</name>
<value>alice,bob mapreduce</value>
</property>
datanodes 그룹에 속한 사용자로 실행되는 DataNode만 NameNode와 통신하도록 허용:
<property>
<name>security.datanode.protocol.acl</name>
<value>datanodes</value>
</property>
어떤 사용자든 DFSClient로 HDFS 클러스터와 통신하도록 허용:
<property>
<name>security.client.protocol.acl</name>
<value>*</value>
</property>