서비스의 Kerberos 구성

Kerberos는 보안 비밀 키 암호화를 사용하여 클라이언트/서버 애플리케이션에 강력한 인증을 제공하도록 설계된 네트워크 인증 프로토콜입니다. 소프트웨어 생태계 전반에서 인증을 위한 Hadoop 스택 간에 일반적으로 사용됩니다.

Dataproc Metastore는 고객 호스팅 키 배포 센터(KDC)를 통해 Kerberos를 지원합니다. Kerberos를 지원하기 위한 API 요구사항은 keytab 파일, 주체, krb5.conf 파일입니다.

이 페이지에서는 Dataproc Metastore Hive 메타스토어 서비스를 위해 Kerberos를 사용 설정하고 구성하는 방법을 설명합니다.

시작하기 전에

  • Hive 메타스토어 인스턴스에 대해 Kerberos를 사용 설정하려면 다음 항목을 설정해야 합니다.

    • 자체 호스팅 Kerberos KDC

      KDC는 Kerberos 티켓을 발급하는 애플리케이션입니다. Kerberos가 사용될 때 사용자 인증 책임을 담당합니다.

    • 최초 인증을 수행하기 위한 VPC 네트워크와 KDC 사이의 IP 연결

    • Dataproc Metastore의 트래픽을 허용하기 위한 KDC에 대한 방화벽 규칙 서비스에 대한 방화벽 규칙도 참조하세요.

    • Keytab 파일의 내용이 포함된 Secret Manager 보안 비밀

      Keytab 파일에는 Kerberos 주체 및 암호화된 키 쌍이 포함되어 있으며, Kerberos KDC로 서비스 주체를 인증하기 위해 사용될 수 있습니다. Dataproc의 온클러스터 KDC로 키탭 파일을 생성하고 이를 사용하여 Dataproc Metastore 서비스를 구성해야 합니다.

      이 Keytab 파일에는 Hive 메타스토어를 위해 생성된 서비스 주체 항목이 포함되어 있어야 합니다. 제공된 Secret Manager 보안 비밀은 특정 보안 비밀 버전으로 고정되어 있어야 합니다. 최신 버전은 지원되지 않습니다.

    • KDC 및 Keytab 파일 모두에 있는 주체

      Hive 메타스토어를 시작하려면 유효한 Kerberos Keytab 파일 및 주체가 필요합니다. 주체는 KDC와 Keytab 모두에 존재합니다. 주체에는 primary/instance@REALM의 세 부분이 포함되어 있어야 합니다. \_HOST 인스턴스는 지원되지 않습니다.

    • Cloud Storage 버킷의 krb5.conf 파일

      유효한 krb5.conf 파일에는 KDC IP, 포트, 렐름 이름과 같은 사용자 입력 등의 Kerberos 구성 정보가 포함됩니다. KDC FQDN이 아닌 KDC IP를 지정해야 합니다.

      Dataproc Metastore는 전체 krb5.conf를 Cloud Storage 객체로 사용합니다. 서비스 생성 중 krb5.conf 파일 경로를 지정하는 Cloud Storage URI를 제공해야 합니다. 일반적인 URI 형식은 gs://{bucket_name}/path/to/krb5.conf입니다.

    • 최상의 결과를 얻으려면 Dataproc Metastore 서비스와 동일한 리전에 있는 Cloud Storage 버킷을 사용합니다. Dataproc Metastore는 리전 제한이 적용되지 않지만, 공동 배치되는 리소스 및 전역 리소스의 성능이 더 뛰어납니다. 예를 들어 전역 버킷은 모든 서비스 리전에 문제가 없지만 EU 멀티 리전 버킷은 us-central1 서비스에 잘 작동하지 않습니다. 리전 간 액세스로 인해 지연 시간이 높고, 리전별 장애 격리가 어렵고, 리전 간 네트워크 대역폭에 비용이 부과됩니다.

액세스 제어

  • 서비스를 만들려면 metastore.services.create IAM 권한이 포함된 IAM 역할을 부여 받아야 합니다. Dataproc Metastore 특정 역할인 roles/metastore.adminroles/metastore.editor에는 만들기 권한이 포함됩니다.

  • roles/ownerroles/editor 레거시 역할을 사용하여 사용자 또는 그룹에 만들기 권한을 부여할 수 있습니다.

  • VPC 서비스 제어를 사용하는 경우 Secret Manager 보안 비밀 및 krb5.conf Cloud Storage 객체가 Dataproc Metastore 서비스와 동일한 서비스 경계에 있는 프로젝트에 속해야 합니다.

자세한 내용은 Dataproc Metastore IAM 및 액세스 제어를 참조하세요.

서비스에 Kerberos 사용 설정

다음 안내에서는 Dataproc와 통합된 Dataproc Metastore 서비스에 Kerberos를 사용 설정하는 방법을 보여줍니다.

  1. Dataproc Metastore 서비스와 피어링할 동일한 VPC 네트워크에서 사용 설정된 Kerberos로 Dataproc 클러스터를 설정합니다.

    1. 동일한 프로젝트에 있는 모든 Google Cloud 서비스에 대해 API 액세스를 허용하려면 Dataproc 클러스터를 만들 때 프로젝트 액세스를 사용 설정합니다. 이 작업을 하려면 Dataproc 클러스터 생성 gcloud 명령어에 --scopes 'https://www.googleapis.com/auth/cloud-platform'을 전달합니다.
  2. Dataproc 클러스터의 마스터 인스턴스에 SSH로 연결합니다. 브라우저 또는 명령줄로 이를 수행할 수도 있습니다. 기본 인스턴스에서 다음 명령어를 실행합니다.

    1. Dataproc 클러스터에서 /etc/hive/conf/hive-site.xml을 수정합니다. 주체 이름(primary/instance@REALM 형식이어야 함)을 선택합니다. /etc/hive/conf/hive-site.xml에 있는 기존 hive.metastore.keberos.principal을 검색하여 REALM을 찾아 기본 및 인스턴스 세그먼트를 바꿉니다. 주체 이름의 예시는 hive/test@C.MY-PROJECT.INTERNAL입니다.

      Dataproc Metastore 서비스 생성 중 사용할 주체 이름을 확인합니다.

      <property>
        <name>hive.metastore.kerberos.principal</name>
        <!-- Update this value. -->
        <value>PRINCIPAL_NAME</value>
      </property>
      <property>
        <name>hive.metastore.kerberos.keytab.file</name>
        <!-- Update to this value. -->
        <value>/etc/security/keytab/metastore.service.keytab</value>
      </property>
      
    2. Dataproc 클러스터의 기본 VM에서 keytab/principal 조합을 만듭니다.

      sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME"
      sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"
      
    3. Dataproc 클러스터의 기본 VM에서 Secret Manager로 keytab을 업로드합니다. 이렇게 하려면 Dataproc VM 실행 ID에 보안 비밀 생성을 위한 Secret Manager 관리자 역할이 필요합니다. Dataproc Metastore 서비스 생성 중 사용할 생성된 보안 비밀 버전을 확인합니다.

        gcloud secrets create SECRET_NAME --replication-policy automatic
        sudo gcloud secrets versions add SECRET_NAME --data-file /etc/security/keytab/metastore.service.keytab
        

    4. Dataproc 클러스터 기본 인스턴스의 기본 내부 IP 주소를 결정(Compute Engine UI 또는 gcloud compute instances list에서 제공)하고 클로스터 렐름의 kdc/etc/krb5.confadmin_server로 값을 채웁니다.

      예를 들어 (기본 인스턴스의 내부 IP 주소가 192.0.2.2라고 가정해 보겠습니다.)

      [realms]
        US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = {
          kdc = 192.0.2.2
          admin_server = 192.0.2.2
        }
      
    5. Dataproc 기본 VM에서 Cloud Storage로 /etc/krb5.conf 파일을 업로드합니다. Dataproc Metastore 서비스 생성 중에 사용할 Cloud Storage 경로를 기록해 둡니다.

      gsutil cp /etc/krb5.conf gs://bucket-name/path/to/krb5.conf
      
  3. 다음과 같이 keytab에 액세스할 수 있는 권한을 보유한 Dataproc Metastore 서비스 계정(이 계정은 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
       

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

  5. KDC에 대해 인그레스 방화벽 규칙이 구성되었는지 확인합니다. 이러한 방화벽 규칙은 TCP/UDP 트래픽 인그레스를 허용하도록 Dataproc 클러스터를 만드는 데 사용되는 VPC 네트워크에서 구성되어야 합니다.

  6. 위의 주체 이름, Secret Manager 보안 비밀 버전, krb5.conf Cloud Storage 객체 URI를 사용하여 새 Dataproc Metastore 서비스를 만들거나 기존 서비스를 업데이트합니다. Dataproc 클러스터 생성 중에 사용한 것과 동일한 VPC 네트워크를 지정해야 합니다.

    Dataproc Metastore 서비스 생성 또는 업데이트 작업은 제공된 주체, keytab, krb5.conf 파일을 사용하여 성공적으로 로그인되었는지 테스트합니다. 테스트에 실패하면 작업이 실패합니다.

  7. Dataproc Metastore 서비스가 생성되면 Thrift 엔드포인트 URI 및 웨어하우스 디렉터리를 확인합니다. Thrift 엔드포인트 URI는 thrift://10.1.2.3:9083과 같은 방식으로 표시되고, 웨어하우스 디렉터리는 gs://gcs-bucket-service-name-deadbeef/hive-warehouse와 같은 방식으로 표시됩니다. Dataproc 클러스터의 마스터 인스턴스에 SSH 연결을 다시 실행하고 다음을 수행합니다.

    1. 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>
      
    2. HiveServer2를 다시 시작합니다.

      sudo systemctl restart hive-server2.service
      
    3. /etc/hadoop/conf/container-executor.cfg를 수정하여 모든 Dataproc 노드에 다음 줄을 추가합니다.

       allowed.system.users=hive
      
    4. 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.
      

다음 단계