Dataproc Metastore gRPC エンドポイント用に Kerberos を構成する

このページでは、gRPC エンドポイント プロトコルを使用する Dataproc Metastore サービスの Kerberos を構成する方法について説明します。Dataproc Metastore サービスで Thrift エンドポイント プロトコルを使用している場合は、Thrift エンドポイント用に Kerberos を構成するをご覧ください。

準備

  • Kerberos の基本を理解します。

    これらの手順では、Dataproc クラスタを使用して次の Kerberos アセットを作成します。

    • Keytab ファイル。
    • krb5.conf ファイル。
    • Kerberos プリンシパル。

    これらの Kerberos アセットが Dataproc Metastore サービスでどのように機能するかについては、Kerberos についてをご覧ください。

  • 独自の Kerberos KDC を作成してホストするか、Dataproc クラスタのローカル KDC を使用する方法を学習します。

  • Cloud Storage バケットを作成するか、既存のものへのアクセス権を取得します。このバケットに krb5.conf ファイルを保存する必要があります。

必要なロール

Kerberos で構成した Dataproc Metastore の作成に必要な権限を取得するには、最小権限の原則に基づいて、プロジェクトで次の IAM のロールを付与するよう管理者に依頼してください。

ロールの付与の詳細については、アクセスの管理をご覧ください。

この事前定義ロールには、 metastore.services.create 権限が含まれています。これは、Kerberos で構成された Dataproc Metastore を作成するために必要です。

カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。

Dataproc Metastore の特定のロールと権限については、IAM によるアクセス管理をご覧ください。

詳細については、Dataproc Metastore IAM とアクセス制御をご覧ください。

Dataproc Metastore に対して Kerberos を構成する

次の手順では、gRPC エンドポイントを使用する Dataproc Metastore サービスに Kerberos を構成する方法を示します。

まず、gRPC エンドポイントを使用する Dataproc Metastore を作成します。その後、Kerberos で構成された Dataproc クラスタを作成し、それに接続します。

gRPC エンドポイントで Dataproc Metastore サービスを作成する

gRPC エンドポイントを使用する Dataproc Metastore を作成するには、次の gcloud metastore services create コマンドを実行します。

gcloud

gcloud metastore services create SERVICE \
     --instance-size=medium \
     --endpoint-protocol=grpc

以下のように置き換えます。

  • SERVICE: Dataproc Metastore サービスの名前。

Dataproc クラスタを作成してサービスに接続する

Kerberos で構成された Dataproc を作成するには、次の gcloud dataproc clusters create コマンドを実行します。

このコマンドで --enable-kerberos オプションによって、Kerberos Keytab ファイル、krb5.conf ファイル、プリンシパルが作成されます。これらの値はすべて、Dataproc クラスタによって設定されたデフォルトの名前と設定を使用して作成されます。

gcloud

gcloud dataproc clusters create CLUSTER_NAME \
    --project PROJECT_ID \
    --region REGION \
    --image-version 2.0-debian10 \
    --dataproc-metastore DATAPROC_METASTORE_NAME \
    --enable-kerberos \
    --scopes 'https://www.googleapis.com/auth/cloud-platform'

以下のように置き換えます。

  • CLUSTER_NAME: Dataproc クラスタの名前。
  • PROJECT_ID: Google Cloud プロジェクト ID
  • REGION: Dataproc クラスタを作成する Google Cloud リージョン。
  • DATAPROC_METASTORE_NAME: クラスタに接続する Dataproc Metastore サービスの名前(形式は projects/<my_project>/locations/<location>/services/<service_id>)。

ジョブを送信する前に Dataproc を構成する

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

次の手順では、Dataproc Metastore サービスに関連付けられているプライマリ Dataproc クラスタに SSH 接続して、container-executor.cfg ファイルを更新する方法を説明します。

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。
  2. 仮想マシン インスタンスのリストで、Dataproc プライマリ ノード(your-cluster-name-m)の行の [SSH] をクリックします。

    ノード上のホーム ディレクトリでブラウザ ウィンドウが開きます。

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

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

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

    allowed.system.users=hive
    

Kerberos チケットを取得する

次の手順では、Kerberos チケットを生成する方法を示します。

  1. Dataproc クラスタの SSH セッションで、Kerberos チケットを生成して Dataproc Metastore サービスに接続します。

    このコマンドは、Dataproc クラスタによって生成されたデフォルトの Keytab 名を使用します。

    sudo klist -kte /etc/security/keytab/hive.service.keytab
    sudo kinit -kt /etc/security/keytab/hive.service.keytab hive/_HOST@${realm}
    sudo klist # gets the ticket information.
    

    _HOST 値は、klist -kte コマンドを使用して Keytab ファイルが一覧表示された際に取得されます。それには、プライマリ ノードのホスト名が含まれています。

(省略可)新しいプリンシパルを追加する

  1. 新しいプリンシパルを追加するには、次のコマンドを実行します。

    sudo kadmin.local -q "addprinc -randkey PRINCIPAL"
    sudo kadmin.local -q "ktadd -k /etc/security/keytab/hive.service.keytab PRINCIPAL"
    
  2. Kerberos チケットを取得します。

    sudo klist -kte /etc/security/keytab/hive.service.keytab
    sudo kinit -kt /etc/security/keytab/hive.service.keytab PRINCIPAL
    sudo klist
    sudo hive
    

次のステップ