概览
Secret Manager 可保护您的敏感数据,例如 API 密钥、密码和证书。您可以使用它在Google Cloud中管理、访问和审核您的 Secret。
您可以使用 Secret Manager 凭据提供程序配置 Dataproc 集群或作业以使用 Secret Manager Secret。
可用性
此功能适用于使用 2.0.97 及更高版本、2.1.41 及更高版本、2.2.6 及更高版本或更高主要 Dataproc 映像版本创建的 Dataproc 集群。
术语
下表介绍了本文档中使用的术语。
术语 | 说明 |
---|---|
Secret |
Secret Manager 密文是包含一系列元数据和密文版本的全球项目对象。您可以将 Secret 作为二进制 blob 或文本字符串进行存储、管理和访问。 |
Credential |
在 Hadoop 和其他 Dataproc 托管的应用中,凭据由凭据名称 (ID) 和凭据值(密码)组成。凭据 ID 和值会映射到 Secret Manager 密钥 ID 和密钥值(密钥版本)。 |
用法
您可以在创建 Dataproc 集群或提交作业时设置以下属性,以便配置 Hadoop 和其他 OSS 组件与 Secret Manager 搭配使用。
提供程序路径:提供程序路径属性
hadoop.security.credential.provider.path
是一个以英文逗号分隔的一个或多个凭据提供程序 URI 的列表,系统会遍历这些 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 Manager 中的 Secret 可以有多个版本(值)。使用此属性可访问特定密文版本,以便在生产环境中获得稳定的访问权限。
--properties=hadoop.security.credstore.google-secret-manager.secret-version=1
这是一个可选属性。默认情况下,Secret Manager 会访问
LATEST
版本,该版本会在运行时解析为 Secret 的最新值。如果您的用例是始终访问 Secret 的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 控制台信息中心的项目信息部分中。
使用 Secret Manager 凭据提供程序提交 Dataproc
在本地或 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
包含用于对对 metastore 数据库的访问进行身份验证的密码。密码以文本格式保存在 hive-site.xml
中,这会带来安全风险。生产环境的最佳实践是将密码存储在 Secret Manager 中,然后更新 hive-site.xml
配置文件,以允许 Hive Metastore 服务从 Secret Manager 读取密码。
以下示例展示了如何在不同的 Hive Metastore 场景中使用 Secret Manager。
创建使用本地元存储空间的集群
- 在本地或在 Cloud Shell 中运行以下命令,创建 Dataproc 集群。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ ...other flags as needed... \
注意:
- CLUSTER_NAME:新集群的名称。
- REGION:工作负载将运行的 Compute Engine 区域。
使用 Secret Manager 或
hadoop credential
命令创建 Secret。替代方案 1:使用 Secret Manager 创建 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 不支持英文句点运算符(
.
),因此请将密码中的所有英文句点(.
) 替换为英文连字符(-
)。
- METASTORE_PASSWORD:由于 Secret Manager 不支持英文句点运算符(
验证 Secret 是否存在。
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 集群。将此集群用作从其他 Dataproc 集群运行的 Hive 作业的外部 Hive Metastore,以便处理 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
命令创建 Secret。- 替代方案 1:使用 Secret Manager 创建 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 不支持点号运算符(
.
),因此请将密码中的点号(.
) 替换为短划线(-
)。
- METASTORE_PASSWORD:由于 Secret Manager 不支持点号运算符(
- 替代方案 1:使用 Secret Manager 创建 Secret。
验证 Secret 是否存在。
sudo hadoop credential list -provider gsm://projects/PROJECT_ID
创建集群以运行连接到外部元存储区的 Hive 作业
- 在本地或在 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 文件。删除项目中密文的所有版本。
hadoop credential delete SECRET_ID -provider gsm://projects/ PROJECT_ID
如需了解详情,请参阅 Hadoop 命令指南。
了解详情
- 浏览 Hive 文档。