概览
Secret Manager 可保护您的敏感数据,例如 API 密钥、密码和证书。您可以使用它在 Google Cloud 中管理、访问和审核 Secret。
与 Secret Manager 集成的 GoogleHadoopSecretManagerCredentialProvider
API 是 Hadoop CredentialProvider API 的实现,可保护敏感凭据免遭公开访问。
您可以通过以下方式使用 Hadoop 凭据提供程序 API:
- 使用 Hadoop 凭据命令。
- 配置 OSS 组件(例如 Hive),以便与 Secret Manager 搭配使用。
术语
下表介绍了本文档中使用的术语。
术语 | 说明 |
---|---|
Secret |
Secret 是包含一组元数据的项目全局对象 和密钥版本借助 Secret Manager,您可以将 Secret 作为二进制 blob 或文本字符串进行存储、管理和访问。 |
Credential |
在 Hadoop 和其他 Dataproc 托管的应用中,凭据会 由凭据名称 (ID) 和凭据值(密码)组成。 凭据 ID 和值映射到密钥 ID 以及 Secret Manager 中的 Secret 值(Secret 版本)。 |
Hadoop 凭据命令
您可以使用 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 命令指南。
配置 OSS 组件
您可以配置 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 组件 凭据密钥可以包含此运算符。当此属性设置为true
时。您可以将凭据名称中的点(.
) 替换为连字符(-
)。例如,当此属性设置为true
时,您可以在将凭据名称a.b.c
传递给 Secret Manager 时将其指定为a-b-c
。这个 属性只有在使用 Hadoop 凭据命令 或 OSS 组件尝试解析凭据时。它对 创建、列出或删除 Hadoop 凭据命令。--properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
Secret 版本(可选):Secret Manager 中的 Secret 可以有多个版本(值)。使用此属性可访问密文版本。默认情况下,Secret Manager 访问
LATEST
版本,该版本在运行时解析为 Secret 的最新值。 最佳做法是定义此属性,以便在生产环境中稳定访问。--properties=hadoop.security.credstore.google-secret-manager.secret-version=1
Hive Metastore 示例
Hive Metastore 属性 javax.jdo.option.ConnectionPassword
包含用于对访问 Metastore 数据库进行身份验证的密码。该密码以纯文本格式保存在 hive-site.xml
中,存在安全风险。生产环境的最佳实践是将密码存储在 Secret Manager 中,然后更新 hive-site.xml
配置文件,以允许 Hive Metastore 服务从 Secret Manager 读取密码。
以下部分介绍了如何在 不同的 Hive Metastore 场景。
具有本地 Metastore 的 Hive 集群
在本地或 Cloud Shell 中运行以下命令, 创建 Dataproc 集群 具有必需的集群属性的集群。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ ...other flags as needed... \
创建 Secret。您可以使用 Secret Manager 创建 Secret 或使用
hadoop credential
命令创建。替代方案 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
具有外部 Metastore 的 Hive 集群
在本地或 Cloud Shell 中运行以下命令, 创建 Dataproc 集群 替换为以下集群属性。
gcloud dataproc clusters create 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。您可以使用 Secret 管理器或
hadoop credential
命令创建 Secret。- 替代方案 1:使用 Secret Manager 创建 Secret。
- Secret 名称:
/projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
- Secret 值:
METASTORE_PASSWORD
。
- Secret 名称:
- 替代方案 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
在本地或 Cloud Shell 中运行以下命令, 创建 Dataproc 集群 替换为以下集群属性。 使用此集群运行 Hive 作业并连接到外部 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...
了解详情
- 浏览 Hive 文档。