Apache Ranger는 빅 데이터 생태 시스템에서 액세스 권한을 제어하는 데 사용되는 표준 인증 모듈입니다. GooseFS는 빅 데이터 및 데이터 레이크 시나리오의 스토리지 가속화 시스템으로 Apache Ranger 통합 인증 플랫폼 액세스를 지원합니다. 본문은 Apache Ranger를 사용하여 GooseFS 리소스 액세스 권한을 제어하는 방법을 소개합니다.
GooseFS를 Ranger 인증 플랫폼에 통합할 수 있도록 GooseFS Ranger Plugin을 개발하였으며, GooseFS Master 노드와 Ranger Admin측에 동시에 배포됩니다. 아래와 같은 작업을 책임지고 완성합니다.
사용을 시작하기 전에 Ranger 관련 구성 요소(Ranger Admin 및 Ranger UserSync 포함)가 환경에 배포 및 구성되었는지, Ranger의 WebUI가 정상적으로 열리고 사용할 수 있는지 확인해야 합니다.
설명:여기를 클릭하여 GooseFS Ranger Plugin을 다운로드하십시오.
배포 단계는 다음과 같습니다.
Ranger 서비스 정의 디렉터리 하위에 새로운 GooseFS의 디렉터리를 만듭니다(디렉터리 권한은 최소한 x와 r 권한을 보장합니다).
/usr/local/service/ranger/ews/webapp/WEB-INF/classes/ranger-plugins
에 둡니다.GooseFS 디렉터리에 goosefs-ranger-plugin-${version}.jar 및 ranger-servicedef-goosefs.json을 넣고 읽기 권한을 가집니다.
Ranger 서비스를 재시작합니다.
Ranger에서 아래 명령어에 따라 GooseFS Service에 가입합니다.
# 서비스를 생성하려면 Ranger 관리자 계정 및 암호, Ranger 서비스 주소를 입력해야 합니다.
# Tencent Cloud EMR 클러스터의 경우, 관리자는 root이고, 암호는 EMR 클러스터를 구축할 때 설정한 root 암호이며, ranger 서비스의 IP는 EMR 서비스의 Master IP입니다.
adminUser=root
adminPasswd=xxxx
rangerServerAddr=10.0.0.1:6080
curl -v -u${adminUser}:${adminPasswd} -X POST -H "Accept:application/json" -H "Content-Type:application/json" -d @./ranger-servicedef-goosefs.json http://${rangerServerAddr}/service/plugins/definitions
# 서비스 가입이 완료되면 서비스 ID가 반환되므로 반드시 이 ID를 기록해 두시기 바랍니다.
# GooseFS 서비스를 삭제하려면, 방금 반환된 서비스 ID를 전달하고 다음 명령을 실행합니다.
serviceId=104
curl -v -u${adminUser}:${adminPasswd} -X DELETE -H "Accept:application/json" -H "Content-Type:application/json" http://${rangerServerAddr}/service/plugins/definitions/${serviceId}
생성에 성공하면 Ranger의 Web 콘솔에서 GooseFS 관련 서비스를 볼 수 있습니다.
GooseFS 서비스 측에서 [+]를 클릭하여 goosefs 서비스 인스턴스를 정의합니다.
새로 생성된 goosefs 서비스 인스턴스를 클릭하여 인증 policy를 추가합니다.
goosefs-ranger-plugin-${version}.jar를 ${GOOSEFS_HOME}/lib 경로에 넣고 최소 읽기 권한을 가집니다.
ranger-goosefs-audit.xml, ranger-goosefs-security.xml 및 ranger-policymgr-ssl.xml 3개 파일을 \${GOOSEFS_HOME}/conf
경로에 넣고 필수 구성을 각각 입력합니다.
ranger-goosefs-security.xml:
<configuration xmlns:xi="http://www.w3.org/2001/XInclude">
<property>
<name>ranger.plugin.goosefs.service.name</name>
<value>goosefs</value>
</property>
<property>
<name>ranger.plugin.goosefs.policy.source.impl</name>
<value>org.apache.ranger.admin.client.RangerAdminRESTClient</value>
</property>
<property>
<name>ranger.plugin.goosefs.policy.rest.url</name>
<value>http://10.0.0.1:6080</value>
</property>
<property>
<name>ranger.plugin.goosefs.policy.pollIntervalMs</name>
<value>30000</value>
</property>
<property>
<name>ranger.plugin.goosefs.policy.rest.client.connection.timeoutMs</name>
<value>1200</value>
</property>
<property>
<name>ranger.plugin.goosefs.policy.rest.client.read.timeoutMs</name>
<value>30000</value>
</property>
</configuration>
ranger-goosefs-audit.xml(감사 미활성화, 설정하지 않아도 됨)
ranger-policymgr-ssl.xml
<configuration>
<property>
<name>xasecure.policymgr.clientssl.keystore</name>
<value>hadoopdev-clientcert.jks</value>
</property>
<property>
<name>xasecure.policymgr.clientssl.truststore</name>
<value>cacerts-xasecure.jks</value>
</property>
<property>
<name>xasecure.policymgr.clientssl.keystore.credential.file</name>
<value>jceks://file/tmp/keystore-hadoopdev-ssl.jceks</value>
</property>
<property>
<name>xasecure.policymgr.clientssl.truststore.credential.file</name>
<value>jceks://file/tmp/truststore-hadoopdev-ssl.jceks</value>
</property>
</configuration>
goosefs-site.xml 파일에 다음과 같은 구성을 추가합니다.
...
goosefs.security.authorization.permission.type=CUSTOM
goosefs.security.authorization.custom.provider.class=org.apache.ranger.authorization.goosefs.RangerGooseFSAuthorizer
...
${GOOSEFS_HOME}/libexec/goosefs-config.sh에 goosefs-ranger-plugin-${version}.jar를 GooseFS 경로에 추가합니다.
...
GOOSEFS_RANGER_CLASSPATH="${GOOSEFS_HOME}/lib/ranger-goosefs-plugin-1.0.0-SNAPSHOT.jar"
GOOSEFS_SERVER_CLASSPATH=${GOOSEFS_SERVER_CLASSPATH}:${GOOSEFS_RANGER_CLASSPATH}
...
이렇게 모든 구성이 완료됩니다.
Hadoop 사용자에게 GooseFS의 루트 디렉터리에 대한 읽기 및 실행 권한은 있지만 쓰기는 허용하지 않는 정책을 추가하는 방법은 다음과 같습니다.
문제 해결에 도움이 되었나요?