보안 기능 설정
Hadoop Eco는 Apache Ranger와 Kerberos를 이용하여 보안 기능을 적용할 수 있습니다.
HDE-1.0.1 버전은 보안 기능을 지원하지 않습니다. 커버로스를 지원하지 않는 일부 컴포넌트는 정상 동작하지 않을 수 있으며, 보안 기능을 사용하면 Data Catalog를 연동할 때 정상동작하지 않을 수 있습니다.
커버로스(Kerberos)
커버로스는 MIT에서 개발한 사용자 인증 프로토콜입니다.
커버로스 인증을 적용하면 KDC가 설치 되고 Hadoop, Hive, HBase에 커버로스 인증이 적용됩니다.
커버로스 적용 후 Hadoop, Hive, HBase를 사용하기 위해서는 커버로스 인증을 해야하며, 키탭을 이용하여 컴포넌트간 인증을 진행하면 '/etc/hadoopeco.keytab' 위치에 기본 키탭이 생성됩니다. 기본 키탭으로 기본 사용자의 목록을 확인할 수 있습니다.
# 기본 유저 확인
klist -kt /etc/hadoopeco.keytab
# 인증 방법
kinit -kt /etc/hadoopeco.keytab hdfs/{host_name}@{realm_name}
커버로스 설치에 대한 설명은 설치 및 연동 방법을 참고 바랍니다.
컴포넌트 포트 변경
커버로스 설정이 되면 일부 컴포넌트의 기본 포트가 변경됩니다. 목록은 아래와 같습니다.
HDE 버전 | 컴포넌트 | 기존 포트 | 변경 포트 | 비고 |
---|---|---|---|---|
HDE-1.x | HDFS Namenode | 50070 | 50470 | https로 접근 |
HDFS SecondaryNamenode | 50090 | 50091 | ||
HDFS Datanode | 50075 | 50475 | https로 접근 | |
HDE-2.x | HDFS Namenode | 9870 | 9871 | https로 접근 |
HDFS SecondaryNamenode | 9868 | 9869 | ||
HDFS Datanode | 9864 | 9867 | https로 접근 |
레인저(Ranger)
Hadoop Eco는 Apache Ranger를 이용하여 ACL 적용 및 오딧(Audit)을 확인할 수 있습니다.
레인저의 기본 id는 admin
이고, 암호는 클러스터 생성 시 입력하는 관리자 비밀번호를 이용합니다. 레인저는 다음과 같은 암호 생성 규칙을 요구합니다.
- 8글자 이상
- 대문자, 소문자, 숫자가 각 1개 이상
- 일부 특수문자 (\`'"")는 지원하지 않는 특수 문자
레인저 접속
레인저는 싱글일 경우 마스터 서버, HA 일 경우 마스터 3번 서버에 설치되고, 6080 포트로 접근할 수 있습니다.
- 레인저가 설치된 VM의 보안 그룹을 확인하고, 퍼블릭 IP를 추가합니다.
- admin, rangerAdmin1을 입력하여 접근합니다.
- 기본적으로 HDFS, YARN, Hadoop SQL 플러그인을 지원합니다.
레인저 정책
레인저는 정책을 수정 후 에이전트에서 정책을 가져가서 적용해야 합니다.
Plugin Status에서 정책이 다운로드 되고 Active 상태가 되는 것을 확인 후 작업이 실행되는 것을 확인할 수 있습니다.
HDFS 정책 수정 후 Access Enforcer에서 ranger-acl이 적용되어 사용자 접근이 제한되는 것을 확인할 수 있습니다
설치 및 연동 방법
설치 방법
Hadoop Eco 생성 시 3단계 상세 설정의 클러스터 구성 설정에 다음 정보를 추가하여 커버로스와 레인저를 설치할 수 있습니다.
{
"configurations":
[
{
"classification": "kerberos-setting",
"properties":
{
"enabled": true, # 커버로스 설정 여부
"passwd": "bigadmin", # KDC 암호
"realm": "HADOOP.ECO" # 기본 렐름 명
}
},
{
"classification": "ranger-setting",
"properties":
{
"enabled": true
}
}
]
}
연동 방법
레인저는 커버로스와 연동되어 사용자를 확인할 수 있습니다.
작업 확인을 위해 각 노드에 사용자를 추가하고, 커버로스 키탭을 발급합니다.
사용자 추가
커버로스 인증을 위해서 마스터 노드에 사용자를 원하는 그룹에 추가합니다.
마스터 노드는 사용자가 원하는 그룹에 추가하고, 워커 노드는 hadoop 그룹에 추가합니다.
# 마스터 노드
groupadd {group_name}
useradd {user_name} -g {group_name}
usermod -G {group_name} {user_name}
# 워커 노드
useradd {user_name} -g hadoop
usermod -G hadoop {user_name}
사용자 추가 후 네임 노드와 리소스 매니저에 사용자가 추가된 것을 알려주어야 합니다.
# 네임 노드 적용
kinit -kt /etc/hadoopeco.keytab hdfs/{host_name}@{realm_name}
hdfs dfsadmin -refreshServiceAcl
hdfs dfsadmin -refreshUserToGroupsMappings
hdfs dfsadmin -refreshSuperUserGroupsConfiguration
# 리소스 매니저 적용
kinit -kt /etc/hadoopeco.keytab yarn/{host_name}@{realm_name}
yarn rmadmin -refreshSuperUserGroupsConfiguration
yarn rmadmin -refreshUserToGroupsMappings
yarn rmadmin -refreshAdminAcls
yarn rmadmin -refreshServiceAcl
키탭 발급 및 로그인
KDC 에 등록한 사용자의 정책(principal)을 등록하고 키탭으로 발급합니다.
# kadmin에 로그인
sudo kadmin.local
# kadmin cli에서 사용자 등록 후 키탭 발급
addprinc -randkey {user_name}@{realm_name}
xst -k {keytab_file_name} {user_name}@{realm_name}
키탭을 발급하면 해당 위치에 파일이 생성된 것을 확인할 수 있습니다.
# 키텝에 등록된 사용자 목록 확인
klist -kt {keytab_file_name}
# 키탭의 계정으로 로그인
kinit -kt {keytab_file_name} {user_name}@{realm_name}
# 인증한 유저 확인
klist
동작 확인
사용자를 등록 후 작업을 실행하면 다음과 같이 HDFS, YARN, Hadoop SQL ACL 이 적용되는 것을 확인할 수 있습니다.