本文档介绍如何使用 Secret Manager Secret 保护您要为批量作业指定的敏感数据。
Secret Manager Secret 通过加密来保护敏感数据。 在批量作业中,您可以指定一个或多个现有 Secret,以安全地传递其中包含的敏感数据,您可以使用这些数据来执行以下操作:
安全地定义 包含敏感数据的自定义环境变量 。
安全地指定 Docker 注册表的登录凭据, 以允许作业的可运行对象访问其私有容器映像。
准备工作
- 如果您之前未使用过 Batch,请查看 Batch 使用入门 ,并通过完成 项目和用户的前提条件来启用 Batch。
- 创建 Secret 或 标识 Secret ,用于安全指定作业的敏感数据。
-
如需获得创建作业所需的权限,请让您的管理员授予您以下 IAM 角色:
- Batch Job Editor (
roles/batch.jobsEditor) 项目的 - Service Account User (
roles/iam.serviceAccountUser) 在作业的服务账号上,默认情况下为默认 Compute Engine 服务账号
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
- Batch Job Editor (
-
如需确保作业的服务帐号具有访问 Secret 所需的权限,请让您的管理员为作业的服务帐号授予针对 Secret 的Secret Manager Secret Accessor (
如果未能向正确的正文授予此角色,可能会导致权限错误。roles/secretmanager.secretAccessor) IAM 角色。
安全地将敏感数据传递给自定义环境变量
如需安全地将敏感数据从 Secret Manager Secret 传递给自定义
环境变量,您必须为环境在
Secret 变量 (secretVariables) 子字段中定义每个环境变量
并为每个值指定一个 Secret。
每当您在作业中指定 Secret 时,都必须将其格式设置为路径
到 Secret 版本:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION。
您可以使用 gcloud CLI、Batch API、Java、Node.js 或 Python 创建定义 Secret 变量的作业。
以下示例介绍了如何创建作业,该作业
为所有可运行对象的
环境(environment 的 taskSpec 子字段)定义和使用 Secret 变量。
gcloud
创建一个 JSON 文件,用于指定作业的配置详细信息,并为一项或多项环境添加
secretVariables子字段。例如,如需创建一个基本脚本作业,该作业在所有可运行对象的环境中使用 Secret 变量,请创建一个包含以下内容的 JSON 文件:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo This is the secret: ${SECRET_VARIABLE_NAME}" } } ], "environment": { "secretVariables": { "{SECRET_VARIABLE_NAME}": "projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION" } } } } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }替换以下内容:
如需创建并运行作业,请使用
gcloud batch jobs submit命令:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE替换以下内容:
JOB_NAME:作业的名称。LOCATION:作业的位置 。JSON_CONFIGURATION_FILE:包含作业配置详细信息的 JSON 文件的路径。
API
向
jobs.create方法
发出 POST 请求,该请求为一项或多项环境指定 secretVariables 子字段。
例如,如需创建一个基本脚本作业,该作业在所有可运行对象的环境中使用 Secret 变量,请发出以下请求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo This is the secret: ${SECRET_VARIABLE_NAME}"
}
}
],
"environment": {
"secretVariables": {
"{SECRET_VARIABLE_NAME}": "projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION"
}
}
}
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
替换以下内容:
Java
Node.js
Python
安全地访问需要 Docker 注册表凭据的容器映像
如需使用私有 Docker 注册表中的容器映像,可运行对象必须指定允许其访问该 Docker 注册表的登录凭据。具体而言,对于将
映像 URI (imageUri) 字段
设置为私有 Docker 注册表中的映像的任何容器可运行对象,您必须使用
用户名 (username) 字段和
密码 (password) 字段指定访问该 Docker 注册表所需的任何
凭据。
您可以通过指定包含信息的现有 Secret 来保护 Docker 注册表的任何敏感凭据,而不是直接定义这些字段。每当您在作业中指定 Secret 时,都必须将其格式设置为路径
到 Secret 版本:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION。
您可以使用 gcloud CLI 或 Batch API 创建使用私有 Docker 注册表中的容器映像的作业。以下示例介绍了如何创建作业,该作业通过直接指定用户名并将密码指定为 Secret 来使用私有 Docker 注册表中的容器映像。
gcloud
创建一个 JSON 文件,用于指定作业的配置详细信息。 对于使用私有 Docker 注册表中的映像的任何容器可运行对象,请在
username和password字段中添加访问该注册表所需的任何凭据。例如,如需创建一个基本容器作业,该作业指定私有 Docker 注册表中的映像,请创建一个包含以下内容的 JSON 文件:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "PRIVATE_IMAGE_URI", "commands": [ "-c", "echo This runnable uses a private image." ], "username": "USERNAME", "password": "PASSWORD" } } ], } } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }替换以下内容:
PRIVATE_IMAGE_URI:私有 Docker 注册表中的容器映像的映像 URI。如果此映像 需要任何其他 容器设置, 您还必须添加这些设置。USERNAME:私有 Docker 注册表的用户名,可以指定为 Secret 或直接指定。PASSWORD:私有 Docker 注册表的密码,可以指定为 Secret(推荐)或直接指定。例如,如需将密码指定为 Secret,请将
PASSWORD设置为以下内容:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION替换以下内容:
如需创建并运行作业,请使用
gcloud batch jobs submit命令:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE替换以下内容:
JOB_NAME:作业的名称。LOCATION:作业的位置 。JSON_CONFIGURATION_FILE:包含作业配置详细信息的 JSON 文件的路径。
API
向
jobs.create 方法发出 POST 请求。
对于使用私有 Docker 注册表中的映像的任何容器可运行对象,请在 username 和 password 字段中添加访问该注册表所需的任何凭据。
例如,如需创建一个基本容器作业,该作业指定私有 Docker 注册表中的映像,请发出以下请求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "PRIVATE_IMAGE_URI",
"commands": [
"-c",
"echo This runnable uses a private image."
],
"username": "USERNAME",
"password": "PASSWORD"
}
}
],
}
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
替换以下内容:
PROJECT_ID:您的项目的 项目 ID。LOCATION:作业的位置 。JOB_NAME:作业的名称。PRIVATE_IMAGE_URI:私有 Docker 注册表中的容器映像的映像 URI。如果此映像 需要任何其他 容器设置, 您还必须添加这些设置。USERNAME:私有 Docker 注册表的用户名,可以指定为 Secret 或直接指定。PASSWORD:私有 Docker 注册表的密码,可以指定为 Secret(推荐)或直接指定。例如,如需将密码指定为 Secret,请将
PASSWORD设置为以下内容:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION替换以下内容:
后续步骤
如果您在创建或运行作业时遇到问题,请参阅问题排查。
详细了解环境变量。
详细了解 Secret Manager。
了解更多作业创建选项。