Secret Manager 凭据提供程序

概览

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 是包含一系列元数据和 Secret 版本的全局项目对象。您可以将 Secret 作为二进制 blob 或文本字符串进行存储、管理和访问。
Credential 在 Hadoop 和其他 Dataproc 托管的应用中,凭据由凭据名称 (ID) 和凭据值(密码)组成。凭据 ID 和值会映射到 Secret Manager Secret ID 和 Secret 值(Secret 版本)。

用法

在创建 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 版本:Secret Manager 中的 Secret 可以有多个版本(值)。使用此属性可访问特定 Secret 版本,以便在生产环境中实现稳定访问。

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

    这是一个可选属性。默认情况下,Secret Manager 会访问 LATEST 版本,该版本会在运行时解析为 Secret 的最新值。如果您的应用场景是始终访问 Secret 的 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...
    

注意:

使用 Secret Manager 凭据提供程序提交 Dataproc

  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 包含用于对访问 metastore 数据库进行身份验证的密码。密码以文本格式保存在 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 命令创建 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.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 作业的外部 Hive metastore,这些作业会在其他 Dataproc 集群中运行来处理 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 命令创建 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
      

创建集群以运行连接到外部 metastore 的 Hive 作业

  1. 在本地或在 Cloud Shell 中运行以下命令,以使用以下集群属性创建 Dataproc 集群。使用此集群运行连接到另一个 Dataproc 集群上的外部 metastore 的 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 文件。

  • 删除项目中的 Secret 的所有版本。

    hadoop credential delete SECRET_ID -provider gsm://projects/ PROJECT_ID
    

如需了解详情,请参阅 Hadoop 命令指南

了解详情