이 페이지에서는 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.confCloud 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.conf파일의 위치입니다. 파일을 가리키는 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 작업을 실행하려면 Hadoop container-executor.cfg 파일의 allowed.system.users 속성에 hive 사용자를 추가해야 합니다. 이를 통해 사용자는 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: 주 구성원의 이름입니다.