Secret Manager 認証情報プロバイダ

概要

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 クラスタを作成する

  1. ローカルまたは 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...
    

注:

Secret Manager 認証情報プロバイダを使用して Dataproc を送信する

  1. ローカルまたは 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
    

注:

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 を使用する方法を示しています。

ローカル メタストアを使用するクラスタを作成する

  1. ローカルまたは Cloud Shell で次のコマンドを実行して、Dataproc クラスタを作成します。
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed... \
    

注:

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

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

  3. テキスト エディタを使用して 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
    

  4. Hive Metastore を再起動します。

    sudo systemctl restart hive-metastore
    

外部 Hive メタストアを使用してクラスタを作成する

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

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

外部メタストアに接続する Hive ジョブを実行するクラスタを作成する

  1. ローカルまたは 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 コマンド ガイドをご覧ください。

詳細情報