0%

Apache Ranger 설치 in Docker (2)

하둡 에코시스템 중 하나인 Apache Ranger 설치 방법을 정리합니다.

Ranger Admin Setup

이전 글에서 Ranger Admin 도커 이미지 빌드까지 성공하였다. 이번 글에서는 admin 서버를 셋팅하고 웹페이지 접속할 것이다.

Container

먼저 빌드한 이미지로 컨테이너를 올려보자. 아래 명령어로 컨테이너를 구동할 수 있다.

1
$ docker run -it  -d -p 6080:6080 ranger-admin:2.4.0

명령어를 잠깐 살펴보면 이미지 ranger-admin:2.4.0로 컨테이너를 실시하며, 포트는 6080으로 할당하라는 의미이다. -d는 컨테이너를 백그라운드로 실행하라는 의미이다.

정상적으로 실행되었는지 확인하기 위해서는 아래 명령어를 입력한다.

1
2
$ docker ps | grep ranger
<container-id> ranger-admin:2.4.0 "/bin/bash" 2 days ago Up 2 days 0.0.0.0:6080->6080/tcp, :::6080->6080/tcp

Configuration

다음으로는 해당 컨테이너에 접속해서 config 값을 수정한 후 웹서버를 활성화해야 한다. 아래 명령어로 컨테이너에 접속한다.

1
$ docker exec -it <container-id> /bin/bash

접속한 후 ll을 입력하면 아래와 같은 목록이 보일 것이다.

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
drwxr-xr-x 1 ranger ranger   107 Apr  7 07:59 bin
-r-xr--r-- 1 ranger ranger 4321 Apr 7 07:59 changepasswordutil.py
-r-xr--r-- 1 ranger ranger 5173 Apr 7 07:59 changeusernameutil.py
lrwxrwxrwx 1 root root 55 Apr 10 03:16 conf -> /opt/ranger-2.4.0-admin/ews/webapp/WEB-INF/classes/conf
drwxrwxr-x 1 ranger ranger 97 Apr 7 07:59 contrib
drwxr-xr-x 1 ranger ranger 17 Apr 9 07:43 cred
drwxrwxr-x 1 ranger ranger 85 Apr 7 07:59 db
-r-xr--r-- 1 ranger ranger 77697 Apr 7 07:59 db_setup.py
-r-xr--r-- 1 ranger ranger 89187 Apr 10 03:15 dba_script.py
-r-xr--r-- 1 ranger ranger 9960 Apr 7 07:59 deleteUserGroupUtil.py
drwxrwxr-x 1 ranger ranger 189 Apr 10 03:16 ews
-rwx------ 1 ranger ranger 9431 Apr 10 03:06 install.properties
drwxr-xr-x 1 ranger ranger 17 Apr 9 07:43 jisql
-rw-r--r-- 1 ranger ranger 9097 Apr 10 03:16 logfile
-r-xr--r-- 1 ranger ranger 3056 Apr 7 07:59 ranger_credential_helper.py
-r-xr--r-- 1 ranger ranger 17942 Apr 7 07:59 restrict_permissions.py
-r-xr--r-- 1 ranger ranger 6549 Apr 7 07:59 rolebasedusersearchutil.py
-r-xr--r-- 1 ranger ranger 3990 Apr 7 07:59 set_globals.sh
-r-xr--r-- 1 ranger ranger 66437 Apr 7 07:59 setup.sh
-r-xr--r-- 1 ranger ranger 2855 Apr 7 07:59 setup_authentication.sh
drwxr-xr-x 1 ranger ranger 27 Apr 7 07:59 stability-tests
drwxr-xr-x 1 ranger ranger 70 Apr 9 07:43 templates-upgrade
-r-xr--r-- 1 ranger ranger 3452 Apr 7 07:59 updateUserAndGroupNamesInJson.py
-r-xr--r-- 1 ranger ranger 1921 Apr 7 07:59 update_property.py
-r-xr--r-- 1 ranger ranger 1247 Apr 7 07:59 upgrade.sh
-r-xr--r-- 1 ranger ranger 13928 Apr 7 07:59 upgrade_admin.py
-r--r--r-- 1 ranger ranger 5 Apr 7 09:31 version

위 목록에서 install.properties을 수정해야 한다. vim 명령어로 해당 파일을 열어 아래 config 값들을 수정한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#DB_FLAVOR=MYSQL|ORACLE|POSTGRES|MSSQL|SQLA
DB_FLAVOR=MYSQL

#SQL_CONNECTOR_JAR=/usr/share/java/ojdbc6.jar
#SQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
#SQL_CONNECTOR_JAR=/usr/share/java/postgresql.jar
#SQL_CONNECTOR_JAR=/usr/share/java/sqljdbc4.jar
#SQL_CONNECTOR_JAR=/opt/sqlanywhere17/java/sajdbc4.jar
SQL_CONNECTOR_JAR=/opt/mysql-connector-java.jar

db_root_user=<DB_ADMIN>
db_root_password=<DB_ADMIN_PWD>
db_host=<DB_HOSTNAME>
#SSL config
db_ssl_enabled=false
db_ssl_required=false
db_ssl_verifyServerCertificate=false

# DB UserId used for the Ranger schema
db_name=ranger
db_user=rangeradmin
db_password=rangeradmin

여기서 주의해야 할 점이 있다. 보통 RDS를 사용하면 DB_HOSTNAME매우 길다. 너무 긴 호스트 이름은 Mysql을 DB로 사용하는 경우 유저 생성 시 호스트 이름이 잘린 채로 추가된다. 이렇게 잘못된 사용자가 생성되면 나중에 문제가 발생하니 RDS를 사용하는 사람은 Route53을 사용하여 DB에 도메인을 붙여주는 것을 추천한다.

시스템 DB 정보를 모두 입력했다면 살짝 내려가서 audit store로 사용할 검색엔진 정보도 추가하자.

1
2
3
4
5
6
7
8
9
10
11
12
#Source for Audit Store. Currently solr, elasticsearch and cloudwatch logs are supported.
# * audit_store is solr
audit_store=elasticsearch

# * audit_solr_url Elasticsearch Host(s). E.g. 127.0.0.1
audit_elasticsearch_urls=<OPENSEARCH_VPC_ENDPOINT>
audit_elasticsearch_port=80
audit_elasticsearch_protocol=https
audit_elasticsearch_user=
audit_elasticsearch_password=
audit_elasticsearch_index=ranger_audits
audit_elasticsearch_bootstrap_enabled=true

모든 값을 입력했다면 :wq로 저장한다.

DB Migrations

이제 ranger-admin이 사용할 DB와 Table을 만들어줄 것이다. 다시 ll을 입력하여 목록을 확인해보자.

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
drwxr-xr-x 1 ranger ranger   107 Apr  7 07:59 bin
-r-xr--r-- 1 ranger ranger 4321 Apr 7 07:59 changepasswordutil.py
-r-xr--r-- 1 ranger ranger 5173 Apr 7 07:59 changeusernameutil.py
lrwxrwxrwx 1 root root 55 Apr 10 03:16 conf -> /opt/ranger-2.4.0-admin/ews/webapp/WEB-INF/classes/conf
drwxrwxr-x 1 ranger ranger 97 Apr 7 07:59 contrib
drwxr-xr-x 1 ranger ranger 17 Apr 9 07:43 cred
drwxrwxr-x 1 ranger ranger 85 Apr 7 07:59 db
-r-xr--r-- 1 ranger ranger 77697 Apr 7 07:59 db_setup.py
-r-xr--r-- 1 ranger ranger 89187 Apr 10 03:15 dba_script.py
-r-xr--r-- 1 ranger ranger 9960 Apr 7 07:59 deleteUserGroupUtil.py
drwxrwxr-x 1 ranger ranger 189 Apr 10 03:16 ews
-rwx------ 1 ranger ranger 9431 Apr 10 03:06 install.properties
drwxr-xr-x 1 ranger ranger 17 Apr 9 07:43 jisql
-rw-r--r-- 1 ranger ranger 9097 Apr 10 03:16 logfile
-r-xr--r-- 1 ranger ranger 3056 Apr 7 07:59 ranger_credential_helper.py
-r-xr--r-- 1 ranger ranger 17942 Apr 7 07:59 restrict_permissions.py
-r-xr--r-- 1 ranger ranger 6549 Apr 7 07:59 rolebasedusersearchutil.py
-r-xr--r-- 1 ranger ranger 3990 Apr 7 07:59 set_globals.sh
-r-xr--r-- 1 ranger ranger 66437 Apr 7 07:59 setup.sh
-r-xr--r-- 1 ranger ranger 2855 Apr 7 07:59 setup_authentication.sh
drwxr-xr-x 1 ranger ranger 27 Apr 7 07:59 stability-tests
drwxr-xr-x 1 ranger ranger 70 Apr 9 07:43 templates-upgrade
-r-xr--r-- 1 ranger ranger 3452 Apr 7 07:59 updateUserAndGroupNamesInJson.py
-r-xr--r-- 1 ranger ranger 1921 Apr 7 07:59 update_property.py
-r-xr--r-- 1 ranger ranger 1247 Apr 7 07:59 upgrade.sh
-r-xr--r-- 1 ranger ranger 13928 Apr 7 07:59 upgrade_admin.py
-r--r--r-- 1 ranger ranger 5 Apr 7 09:31 version

위 목록에서 우리는 dba_script.pysetup.sh을 사용할 것이다. 먼저 dba_script.py을 실행한다.

참고로 Mysql을 사용하는 경우 실행 전에 작은 버그 하나를 확인해야 한다. Mysql은 5.5버전 이후부터는 JDBC 연결 기본 값이 SSL 활성화로 변경되었는데 해당 스크립트에는 반영이 안되어서 바로 진행하면 SSL 에러가 발생한다. 이걸 해결하기 위해 코드를 살짝 수정해야 한다. 해당부분은 일단 ranger에 PR을 올려두었다.

1
2
3
4
5
6
7
8
9
10
11
class MysqlConf(BaseDB):
.
.
def get_jisql_cmd(self, user, password ,db_name):
#TODO: User array for forming command
path = RANGER_ADMIN_HOME
db_ssl_param=''
db_ssl_param='?useSSL=false' #change default value
db_ssl_cert_param=''
if self.db_ssl_enabled == 'true':
db_ssl_param="?useSSL=%s&requireSSL=%s&verifyServerCertificate=%s" %(self.db_ssl_enabled,self.db_ssl_required,self.db_ssl_verifyServerCertificate)

이 다음 스크립트를 실행하면 DB 관련 정보를 입력받는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ python3 dba_script.py 
2023-04-12 14:23:22,797 [I] Running DBA setup script. QuiteMode:False
2023-04-12 14:23:22,798 [I] Using Java:/usr/lib/jvm/java-openjdk/bin/java
2023-04-12 14:23:22,799 Enter db flavour{MYSQL|ORACLE|POSTGRES|MSSQL|SQLA} :
MYSQL
2023-04-12 14:23:27,291 [I] DB FLAVOR:MYSQL
2023-04-12 14:23:27,291 Enter JDBC connector file for :MYSQL
/opt/mysql-connector-java.jar
2023-04-12 14:23:38,116 Enter DB Host :
<HOST>
2023-04-12 14:23:46,890 [I] DB Host:<HOST>
2023-04-12 14:23:46,890 Enter db root user:
admin
2023-04-12 14:23:50,127 Enter db root password:
Enter db root password:
2023-04-12 14:23:53,487 Enter DB Name :
ranger
2023-04-12 14:23:56,159 Enter db user name:
rangeradmin
2023-04-12 14:24:01,899 Enter db user password:
Enter db user password:

스크립트 실행이 끝난 후 DB에 접속해보면 ranger DB와 사용자가 생겼을 것이다.
그 다음 setup.sh을 실행한다.

1
2
3
4
2023-04-12 14:41:23,722  [I] Checking connection passed.
2023-04-12 14:41:23,723 [I] RANGER_ADMIN_ENV_PATH : /opt/ranger_admin
2023-04-12 14:41:23,723 [I] env_file_path : /opt/ranger_admin/ranger-admin-env*.sh
Installation of Ranger PolicyManager Web Application is completed.

모든 것이 성공적으로 완료되었다면 셋팅은 끝난 것이다.

Web Server Start

마지막으로 ranger-admin 웹서버를 활성화한다.

1
ranger-admin start

그 다음 <instance IP>:6080으로 접속하면 아래와 같이 로그인 페이지가 보일 것이다. 로그인은 아이디와 패스워드 모두 admin이다.

rangeradmin

로그인하면 본격적으로 정책을 관리할 수 있는 페이지가 보인다.

rangeradmin