概要
Secret Manager は、API キー、パスワード、証明書などの機密データを保護します。これを使用して、Google Cloud全体でシークレットの管理、アクセス、監査を行うことができます。
Secret Manager 認証情報プロバイダを使用して、Secret Manager シークレットを使用するように Dataproc クラスタまたはジョブを構成できます。
対象
この機能は、イメージ バージョン 2.0.97 以降、2.1.41 以降、2.2.6 以降の主要な Dataproc イメージ バージョンで作成された Dataproc クラスタで使用できます。
用語
次の表に、このドキュメントで使用されている用語を示します。
用語 | 説明 |
---|---|
Secret |
Secret Manager シークレットは、メタデータとシークレット バージョンのコレクションを含むグローバル プロジェクト オブジェクトです。シークレットをバイナリ blob またはテキスト文字列として保存、管理、アクセスできます。 |
Credential |
Hadoop やその他の Dataproc がホストするアプリケーションでは、認証情報は認証情報名(ID)と認証情報値(パスワード)で構成されます。認証情報 ID と値は、Secret Manager のシークレット ID とシークレット値(シークレット バージョン)にマッピングされます。 |
使用方法
Dataproc クラスタを作成するか、ジョブを送信するときに次のプロパティを設定して、Secret Manager と連携するように Hadoop などの OSS コンポーネントを構成できます。
プロバイダパス : プロバイダパス プロパティ
hadoop.security.credential.provider.path
は、認証情報を解決するために走査される 1 つ以上の認証情報プロバイダ URI のカンマ区切りのリストです。--properties=hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
- プロバイダ パスの
scheme
は、認証情報プロバイダのタイプを示します。Hadoop スキームには、jceks://
、user://
、localjceks://
があります。gsm://
スキームを使用して、Secret Manager で認証情報を検索します。
- プロバイダ パスの
ドット演算子を置き換える : Secret Manager サービスでは、シークレット名にドット(
.
)を使用できません。ただし、一部のオープンソース ソフトウェア(OSS)コンポーネントでは、認証情報キーにドットを使用しています。この制限を解消するには、このプロパティを有効にして、認証情報名のドット(.
)をハイフン(-
)に置き換えます。これにより、名前にドットを含む OSS 認証情報を Secret Manager から正しく保存および取得できます。たとえば、OSS 認証情報キーが
a.b.c
の場合は、Secret Manager に保存するときにa-b-c
に変更する必要があります。--properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
このプロパティは省略可能です。デフォルトでは、値は
false
です。認証情報名にドット(.
)演算子がない認証情報キーの場合、このプロパティは無視しても問題ありません。Secret のバージョン : Secret Manager の Secret には複数のバージョン(値)を設定できます。このプロパティを使用して、本番環境で安定したアクセスのために特定のシークレット バージョンにアクセスします。
--properties=hadoop.security.credstore.google-secret-manager.secret-version=1
このプロパティは省略可能です。デフォルトでは、Secret Manager は
LATEST
バージョンにアクセスします。これは、実行時にシークレットの最新の値に解決されます。ユースケースで常に Secret のLATEST
バージョンにアクセスする場合は、このプロパティを無視しても問題ありません。
Secret Manager 認証情報プロバイダを使用して Dataproc クラスタを作成する
- ローカルまたは Cloud Shell で次のコマンドを実行して、必要なプロパティで Dataproc クラスタを作成します。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --properties="hadoop:hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hadoop:hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \ ...other flags as needed...
注:
- CLUSTER_NAME: 新しいクラスタの名前。
- REGION: ワークロードが実行される Compute Engine リージョン。
- PROJECT_ID: プロジェクト ID は、Google Cloud コンソール ダッシュボードの [プロジェクト情報] セクションに表示されます。
Secret Manager 認証情報プロバイダを使用して Dataproc を送信する
ローカルまたは Cloud Shell で次のコマンドを実行して、必要なプロパティで Dataproc ジョブを送信します。
gcloud dataproc jobs submit CLUSTER_NAME \ --region=REGION \ --properties="hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \ ...other flags as needed... \ -- job-args
注:
- CLUSTER_NAME: ジョブを実行するクラスタの名前。
- REGION: ワークロードが実行される Compute Engine リージョン。
- PROJECT_ID: プロジェクト ID は、Google Cloud コンソール ダッシュボードの [プロジェクト情報] セクションに表示されます。
Hive Metastore で Secret Manager を使用する
Hive メタストア プロパティ javax.jdo.option.ConnectionPassword
には、メタストア データベースへのアクセスの認証に使用されるパスワードが含まれています。パスワードは hive-site.xml
にテキスト形式で保存されます。これはセキュリティ リスクを表します。本番環境では、パスワードを Secret Manager に保存し、hive-site.xml
構成ファイルを更新して、Hive Metastore サービスが Secret Manager からパスワードを読み取れるようにすることをおすすめします。
次の例は、さまざまな Hive Metastore シナリオで Secret Manager を使用する方法を示しています。
ローカル メタストアを使用するクラスタを作成する
- ローカルまたは Cloud Shell で次のコマンドを実行して、Dataproc クラスタを作成します。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ ...other flags as needed... \
注:
- CLUSTER_NAME: 新しいクラスタの名前。
- REGION: ワークロードが実行される Compute Engine リージョン。
Secret Manager または
hadoop credential
コマンドを使用してシークレットを作成します。方法 1: Secret Manager を使用してシークレットを作成します。
- シークレット名:
/projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
- シークレット値:
METASTORE_PASSWORD
- シークレット名:
方法 2:
hadoop credential
コマンドを使用して Secret を作成します。sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
- METASTORE_PASSWORD: Secret Manager はドット(
.
)演算子をサポートしていないため、パスワード内のすべてのドット(.
)はハイフン(-
)に置き換えます。
- METASTORE_PASSWORD: Secret Manager はドット(
Secret が存在することを確認します。
sudo hadoop credential list -provider gsm://projects/PROJECT_ID
テキスト エディタを使用して
hive-site.xml
ファイルからjavax.jdo.option.ConnectionPassword
プロパティを削除し、hadoop.security.credential.provider.path
プロパティとhadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator
プロパティをファイルに追加します。プロパティの例:
hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
Hive Metastore を再起動します。
sudo systemctl restart hive-metastore
外部 Hive メタストアを使用してクラスタを作成する
ローカルまたは Cloud Shell で次のコマンドを実行して、次のクラスタ プロパティで Dataproc クラスタを作成します。このクラスタは、Spark Hive ワークロード用の他の Dataproc クラスタから実行される Hive ジョブの外部 Hive メタストアとして使用します。
gcloud dataproc clusters create METASTORE_CLUSTER_NAME \ --region=REGION \ --properties=core:fs.defaultFS=gs://METASTORE_CLUSTER_PROXY_BUCKET,dataproc:dataproc.components.deactivate="hdfs hive-server2 hive-metastore" \ ...other flags as needed...
Secret Manager または
hadoop credential
コマンドを使用してシークレットを作成します。- 方法 1: Secret Manager を使用してシークレットを作成します。
- シークレット名:
/projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
- シークレット値:
METASTORE_PASSWORD
- シークレット名:
- 方法 2:
hadoop credential
コマンドを使用して Secret を作成します。sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
- METASTORE_PASSWORD: Secret Manager はドット(
.
)演算子をサポートしていないため、パスワード内のすべてのドット(.
)はハイフン(-
)に置き換えます。
- METASTORE_PASSWORD: Secret Manager はドット(
- 方法 1: Secret Manager を使用してシークレットを作成します。
Secret が存在することを確認します。
sudo hadoop credential list -provider gsm://projects/PROJECT_ID
外部メタストアに接続する Hive ジョブを実行するクラスタを作成する
- ローカルまたは Cloud Shell で次のコマンドを実行して、次のクラスタ プロパティで Dataproc クラスタを作成します。このクラスタを使用して、別の Dataproc クラスタの外部メタストアに接続する Hive ジョブを実行します。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --properties="hive:javax.jdo.option.ConnectionURL=jdbc:mysql://METASTORE_CLUSTER_NAME-m/metastore,hive:hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hive:hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \ ...other flags as needed...
Hadoop 認証情報コマンド
SSH を使用して Dataproc マスターノードに接続し、hadoop credential
コマンドを使用してシークレットの作成、一覧表示、管理を行うことができます。
hadoop credential
コマンドの形式は hadoop credential SUBCOMMAND OPTIONS
です。次の例では、-provider
フラグを追加して、プロバイダのタイプとロケーション(プロバイダ ストア)を指定しています。gsm://
スキーマは Secret Manager を指定します。
指定したシークレット ID を使用してシークレットを作成します。指定されたシークレット ID が存在する場合、このコマンドはシークレットを作成しません。この動作は Hadoop
CredentialProvider
API と一貫しています。hadoop credential create SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
プロジェクトに保存されているシークレットを一覧表示します。
hadoop credential list -provider gsm://projects/PROJECT_ID
指定された値のシークレットがプロジェクトに存在するかどうかを確認します。
hadoop credential check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
構成ファイルで特定のシークレット バージョンを確認します。
hadoop credential conf CONFIG_FILE check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
CONFIG_FILE:
hadoop.security.credstore.google-secret-manager.secret-version
を設定する XML ファイル。プロジェクト内の Secret のすべてのバージョンを削除します。
hadoop credential delete SECRET_ID -provider gsm://projects/ PROJECT_ID
詳細については、Hadoop コマンド ガイドをご覧ください。
詳細情報
- Hive のドキュメントを確認する。