使用 Secret Manager 憑證供應器

Secret Manager 可保護 API 金鑰、密碼和憑證等機密資料。您可以使用這項服務,管理、存取及稽核Google Cloud中的密鑰。

您可以使用 Secret Manager 憑證供應器,設定 Dataproc 叢集或工作,以使用 Secret Manager 密鑰。

可用性

這項功能適用於使用 2.0.97 以上、2.1.41 以上、2.2.6 以上版本,或更新的主要 Dataproc 映像檔版本建立的 Dataproc 叢集。

術語

下表說明本文使用的術語。

字詞 說明
Secret Secret Manager 密鑰是全域專案物件,內含中繼資料和密鑰版本集合。您可以二進位 blob 或文字字串的形式儲存、管理及存取密鑰。
Credential 在 Hadoop 和其他 Dataproc 代管的應用程式中,憑證包含憑證名稱 (ID) 和憑證值 (密碼)。憑證 ID 和值會對應至 Secret Manager 密鑰 ID 和密鑰值 (密鑰版本)。

用量

您可以設定 Hadoop 和其他 OSS 元件,在建立 Dataproc 叢集或提交工作時設定下列屬性,即可與 Secret Manager 搭配使用。

  • 供應器路徑:供應器路徑屬性 hadoop.security.credential.provider.path 是以逗號分隔的一或多個憑證供應器 URI 清單,用於解析憑證。

    --properties=hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    
    • 供應商路徑中的 scheme 表示憑證供應商類型。 Hadoop 配置包括 jceks://user://localjceks://。使用 gsm:// 配置在 Secret Manager 中搜尋憑證。
  • 取代半形句點運算子:Secret Manager 服務不允許密鑰名稱包含半形句點 (.)。不過,部分開放原始碼軟體 (OSS) 元件會在憑證金鑰中使用半形句號。如要解決這項限制,請啟用這項屬性,將憑證名稱中的點 (.) 替換為連字號 (-)。這樣一來,系統就能正確地從 Secret Manager 儲存及擷取名稱含有半形句點的 OSS 憑證。

    舉例來說,如果 OSS 憑證金鑰為 a.b.c,您必須在 Secret Manager 中將其修改為 a-b-c

    --properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    

    這是選用屬性。根據預設,這個值為 false。如果憑證名稱中沒有點 (.) 運算子,可以安全地忽略這個屬性。

  • 密鑰版本:Secret Manager 中的密鑰可以有多個版本 (值)。在實際工作環境中,您可以使用這項屬性存取特定密鑰版本,確保存取權穩定。

    --properties=hadoop.security.credstore.google-secret-manager.secret-version=1
    

    這是選用屬性。根據預設,Secret Manager 會存取 LATEST 版本,在執行階段解析為密鑰的最新值。如果您的用途是存取密碼的 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...
    

注意:

提交 Dataproc 工作,並使用 Secret Manager 憑證提供者

  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
    

注意:

搭配使用 Secret Manager 與 Hive Metastore

Hive Metastore 屬性 javax.jdo.option.ConnectionPassword 包含用於驗證中繼存放區資料庫存取權的密碼。密碼會以文字格式儲存在 hive-site.xml 中,這代表存在安全風險。最佳做法是在 Secret Manager 中儲存密碼,然後更新 hive-site.xml 設定檔,允許 Hive Metastore 服務從 Secret Manager 讀取密碼。

以下範例說明如何在不同的 Hive Metastore 情境中使用 Secret Manager。

建立具有本機 Metastore 的叢集

  1. 在本機或 Cloud Shell 中執行下列指令,建立 Dataproc 叢集
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed... \
    

注意:

  1. 使用 Secret Manager 或 hadoop credential 指令建立密鑰。

    • 替代方法 1: 使用 Secret Manager 建立密鑰

      • Secret 名稱:/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 不支援點(.) 運算子,請將密碼中的所有點(.) 替換為連字號(-)。
  2. 確認密鑰是否存在。

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

  3. 使用文字編輯器從 hive-site.xml 檔案中移除 javax.jdo.option.ConnectionPassword 屬性,然後將 hadoop.security.credential.provider.pathhadoop.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 Metastore

  1. 在本機或 Cloud Shell 中執行下列指令,建立 Dataproc 叢集並設定下列叢集屬性。將這個叢集做為外部 Hive 中繼存放區,供從其他 Dataproc 叢集執行的 Hive 工作使用,以處理 Spark 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 建立密鑰
      • Secret 名稱:/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
      

建立叢集,執行連線至外部中繼存放區的 Hive 工作

  1. 在本機或 Cloud Shell 中執行下列指令,建立 Dataproc 叢集並設定下列叢集屬性。使用這個叢集執行 Hive 工作,連線至另一個 Dataproc 叢集上的外部 Metastore。
    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 指令指南

後續步驟