本文档介绍了如何保护您想 为批处理作业指定默认值。
Secret Manager 密钥 通过加密保护敏感数据 在批处理作业中,您可以指定一个或多个现有 Secret,以安全地传递其中包含的敏感数据,这些数据可用于执行以下操作:
安全地定义 自定义环境变量 包含敏感数据的内容
安全地指定 Docker 注册表的登录凭据,以便作业的可运行实例访问其私有容器映像。
准备工作
- 如果您以前没有使用过 Batch,请参阅 Batch 使用入门 并通过填写 针对项目和用户的前提条件。
- 创建 Secret 或识别密钥 为作业安全指定的敏感数据。
-
如需获得创建作业所需的权限,请让管理员向您授予以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
Service Account User (
roles/iam.serviceAccountUser
) 服务账号用户 针对作业的服务账号,该账号默认为默认 Compute Engine 服务账号
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
项目的 Batch Job Editor (
-
为了确保作业的服务账号具备 拥有访问 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 或 Python 创建用于定义 Secret 变量的作业。以下示例说明了如何创建
定义并使用 Secret 变量,
所有可运行对象的环境(taskSpec
的 environment
子字段)。
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
请发送 POST
请求至
jobs.create
方法
,为一个或多个环境指定 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
Python
安全地访问需要 Docker 注册表凭据的容器映像
要使用私有 Docker 注册表中的容器映像,必须有一个可运行容器
指定允许其访问该 Docker 注册表的登录凭据。
具体而言,对于可通过将映像 URI (imageUri
) 字段设置为私有 Docker 注册库中的映像来运行的任何容器,您必须使用用户名 (username
) 字段和密码 (password
) 字段 指定访问该 Docker 注册库所需的所有凭据。
您可以通过指定
包含相关信息的现有密钥,而不是定义这些密钥,
字段。
在作业中指定 Secret 时,必须将其格式设置为路径
密钥版本:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
。
您可以使用 gcloud CLI 或 Batch API 创建使用专用 Docker 注册库中的容器映像的作业。以下示例说明了如何创建使用容器的作业 从私有 Docker 注册表导入映像 将密码设为 Secret
gcloud
创建一个 JSON 文件,用于指定作业的配置详细信息。 对于任何使用私有容器映像的 Docker Registry,添加访问它所需的任何凭据 (位于
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 注册表获取容器映像如果此映像需要任何其他容器设置,您也必须添加这些设置。USERNAME
: 私有 Docker 注册表的用户名,该用户名可以指定 作为 Secret 或直接。PASSWORD
:私有 Docker 注册表的密码,可以作为 Secret(推荐)或直接指定。例如,要将密码指定为 Secret,可将密码设置为
PASSWORD
更改为以下内容:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
替换以下内容:
PROJECT_ID
:您的项目 ID。SECRET_NAME
: 现有的 Secret Manager 密钥。VERSION
: 版本 包含您想要的数据 传递给作业。 这可以是版本号或latest
。
如需创建并运行作业,请使用
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 Registry,添加访问它所需的任何凭据
(位于 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 注册表获取容器映像如果这张图片 需要进行任何其他容器设置, 您必须也添加这些代码USERNAME
: 私有 Docker 注册表的用户名,该用户名可以指定 作为 Secret 或直接。PASSWORD
:私有 Docker 注册表的密码,可以作为 Secret(推荐)或直接指定。例如,要将密码指定为 Secret,可将密码设置为
PASSWORD
更改为以下内容:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
替换以下内容:
PROJECT_ID
:您的项目 ID。SECRET_NAME
:现有 Secret Manager Secret 的名称。VERSION
:指定 Secret 的版本,其中包含要传递给作业的数据。这可以是版本号或latest
。
后续步骤
如果您在创建或运行作业时遇到问题,请参阅问题排查。
详细了解环境变量。
详细了解 Secret Manager。
详细了解作业创建选项。