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 叢集
- 在本機或 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...
注意:
- CLUSTER_NAME:新叢集的名稱。
- REGION:工作負載執行的 Compute Engine 地區。
- PROJECT_ID:專案 ID 會列在Google Cloud 控制台資訊主頁的「專案資訊」部分。
提交 Dataproc 工作,並使用 Secret Manager 憑證提供者
在本機或 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
注意:
- CLUSTER_NAME:執行工作的叢集名稱。
- REGION:工作負載執行的 Compute Engine 區域。
- PROJECT_ID:您的專案 ID 會列在Google Cloud 控制台資訊主頁的「專案資訊」部分。
搭配使用 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 的叢集
- 在本機或 Cloud Shell 中執行下列指令,建立 Dataproc 叢集。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ ...other flags as needed... \
注意:
- CLUSTER_NAME:新叢集的名稱。
- REGION:工作負載執行的 Compute Engine 地區。
使用 Secret Manager 或
hadoop credential
指令建立密鑰。替代方法 1: 使用 Secret Manager 建立密鑰。
- Secret 名稱:
/projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
- 密鑰值:
METASTORE_PASSWORD
。
- Secret 名稱:
替代方法 2:使用
hadoop credential
指令建立密鑰。sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
- METASTORE_PASSWORD:由於 Secret Manager 不支援點(
.
) 運算子,請將密碼中的所有點(.
) 替換為連字號(-
)。
- METASTORE_PASSWORD:由於 Secret Manager 不支援點(
確認密鑰是否存在。
sudo hadoop credential list -provider gsm://projects/PROJECT_ID
使用文字編輯器從
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
重新啟動 Hive Metastore。
sudo systemctl restart hive-metastore
建立叢集並使用外部 Hive Metastore
在本機或 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...
使用 Secret Manager 或
hadoop credential
指令建立密鑰。- 替代方法 1: 使用 Secret Manager 建立密鑰。
- Secret 名稱:
/projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
- 密鑰值:
METASTORE_PASSWORD
。
- Secret 名稱:
- 替代方法 2:使用
hadoop credential
指令建立密鑰。sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
- METASTORE_PASSWORD:由於 Secret Manager 不支援點(
.
) 運算子,請將密碼中的點(.
) 替換為連字號(-
)。
- METASTORE_PASSWORD:由於 Secret Manager 不支援點(
- 替代方法 1: 使用 Secret Manager 建立密鑰。
確認密鑰是否存在。
sudo hadoop credential list -provider gsm://projects/PROJECT_ID
建立叢集,執行連線至外部中繼存放區的 Hive 工作
- 在本機或 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 指令指南。
後續步驟
- 請參閱 Hive 說明文件。