Dataproc Metastore Thrift 엔드포인트의 Kerberos 구성

이 페이지에서는 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 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

이 사전 정의된 역할에는 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를 구성합니다.

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
  2. 가상 머신 인스턴스 목록의 Dataproc 기본 노드(your-cluster-name-m) 행에서 SSH를 클릭합니다.

    노드의 홈 디렉터리에 브라우저 창이 열립니다.

  3. /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 파일을 만들려면 다음 안내를 따르세요.

  1. 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"
    
  2. 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 클러스터에 연결해야 합니다.

  1. 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입니다.

  2. krb5.conf 파일을 엽니다.

    sudo vim /etc/krb5.conf
    
  3. 파일에서 기존 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
    }
    
  4. 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 역할 및 권한 부여

  1. 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

  2. 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 Metastore 서비스가 생성되면 Thrift 엔드포인트 URI웨어하우스 디렉터리를 찾습니다.

  1. Dataproc 클러스터의 기본 인스턴스에 SSH로 연결합니다.

  2. SSH 세션에서 /etc/hive/conf/hive-site.xml 파일을 엽니다.

    sudo vim /etc/hive/conf/hive-site.xml
    
  3. 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>
    
  4. HiveServer2를 다시 시작합니다.

    sudo systemctl restart hive-server2.service
    

작업을 제출하기 전에 Dataproc 구성

Dataproc 작업을 실행하려면 hive 사용자를 Hadoop container-executor.cfg 파일의 allowed.system.users 속성에 추가해야 합니다. 이렇게 하면 사용자가 쿼리를 실행하여 select * from과 같은 데이터에 액세스할 수 있습니다.

  1. SSH 세션에서 Hadoop container-executor.cfg 파일을 엽니다.

    sudo vim /etc/hadoop/conf/container-executor.cfg
    

    모든 Dataproc 노드에 다음 줄을 추가합니다.

    allowed.system.users=hive
    

kerberos 티켓 가져오기

  1. 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: 주 구성원의 이름입니다.

다음 단계