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 Service Controls を使用している場合、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: Secret の名前。

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 ファイルをアップロードします。

    gsutil 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 サービスを作成します。

サービスは、Dataproc クラスタとして VPC ネットワークに作成するようにします。

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 の Secret バージョンの相対的なリソース名。

クラスタを作成した後、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 ジョブを実行するには、Hadoop container-executor.cfg ファイルの allowed.system.users プロパティに hive ユーザーを追加する必要があります。これにより、ユーザーは select * from などのデータにアクセスするクエリを実行できます。

  1. SSH セッションで、Hadoop container-executor.cfg ファイルを開きます。

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

    すべての Dataproc ノードに次の行を追加します。

    allowed.system.users=hive
    

Kerberos チケットを取得する

  1. Kerberos チケットを取得してから、Dataproc Metastore インスタンスに接続します。

    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: プリンシパルの名前。

次のステップ