Secret Manager 認証情報プロバイダ

概要

Secret Manager は、API キー、パスワード、証明書などのセンシティブ データを保護します。これを使用して、Google Cloud全体で Secret の管理、アクセス、監査を行えます。

Secret Manager 認証情報プロバイダを使用して、Secret Manager の Secret を使用するように Dataproc クラスタまたはジョブを構成できます。

対象

この機能は、イメージ バージョン 2.0.97 以降、2.1.41 以降、2.2.6 以降の主要な Dataproc イメージ バージョンで作成された Dataproc クラスタで使用できます。

用語

次の表に、このドキュメントで使用されている用語を示します。

用語 説明
Secret Secret Manager の Secret は、メタデータと Secret バージョンのコレクションを含むグローバル プロジェクト オブジェクトです。これにより、Secret をバイナリ blob またはテキスト文字列として保存、管理し、その Secret にアクセスできます。
Credential Hadoop やその他の Dataproc がホストするアプリケーションでは、認証情報は認証情報名(ID)と認証情報値(パスワード)で構成されます。認証情報 ID と値は、Secret Manager の Secret ID と Secret 値(Secret バージョン)にマッピングされます。

使用方法

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 サービスでは、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 認証情報プロバイダを使用して 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 コマンドを使用して Secret を作成します。

    • 方法 1: Secret Manager を使用して Secret を作成します。

      • Secret 名: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Secret の値: 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 コマンドを使用して Secret を作成します。

    • 方法 1: Secret Manager を使用して Secret を作成します。
      • Secret 名: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Secret の値: 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 コマンドを使用して Secret の作成、一覧表示、管理を行えます。

hadoop credential コマンドの形式は hadoop credential SUBCOMMAND OPTIONS です。次の例では、-provider フラグを追加して、プロバイダのタイプとロケーション(プロバイダ ストア)を指定しています。gsm:// スキーマは Secret Manager を指定します。

  • 指定した Secret ID を使用して Secret を作成します。指定された Secret ID が存在する場合、このコマンドは Secret を作成しません。この動作は Hadoop CredentialProvider API と一貫しています。

    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 コマンドガイドをご覧ください。

追加情報