이 페이지에서는 Thrift 엔드포인트 프로토콜을 사용하는 Dataproc Metastore 서비스에 대해 Kerberos를 구성하는 방법을 설명합니다. Dataproc Metastore 서비스에 gRPC 엔드포인트 프로토콜이 사용되는 경우 gRPC 엔드포인트의 Kerberos 구성을 참조하세요.
시작하기 전에
Kerberos의 기본사항을 이해합니다.
이 안내에서는 Dataproc 클러스터를 사용하여 다음 Kerberos 애셋을 만듭니다.
- Keytab 파일
krb5.conf
파일- Kerberos 주 구성원
이러한 Kerberos 애셋이 Dataproc Metastore 서비스에서 작동하는 방법에 대한 자세한 내용은 Kerberos 정보를 참조하세요.
자체 Kerberos KDC를 만들고 호스팅하거나 Dataproc 클러스터의 로컬 KDC를 사용하는 방법을 알아봅니다.
Cloud Storage 버킷을 만들거나 기존 버킷에 대한 액세스 권한을 얻습니다. 이 버킷에
krb5.conf
파일을 저장해야 합니다.
네트워크 고려사항
Kerberos를 구성하기 전에 다음 네트워크 설정을 고려하세요.
VPC 네트워크와 KDC 사이에 IP 연결을 설정합니다. 이 작업은 Dataproc Metastore 서비스로 KDC 파일을 인증하기 위해 필요합니다.
KDC에서 필요한 방화벽 규칙을 설정합니다. 이러한 규칙은 Dataproc Metastore의 트래픽을 허용하기 위해 필요합니다. 자세한 내용은 서비스의 방화벽 규칙을 참조하세요.
VPC 서비스 제어를 사용하는 경우 Secret Manager 보안 비밀 및
krb5.conf
Cloud Storage 객체가 Dataproc Metastore 서비스와 동일한 서비스 경계에 있는 프로젝트에 속해야 합니다.사용하려는 VPC 피어링 네트워크를 결정합니다. Dataproc 클러스터 및 Dataproc Metastore 서비스를 동일한 VPC 피어링 네트워크로 구성해야 합니다.
필요한 역할
Kerberos를 사용해서 Dataproc Metastore를 만드는 데 필요한 권한을 얻으려면 최소 권한의 원칙에 따라 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
Dataproc Metastore 리소스 전체 제어 권한 부여(
roles/metastore.editor
) -
IAM 정책 관리를 포함한 모든 Dataproc Metastore 리소스에 대한 전체 액세스 권한 부여(
roles/metastore.admin
)
역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.
이 사전 정의된 역할에는 Kerberos를 사용하여 Dataproc Metastore를 만드는 데 필요한 metastore.services.create
권한이 있습니다.
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
특정 Dataproc Metastore 역할 및 권한에 대한 상세 설명은 IAM으로 액세스 관리를 참조하세요.자세한 내용은 Dataproc Metastore IAM 및 액세스 제어를 참조하세요.
Dataproc Metastore에 Kerberos 사용 설정
다음 안내에서는 Dataproc 클러스터에 연결된 Dataproc Metastore 서비스에 대해 Kerberos를 구성하는 방법을 보여줍니다.
Dataproc 클러스터 만들기 및 Kerberos 사용 설정
gcloud
Kerberos를 사용하여 Dataproc 클러스터를 설정하려면 다음 gcloud dataproc clusters create
명령어를 실행합니다.
gcloud dataproc clusters create CLUSTER_NAME \ --image-version=2.0 \ --enable-kerberos \ --scopes 'https://www.googleapis.com/auth/cloud-platform'
다음을 바꿉니다.
CLUSTER_NAME
: Dataproc 클러스터의 이름입니다.
kerberos에 대해 Dataproc 클러스터 구성
다음 안내에서는 SSH를 사용하여 Dataproc Metastore 서비스와 연결된 기본 Dataproc 클러스터에 연결하는 방법을 보여줍니다.
그런 다음 hive-site.xml
파일을 수정하고 서비스에 대해 Kerberos를 구성합니다.
- Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
가상 머신 인스턴스 목록의 Dataproc 기본 노드(
your-cluster-name-m
) 행에서 SSH를 클릭합니다.노드의 홈 디렉터리에 브라우저 창이 열립니다.
/etc/hive/conf/hive-site.xml
파일을 엽니다.sudo vim /etc/hive/conf/hive-site.xml
다음과 비슷한 출력이 표시됩니다.
<property> <name>hive.metastore.kerberos.principal</name> <value>PRINCIPAL_NAME</value> </property> <property> <name>hive.metastore.kerberos.keytab.file</name> <value>METASTORE_PRINCPAL_KEYTAB</value> </property>
다음과 같이 바꿉니다.
PRINCIPAL_NAME
:primary/instance@REALM
형식의 주 구성원 이름입니다. 예를 들면hive/test@C.MY-PROJECT.INTERNAL
입니다.METASTORE_PRINCIPAL_KEYTAB
: Hive Metastore keytab 파일의 위치입니다./etc/security/keytab/metastore.service.keytab
값을 사용합니다.
Keytab 파일 만들기
다음 안내에서는 keytab 파일을 만드는 방법을 보여줍니다.
Keytab 파일에는 Kerberos 주 구성원과 암호화된 키 쌍이 포함되어 있습니다. 이것은 Kerberos KDC로 서비스 주 구성원을 인증하는 데 사용됩니다.
Keytab 파일을 만들려면 다음 안내를 따르세요.
Dataproc SSH 세션에서 keytab 및 주 구성원을 만듭니다.
sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME" sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"
Dataproc SSH 세션에서 keytab 파일을 만들고 Secret Manager에 업로드합니다.
gcloud secrets create SECRET_NAME --replication-policy automatic sudo gcloud secrets versions add SECRET_NAME --data-file /etc/security/keytab/metastore.service.keytab
다음을 바꿉니다.
SECRET_NAME
: 보안 비밀의 이름입니다.
krb5.conf 파일 업데이트
그런 후 krb5.conf
파일을 업데이트하여 Dataproc 클러스터에 연결해야 합니다.
Dataproc 클러스터 기본 인스턴스의 기본 내부 IP 주소를 확인합니다.
gcloud compute instances list
예를 들어 이 명령어를 실행하면 다음과 비슷한 출력이 생성됩니다.
~$ gcloud compute instances list --project kerberos-project NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS cluster-236-m us-central1-c n2-standard-4 192.0.2.2 *.*.*.* RUNNING ...
이 경우 클러스터의 내부 IP 주소는
192.0.2.2
입니다.krb5.conf
파일을 엽니다.sudo vim /etc/krb5.conf
파일에서 기존
KDC
매개변수와admin_server
매개변수를 Dataproc 클러스터의 내부 IP 주소로 바꿉니다.예를 들어 이전 단계의 IP 주소 값을 사용하면 다음 출력과 비슷합니다.
[realms] US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = { kdc = 192.0.2.2 admin_server = 192.0.2.2 }
Dataproc 기본 VM에서 Cloud Storage 버킷으로
/etc/krb5.conf
파일을 업로드합니다.gcloud storage cp /etc/krb5.conf gs://PATH_TO_KRB5
다음과 같이 바꿉니다.
PATH_TO_KRB5
:krb5.conf
파일이 포함된 Cloud Storage URI입니다.
업로드가 완료되면 업로드 경로를 복사합니다. Dataproc Metastore 서비스를 만들 때 사용해야 합니다.
IAM 역할 및 권한 부여
Dataproc Metastore 서비스 계정에 keytab 파일 액세스 권한을 제공합니다. 이 계정은 Google에서 관리하며 Google 제공 역할 부여 포함을 선택하여 IAM 권한 UI 페이지에 나열됩니다.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \ --role roles/secretmanager.secretAccessor
Dataproc Metastore 서비스 계정에
krb5.conf
파일 액세스 권한을 제공합니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \ --role roles/storage.objectViewer
Kerberos를 사용하여 Dataproc Metastore 서비스 만들기
Kerberos 파일로 구성된 새 Dataproc Metastore 서비스를 만듭니다.
VPC 네트워크에 서비스를 Dataproc 클러스터로 만들어야 합니다.
gcloud metastore services create SERVICE \ --location=LOCATION \ --instance-size=medium \ --network=VPC_NETWORK \ --kerberos-principal=KERBEROS_PRINCIPAL \ --krb5-config=KRB5_CONFIG \ --keytab=CLOUD_SECRET
다음을 바꿉니다.
SERVICE
: Dataproc Metastore 서비스 이름입니다.LOCATION
: Dataproc Metastore 서비스 위치입니다.VPC_NETWORK
: VPC 네트워크의 이름입니다. Dataproc 클러스터에 구성된 것과 동일한 네트워크를 사용합니다.KERBEROS_PRINCIPAL
: 앞에서 만든 kerberos 주 구성원의 이름입니다.KRB5_CONFIG
:krb5.config
파일의 위치입니다. 파일을 가리키는 Cloud Storage 객체 URI를 사용합니다.CLOUD_SECRET
: Secret Manager 보안 비밀 버전의 상대 리소스 이름입니다.
클러스터를 만들면 Dataproc Metastore가 제공된 주 구성원, Keytab, krb5.conf
파일을 사용하여 kerberos 사용자 인증 정보로 연결을 시도합니다. 연결이 실패하면 Dataproc Metastore 만들기도 실패합니다.
Dataproc 클러스터를 Dataproc Metastore에 연결
Dataproc Metastore 서비스가 생성되면 Thrift 엔드포인트 URI 및 웨어하우스 디렉터리를 찾습니다.
Dataproc 클러스터의 기본 인스턴스에 SSH로 연결합니다.
SSH 세션에서
/etc/hive/conf/hive-site.xml
파일을 엽니다.sudo vim /etc/hive/conf/hive-site.xml
Dataproc 클러스터에서
/etc/hive/conf/hive-site.xml
을 수정합니다.<property> <name>hive.metastore.uris</name> <!-- Update this value. --> <value>ENDPOINT_URI</value> </property> <!-- Add this property entry. --> <property> <name>hive.metastore.warehouse.dir</name> <value>WAREHOUSE_DIR</value> </property>
HiveServer2를 다시 시작합니다.
sudo systemctl restart hive-server2.service
작업을 제출하기 전에 Dataproc 구성
Dataproc 작업을 실행하려면 hive
사용자를 Hadoop container-executor.cfg
파일의 allowed.system.users
속성에 추가해야 합니다. 이렇게 하면 사용자가 쿼리를 실행하여 select * from
과 같은 데이터에 액세스할 수 있습니다.
SSH 세션에서 Hadoop
container-executor.cfg
파일을 엽니다.sudo vim /etc/hadoop/conf/container-executor.cfg
모든 Dataproc 노드에 다음 줄을 추가합니다.
allowed.system.users=hive
kerberos 티켓 가져오기
Dataproc Metastore 인스턴스에 연결하기 전에 kerberos 티켓을 가져옵니다.
sudo klist -kte /etc/security/keytab/metastore.service.keytab sudo kinit -kt /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME sudo klist # gets the ticket information. sudo hive
다음을 바꿉니다.
PRINCIPAL_NAME
: 주 구성원의 이름입니다.