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. /etc/krb5.conf ファイルを Dataproc プライマリ VM から Cloud Storage バケットにアップロードします。

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

サービスは、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: プリンシパルの名前。

次のステップ