概要
Secret Manager は、API キー、パスワード、証明書などの機密データを保護できます。これを使用して、Google Cloud 全体のシークレットの管理、アクセス、監査を行います。
GoogleHadoopSecretManagerCredentialProvider
API は Secret Manager と統合され、Hadoop CredentialProvider API の実装です。これは、機密性の高い認証情報を公開アクセスから保護するソリューションです。
Hadoop 認証情報プロバイダ API は、次の方法で使用できます。
- Hadoop 認証情報コマンドを使用する。
- Secret Manager と連携するように Hive などの OSS コンポーネントを構成します。
用語
次の表では、このドキュメントで使用する用語について説明します。
用語 | 説明 |
---|---|
Secret |
シークレットは、メタデータとシークレット バージョンのコレクションを含むプロジェクト グローバル オブジェクトです。Secret Manager を使用すると、シークレットをバイナリ blob またはテキスト文字列として保存、管理、アクセスできます。 |
Credential |
Hadoop や他の Dataproc がホストするアプリケーションでは、認証情報は認証情報名(ID)と認証情報の値(パスワード)で構成されます。認証情報の ID と値は、Secret Manager のシークレット ID とシークレット値(シークレット バージョン)にマッピングされます。 |
Hadoop 認証情報コマンド
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 ファイル。プロジェクト内のシークレットのすべてのバージョンを削除します。
hadoop credential delete SECRET_ID -provider gsm://projects/ PROJECT_ID
詳細については、Hadoop コマンドガイドをご覧ください。
OSS コンポーネントを構成する
次のコンポーネント プロパティを設定すると、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 コンポーネントの認証情報キーにはこの演算子を含めることができます。このプロパティがtrue
に設定されている場合。 認証情報名のドット(.
)をハイフン(-
)に置き換えることができます。たとえば、このプロパティがtrue
に設定されている場合、Secret Manager に渡すときに認証情報名a.b.c
をa-b-c
として指定できます。このプロパティは、Hadoop 認証情報コマンドを使用して認証情報を指定する場合、または OSS コンポーネントが認証情報を解決しようとした場合にのみ必要です。Hadoop 認証情報の作成、一覧表示、削除には影響しません。--properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
Secret のバージョン(省略可): Secret Manager のシークレットには、複数のバージョン(値)があります。このプロパティを使用して、シークレット バージョンにアクセスします。デフォルトでは、Secret Manager は
LATEST
バージョンにアクセスします。これは、ランタイム時にシークレットの最新の値に解決されます。本番環境で安定してアクセスできるように、このプロパティを定義することをおすすめします。--properties=hadoop.security.credstore.google-secret-manager.secret-version=1
Hive メタストアの例
Hive メタストア プロパティ javax.jdo.option.ConnectionPassword
には、メタストア データベースへのアクセスの認証に使用するパスワードが含まれています。このパスワードは、セキュリティ リスクを表す書式なしテキスト形式で hive-site.xml
に保存されます。本番環境のベスト プラクティスは、パスワードを Secret Manager に保存してから、Hive Metastore サービスが Secret Manager からパスワードを読み取れるように hive-site.xml
構成ファイルを更新することです。
以降のセクションでは、さまざまな Hive メタストア シナリオで Secret Manager を使用する方法について説明します。
ローカル メタストアを持つ Hive クラスタ
次のコマンドをローカルまたは Cloud Shell で実行して、必要なクラスタ プロパティを持つ Dataproc クラスタを作成します。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ ...other flags as needed... \ --properties="hive:hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hive:hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true"
シークレットを作成します。 Secret は、Secret Manager または
hadoop credential
コマンドを使用して作成できます。方法 1: Secret Manager を使用してシークレットを作成する
- シークレット名:
/projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
- シークレット値:
METASTORE_PASSWORD
- シークレット名:
代替方法 2:
hadoop credential
コマンドを使用してシークレットを作成します。sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
- METASTORE_PASSWORD: Secret Manager はドット(
.
)演算子をサポートしていないため、パスワード内のすべてのドット(.
)はハイフン(-
)に置き換えます。
- METASTORE_PASSWORD: Secret Manager はドット(
シークレットが存在することを確認します。
sudo hadoop credential list -provider gsm://projects/PROJECT_ID
javax.jdo.option.ConnectionPassword
をhive-site.xml
ファイルから削除します。 次のコマンドは、vim
で編集するためにファイルを開きます。sudo vim /etc/hive/conf/hive-site.xml
Hive メタストアを再起動します。
sudo systemctl restart hive-metastore
外部メタストアを持つ Hive クラスタ
次のコマンドをローカルまたは Cloud Shell で実行して、次のクラスタ プロパティを持つ Dataproc クラスタを作成します。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ ...other flags as needed... \ --properties=core:fs.defaultFS=gs://METASTORE_CLUSTER_PROXY_BUCKET,dataproc:dataproc.components.deactivate="hdfs hive-server2 hive-metastore"
シークレットを作成します。 Secret は、Secret Manager または
hadoop credential
コマンドを使用して作成できます。- 方法 1: Secret Manager を使用してシークレットを作成する:
- シークレット名:
/projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
- シークレット値:
METASTORE_PASSWORD
- シークレット名:
- 代替方法 2:
hadoop credential
コマンドを使用してシークレットを作成します。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 を使用してシークレットを作成する:
シークレットが存在することを確認します。
sudo hadoop credential list -provider gsm://projects/PROJECT_ID
次のコマンドをローカルまたは Cloud Shell で実行して、次のクラスタ プロパティを持つ Dataproc クラスタを作成します。このクラスタを使用して Hive ジョブを実行し、外部メタストアに接続します。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ ...other flags as needed... --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"
自然言語処理についてや、
- Hive のドキュメントを確認する。