Secret Manager Credential Provider

概览

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 的逗号分隔列表。

    --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

    --properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    
  • Secret 版本(可选):Secret Manager 中的 Secret 可以有多个版本(值)。使用此属性可访问密文版本。默认情况下,Secret Manager 会访问 LATEST 版本,该版本会在运行时解析为 Secret 的最新值。最佳实践是在生产环境中定义此属性,以实现稳定的访问。如需了解如何创建 Secret,请参阅使用 Secret Manager 创建和访问 Secret 以及 Hadoop 凭据命令

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

使用 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。

创建使用本地元存储空间的集群

  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

      • 密钥名称:/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 集群。将此集群用作从其他 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...
    
  2. 使用 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 不支持点号运算符(.),因此请将密码中的点号(.) 替换为短划线(-)。
  3. 验证 Secret 是否存在。

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

创建集群以运行连接到外部元存储区的 Hive 作业

  1. 在本地或在 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 命令指南

了解详情