Secret Manager 認証情報プロバイダを使用する

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

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

注:

Secret Manager 認証情報プロバイダを使用して Managed Service for Apache Spark を送信する

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

注:

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 で次のコマンドを実行して Managed Service for Apache Spark クラスタを作成します
    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 で次のコマンドを実行して、 次のクラスタ プロパティで 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...
    
  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 で次のコマンドを実行して、 次のクラスタ プロパティで 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 認証情報コマンド

SSH を使用して Managed Service for Apache Spark マスターノードに接続し、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 コマンドガイドをご覧ください。

次のステップ