Secret Manager 認証情報プロバイダ

概要

Secret Manager は、API キー、パスワード、証明書などの機密データを保護できます。これを使用して、Google Cloud 全体のシークレットの管理、アクセス、監査を行います。

GoogleHadoopSecretManagerCredentialProvider API は Secret Manager と統合され、Hadoop CredentialProvider API の実装です。これは、機密性の高い認証情報を公開アクセスから保護するソリューションです。

Hadoop 認証情報プロバイダ API は、次の方法で使用できます。

用語

次の表では、このドキュメントで使用する用語について説明します。

用語 説明
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.ca-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 クラスタ

  1. 次のコマンドをローカルまたは 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"
    

  2. シークレットを作成します。 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 はドット(.)演算子をサポートしていないため、パスワード内のすべてのドット(.)はハイフン(-)に置き換えます。
  3. シークレットが存在することを確認します。

    sudo hadoop credential list -provider gsm://projects/PROJECT_ID
    

  4. javax.jdo.option.ConnectionPasswordhive-site.xml ファイルから削除します。 次のコマンドは、vim で編集するためにファイルを開きます。

    sudo vim /etc/hive/conf/hive-site.xml
    

  5. Hive メタストアを再起動します。

    sudo systemctl restart hive-metastore
    

外部メタストアを持つ Hive クラスタ

  1. 次のコマンドをローカルまたは 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"
    

  2. シークレットを作成します。 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 はドット(.)演算子をサポートしていないため、パスワードのドット(.)はハイフン(-)に置き換えます。
  3. シークレットが存在することを確認します。

    sudo hadoop credential list -provider gsm://projects/PROJECT_ID
      

  4. 次のコマンドをローカルまたは 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"
    

自然言語処理についてや、