このページでは、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 のロールを付与するよう管理者に依頼してください。
-
Dataproc Metastore リソースに対する完全アクセス権を付与する(
roles/metastore.editor
) -
IAM ポリシー管理を含むすべての Dataproc Metastore リソースに対する完全アクセス権を付与する(
roles/metastore.admin
) -
gRPC の読み取り / 書き込みアクセス権を Dataproc Metastore メタデータに付与する(
roles/metastore.metadataEditor
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
この事前定義ロールには、 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 プロジェクト IDREGION
: 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
ファイルを更新する方法を示します。
- Google Cloud コンソールで、[VM インスタンス] ページに移動します。
仮想マシン インスタンスのリストで、Dataproc プライマリ ノード(
your-cluster-name-m
)の行の [SSH] をクリックします。ノード上のホーム ディレクトリでブラウザ ウィンドウが開きます。
SSH セッションで、Hadoop
container-executor.cfg
ファイルを開きます。sudo vim /etc/hadoop/conf/container-executor.cfg
すべての Dataproc ノードに次の行を追加します。
allowed.system.users=hive
Kerberos チケットを取得する
次の手順では、Kerberos チケットを生成する方法を示します。
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 ファイルが一覧表示された際に取得されます。それには、プライマリ ノードのホスト名が含まれています。
(省略可)新しいプリンシパルを追加する
新しいプリンシパルを追加するには、次のコマンドを実行します。
sudo kadmin.local -q "addprinc -randkey PRINCIPAL" sudo kadmin.local -q "ktadd -k /etc/security/keytab/hive.service.keytab PRINCIPAL"
Kerberos チケットを取得します。
sudo klist -kte /etc/security/keytab/hive.service.keytab sudo kinit -kt /etc/security/keytab/hive.service.keytab PRINCIPAL sudo klist sudo hive