このページでは、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 のロールを付与するよう管理者に依頼してください。
-
Dataproc Metastore リソースに対する完全アクセス権を付与する(
roles/metastore.editor
) -
IAM ポリシー管理を含むすべての Dataproc Metastore リソースに対する完全アクセス権を付与する(
roles/metastore.admin
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
この事前定義ロールには、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 を構成します。
- Google Cloud コンソールで、[VM インスタンス] ページに移動します。
仮想マシン インスタンスのリストで、Dataproc プライマリ ノード(
your-cluster-name-m
)の行の [SSH] をクリックします。ノード上のホーム ディレクトリでブラウザ ウィンドウが開きます。
/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 ファイルを作成するには
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"
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 クラスタに関連付ける必要があります。
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
です。krb5.conf
ファイルを開きます。sudo vim /etc/krb5.conf
ファイルで、既存の
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 }
/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 のロールと権限を付与する
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
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 クラスタを Dataproc Metastore にリンクさせる
Dataproc Metastore サービスが作成されたら、Thrift エンドポイント URI とウェアハウス ディレクトリを探します。
Dataproc クラスタのプライマリ インスタンスに SSH で接続します。
SSH セッションで、
/etc/hive/conf/hive-site.xml
ファイルを開きます。sudo vim /etc/hive/conf/hive-site.xml
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>
HiveServer2 を再起動します。
sudo systemctl restart hive-server2.service
ジョブを送信する前に Dataproc を構成する
Dataproc ジョブを実行するには、Hadoop container-executor.cfg
ファイルの allowed.system.users
プロパティに hive
ユーザーを追加する必要があります。これにより、ユーザーは select * from
などのデータにアクセスするためのクエリを実行できます。
SSH セッションで、Hadoop の
container-executor.cfg
ファイルを開きます。sudo vim /etc/hadoop/conf/container-executor.cfg
すべての Dataproc ノードに次の行を追加します。
allowed.system.users=hive
Kerberos チケットを取得する
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
: プリンシパルの名前。