Secret Manager は、API キー、パスワード、証明書などのセンシティブ データを保護します。これを使用して、 Google Cloud全体で Secret の管理、アクセス、監査を行えます。
Secret Manager 認証情報プロバイダを使用して、Secret Manager の Secret を使用するように Managed Service for Apache Spark クラスタまたはジョブを構成できます。
対象
この機能は、イメージ バージョン 2.0.97 以降、2.1.41 以降、2.2.6 以降の主要な Managed Service for Apache Spark イメージ バージョンで作成された Managed Service for Apache Spark クラスタで使用できます。
用語
次の表に、このドキュメントで使用されている用語を示します。
| 用語 | 説明 |
|---|---|
Secret |
Secret Manager の Secret は、メタデータと Secret バージョンのコレクションを含むグローバル プロジェクト オブジェクトです。これにより、Secret をバイナリ blob またはテキスト文字列として保存、管理し、その Secret にアクセスできます。 |
Credential |
Hadoop やその他の Managed Service for Apache Spark がホストするアプリケーションでは、認証情報は認証情報名(ID)と認証情報値(パスワード)で構成されます。 認証情報 ID と値は、Secret Manager の Secret ID と Secret 値(Secret バージョン)にマッピングされます。 |
用途
Managed Service for Apache Spark クラスタを作成するか、ジョブを送信するときに次の プロパティを設定して、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 サービスでは、Secret 名にドット(
.)を使用できません。ただし、一部のオープンソース ソフトウェア(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 には複数のバージョン(値)を設定できます。このプロパティを使用して、本番環境で安定したアクセスのために特定の Secret バージョンにアクセスします。
--properties=hadoop.security.credstore.google-secret-manager.secret-version=1
このプロパティは省略可能です。デフォルトでは、Secret Manager は
LATESTバージョンにアクセスします。これは、ランタイムで Secret の最新の値に解決されます。ユースケースで常に Secret のLATESTバージョンにアクセスする場合は、このプロパティを無視しても問題ありません。
Secret Manager 認証情報プロバイダを使用して Managed Service for Apache Spark クラスタを作成する
- ローカルまたは Cloud Shell で
次のコマンドを実行して、必要なプロパティで Managed Service for Apache Spark クラスタを作成します。
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 は、 [Project info] セクション の Google Cloud コンソール ダッシュボードに表示されます。
Secret Manager 認証情報プロバイダを使用して Managed Service for Apache Spark を送信する
ローカルまたは Cloud Shell で次のコマンドを実行して、 必要なプロパティで Managed Service for Apache Spark ジョブを送信します 。
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 で次のコマンドを実行して
Managed Service for Apache Spark クラスタを作成します。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ ...other flags as needed... \
注:
- CLUSTER_NAME: 新しいクラスタの名前。
- REGION: ワークロードが実行される Compute Engine リージョン。
Secret Manager または
hadoop credentialコマンドを使用して Secret を作成します。方法 1: Secret Manager を使用して Secret を作成します。
- Secret 名:
/projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1 - Secret の値:
METASTORE_PASSWORD
- Secret 名:
方法 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 で次のコマンドを実行して、 次のクラスタ プロパティで Managed Service for Apache Spark クラスタを作成します。 このクラスタは、Spark Hive ワークロード用の他の Managed Service for Apache Spark クラスタから実行される 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コマンドを使用して Secret を作成します。- 方法 1: Secret Manager を使用して Secret を作成します。
- Secret 名:
/projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1 - Secret の値:
METASTORE_PASSWORD
- Secret 名:
- 方法 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 を作成します。
Secret が存在することを確認します。
sudo hadoop credential list -provider gsm://projects/PROJECT_ID
外部メタストアに接続する Hive ジョブを実行するクラスタを作成する
- ローカルまたは Cloud Shell で次のコマンドを実行して、
次のクラスタ プロパティで Managed Service for Apache Spark クラスタを作成します。
このクラスタを使用して、別の Managed Service for Apache Spark クラスタの外部メタストアに接続する 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 認証情報コマンド
hadoop credential コマンドの形式は
hadoop credential SUBCOMMAND OPTIONS です。
次の例では、-provider フラグを追加して、プロバイダのタイプとロケーション(プロバイダ ストア)を指定しています。gsm:// スキーマは Secret Manager を指定します。
指定した Secret ID を使用して Secret を作成します。指定された Secret ID が存在する場合、このコマンドは Secret を作成しません。この動作は Hadoop
CredentialProviderAPI と一貫しています。hadoop credential create SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
プロジェクトに保存されている Secret を一覧表示します。
hadoop credential list -provider gsm://projects/PROJECT_ID
指定された値の Secret がプロジェクトに存在するかどうかを確認します。
hadoop credential check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
構成ファイルで特定の Secret バージョンを確認します。
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 のドキュメントをご覧ください。