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
    

次のステップ