하둡 에코시스템 중 하나인 Apache Ranger 설치 방법을 정리합니다.
Apache Ranger 레인저(ranger)는 하둡 에코시스템에서 종합적인 데이터 보안을 활성화하고 관리할 수 있는 도구이다. 특정 그룹과 사용자에 따라 데이터 접근 권한을 관리하고 감사 로그를 관리할 수 있다. Ldap 프로토콜로 Directory 서비스에서 그룹/사용자 정보를 가져올 수 있으며, 정책 또한 Tag 기반 관리가 가능하다.
아래 사진은 레인저 아키텍처이다.
Ranger admin ranger-admin은 엑세스 정책을 생성 및 관리하는 UI 인터페이스이다. 아래 사진처럼 다양한 플랫폼에 플러그인을 설치하여 어드민 웹페이지에서 관리할 수 있다.
또한 audit 페이지에서는 로그인 이력이나 엑세스 로그 뿐만 아니라 ranger-usersync에서 전달해주는 사용자 목록도 확인할 수 있다.
Ranger usersync ranger-usersync는 유저정보를 생성 및 관리하여 ranger-admin에게 전달하는 프로세스이다. 기본 설정에서는 ranger-usersync서버에 있는 Unix 계정을 사용자로 전달하며, AD와 연동하여 그룹/사용자 정보를 가져오도록 변경할 수도 있다.
설치 가이드 이번 설치 가이드에서는 현재 최신버전인 Ranger 2.4.0 버전 을 설치하고자 한다. 해당 버전의 경우 dockerhub에 도커 이미지가 없어서 소스 코드를 다운로드 받아 직접 이미지를 빌드하고 실행할 것이다. 또한 Ranger를 사용하기 위해서는 시스템 매트릭을 저장하는 RDB와 audit을 저장 및 관리하는 검색엔진이 필요하다. 따라서 이번 설치 가이드에서는 아래 조건을 바탕으로 진행된다.
Ranger 올릴 서버(AWS EC2)
OS: Linux 기반
Docker 설치
Git 설치 (선택)
RDB: Mysql(AWS RDS)
AUDIT: Elasticsearch(AWS OpenSearch)
LDAP: AD(AWS simple AD)
위 목록을 바탕으로 구성된 아키텍처는 다음과 같다.
Ranger 소스코드 다운로드 먼저 소스 코드를 다운로드 받는다. 소스코드를 다운받는 방법은 크게 3가지가 있다.
git clone으로 다운로드 받기 가장 간단한 방법은 깃허브 에 레파지토리를 clone해오는 것이다.
1 $ git clone --depth 1 --branch release-ranger-2.4.0 https://github.com/apache/ranger.git
wget
명령어로 다운로드 받기 두 번째 방법으로는 apache 페이지 에서 wget으로 다운로드 파일을 가져오는 것이다.
1 $ wget https://downloads.apache.org/ranger/2.4.0/apache-ranger-2.4.0.tar.gz
이렇게 다운받은 경우 tar.gz
로 묶여있기 때문에 압축을 해제해야 한다.
1 2 $ tar xzvf apache-ranger-2.4.0.tar.gz && mv apache-ranger-2.4.0 ranger
apache 페이지에서 직접 다운로드 받기 폐쇄망처럼 wget
으로 바로 다운받기 힘든 경우 apache 페이지 에서 버전에 맞게 소스코드를 다운받을 수 있다.
소스코드를 다운로드 받는 이유 보통은 로컬에 코드를 다운로드 하지 않고 dockerfile
에서 다운 받아 바로 빌드할 수 있도록 한다. 하지만 레인저의 경우 소스코드 내에 수많은 플러그인이 존재하는데 이 모든 것을 빌드할 필요도 없으며, 유지보수가 안되는 플러그인은 종종 빌드 에러의 원인이 된다.
버전 2.4.0의 경우에도 소스코드를 바로 빌드했더니 아래와 같은 에러가 발생했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary for ranger 2.4.0: [INFO] [INFO] ranger ............................................. SUCCESS [ 14.037 s] [INFO] Jdbc SQL Connector ................................. SUCCESS [ 9.003 s] [INFO] Credential Support ................................. SUCCESS [04:17 min] [INFO] Audit Component .................................... SUCCESS [03:43 min] [INFO] ranger-plugin-classloader .......................... SUCCESS [ 3.238 s] . . . [INFO] Ranger Examples - SampleApp ........................ SUCCESS [ 2.758 s] [INFO] Ranger Examples - Ranger Plugin for SampleApp ...... SUCCESS [ 4.129 s] [INFO] sample-client ...................................... SUCCESS [ 4.387 s] [INFO] Apache Ranger Examples Distribution ................ SUCCESS [ 3.275 s] [INFO] Ranger Tools ....................................... SUCCESS [ 18.098 s] [INFO] Kylin Security Plugin .............................. FAILURE [07:55 min] [INFO] Kylin Security Plugin Shim ......................... SKIPPED [INFO] Elasticsearch Security Plugin Shim ................. SKIPPED [INFO] Elasticsearch Security Plugin ...................... SKIPPED [INFO] Apache Ranger Distribution ......................... SKIPPED [INFO] Unix Native Authenticator .......................... SKIPPED [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 02:08 h [INFO] Finished at: 2023-04-06T06:03:07Z [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal on project ranger-kylin-plugin: Could not resolve dependencies for project org.apache.ranger:ranger-kylin-plugin:jar:2.4.0: Failed to collect dependencies at org.apache.kylin:kylin-server-base:jar:3.1.3 -> org.apache.kylin:kylin-query:jar:3.1.3 -> org.apache.kylin:kylin-datasource-sdk:jar:3.1.3 -> org.apache.calcite:calcite-linq4j:jar:1.16.0-kylin-r5: Failed to read artifact descriptor for org.apache.calcite:calcite-linq4j:jar:1.16.0-kylin-r5: Could not transfer artifact org.apache.calcite:calcite-linq4j:pom:1.16.0-kylin-r5 from/to spring-snapshots (https://repo.spring.io/libs-snapshot): Authentication failed for https://repo.spring.io/libs-snapshot/org/apache/calcite/calcite-linq4j/1.16.0-kylin-r5/calcite-linq4j-1.16.0-kylin-r5.pom 401 Unauthorized -> [Help 1]
Kylin
이란 플랫폼 플러그인에서 발생하는 에러였고 나는 해당 플러그인이 필요하지 않았다. 그래서 pom.xml
에서 해당 플러그인을 삭제하였다.
ranger-base docker images 빌드 이제 하나씩 빌드해보자. 먼저 내려받은 ranger 소스코드를 maven으로 빌드하려고 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 FROM centos:centos7 as baseRUN yum update -y \ && yum -y install vim wget rpm-build which tar git gcc java-1.8.0-openjdk-devel \ && yum clean all -y \ && yum install python3 -y ENV JAVA_HOME /usr/lib/jvm/java-openjdkENV RANGER_HOME /opt/rangerENV MAVEN_HOME /opt/mavenENV RANGER_VERSION 2.4 .0 ENV MAVEN_VERSION 3.6 .3 ENV MAVEN_OPTS "-Xmx2048m -XX:MaxMetaspaceSize=512m" RUN mkdir $MAVEN_HOME \ && export http_proxy=$http_proxy \ && wget -P $MAVEN_HOME https://dlcdn.apache.org/maven/maven-3/$MAVEN_VERSION /binaries/apache-maven-$MAVEN_VERSION -bin.tar.gz \ && tar -xzvf $MAVEN_HOME /apache-maven-$MAVEN_VERSION -bin.tar.gz -C $MAVEN_HOME \ && rm -f $MAVEN_HOME /apache-maven-$MAVEN_VERSION -bin.tar.gz COPY ranger /opt/ranger RUN cd /opt/ranger \ && $MAVEN_HOME /apache-maven-$MAVEN_VERSION /bin/mvn -Pall -DskipTests=true clean compile package install \ && rm -rf ~/.m2 \ && ls | grep -v target | xargs rm -rf \ && rm -rf target/*.zip FROM baseENV MYSQL_CONNECTOR_JAVA_VERSION 5.1 .41 RUN yum update -y \ && yum -y install mysql \ && yum clean all -y RUN wget -P /opt https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-$MYSQL_CONNECTOR_JAVA_VERSION .tar.gz \ && tar -zxvf /opt/mysql-connector-java-$MYSQL_CONNECTOR_JAVA_VERSION .tar.gz -C /opt \ && rm -f /opt/mysql-connector-java-$MYSQL_CONNECTOR_JAVA_VERSION .tar.gz \ && ln -s /opt/mysql-connector-java-$MYSQL_CONNECTOR_JAVA_VERSION /mysql-connector-java-$MYSQL_CONNECTOR_JAVA_VERSION -bin.jar /opt/mysql-connector-java.jar
위 도커파일을 그대로 레인저 서버에 옮긴 후 도커 이미지로 빌드한다.
1 $ docker build . -t ranger-base:2.4 .0
빌드는 대략 2-3시간 정도 소요된다. 그렇기에 가능하면 백그라운드로 실행하는 것을 추천한다.
1 $ nohup docker build . -t ranger-base:2.4 .0 >> build.log &
ranger-admin docker images 빌드 다음으로는 아래 도커파일로 ranger-admin 이미지를 빌드한다.
1 2 3 4 5 6 7 8 9 FROM ranger-base:2.4 .0 ENV RANGER_ADMIN_HOME /opt/ranger_adminRUN tar -zxvf $RANGER_HOME /target/ranger-$RANGER_VERSION -admin.tar.gz -C /opt \ && ln -s /opt/ranger-$RANGER_VERSION -admin $RANGER_ADMIN_HOME \ && rm -rf $RANGER_HOME WORKDIR $RANGER_ADMIN_HOME
이건 금방 빌드되기 떄문에 바로 실행해도 괜찮다.
1 $ docker build . -t ranger-admin:2.4 .0
ranger-usersync docker images 빌드 마지막으로 AD와의 연동을 위한 anger-usersync 이미지를 빌드한다.
1 2 3 4 5 6 7 8 9 FROM ranger-base:2.4 .0 ENV RANGER_USERSYNC_HOME /opt/ranger_usersyncRUN tar -zxvf $RANGER_HOME /target/ranger-$RANGER_VERSION -usersync.tar.gz -C /opt \ && ln -s /opt/ranger-$RANGER_VERSION -usersync $RANGER_USERSYNC_HOME \ && rm -rf $RANGER_HOME WORKDIR $RANGER_USERSYNC_HOME
도커파일 저장을 완료했다면 아래 명령어로 빌드하자.
1 $ docker build . -t ranger-usersync:2.4 .0
이제 기본적인 작업은 끝났다. 다음 글에서는 ranger-admin 구성하고 올리는 방법에 대해 알아볼 것이다.