本文說明如何使用 Secret Manager 密鑰保護您要為批次工作指定的機密資料。
Secret Manager 機密可透過加密機制保護機密資料。在批次工作中,您可以指定一或多個現有機密,安全地傳遞其中所含的機密資料,以便執行下列操作:
安全地定義含有機密資料的自訂環境變數。
安全地指定 Docker Registry 的登入憑證,讓工作可執行項目存取私人容器映像檔。
事前準備
- 如果您之前未使用過 Batch,請參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
- 請建立機密資料或識別機密資料,以便為工作安全地指定機密資料。
-
如要取得建立工作所需的權限,請要求管理員授予您下列 IAM 角色:
-
專案中的批次工作編輯器 (
roles/batch.jobsEditor
) -
工作服務帳戶的服務帳戶使用者 (
roles/iam.serviceAccountUser
),預設為 Compute Engine 預設服務帳戶
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
-
專案中的批次工作編輯器 (
-
為確保工作服務帳戶具備存取密鑰的必要權限,請管理員授予工作服務帳戶 Secret Manager 密鑰存取者 (
roles/secretmanager.secretAccessor
) 的 IAM 角色。
安全地將機密資料傳遞至自訂環境變數
如要安全地將機密資料從 Secret Manager 機密資料傳遞至自訂環境變數,您必須在環境的機密變數 (secretVariables
) 子欄中定義每個環境變數,並為每個值指定機密資料。在工作中指定密鑰時,必須將其格式設為密鑰版本的路徑:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
。
您可以使用 gcloud CLI、Batch API、Java、Node.js 或 Python 建立定義密鑰變數的工作。以下範例說明如何建立工作,為所有可執行項目的環境 (taskSpec
的 environment
子欄) 定義及使用機密變數。
gcloud
建立 JSON 檔案,指定工作設定詳細資料,並納入一或多個環境的
secretVariables
子欄位。舉例來說,如要建立基本指令碼工作,並在環境中使用所有可執行項目的秘密變數,請建立 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
子欄位。
舉例來說,如要建立基本指令碼工作,並在環境中使用所有可執行項目的密鑰變數,請提出以下要求:
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 登錄所需的任何憑證。
您可以指定含有資訊的現有機密金鑰,而非直接定義這些欄位,藉此保護 Docker 登錄的任何機密憑證。在工作中指定密鑰時,必須將其格式設為密鑰版本的路徑:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
。
您可以使用 gcloud CLI 或 Batch API,建立使用私人 Docker 存放區容器映像檔的工作。以下範例說明如何建立工作,以便直接指定使用者名稱和密碼做為祕密,從私人 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 登錄檔的使用者名稱,可指定為密鑰或直接指定。PASSWORD
:私人 Docker 登錄檔的密碼,可指定為密鑰 (建議) 或直接指定。例如,如要將密碼指定為密鑰,請將
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 登錄檔映像檔的容器可執行項目,請在 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 登錄檔的使用者名稱,可指定為密鑰或直接指定。PASSWORD
:私人 Docker 登錄檔的密碼,可指定為密鑰 (建議) 或直接指定。例如,如要將密碼指定為密鑰,請將
PASSWORD
設為以下內容:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
更改下列內容:
PROJECT_ID
:專案的專案 ID。SECRET_NAME
:現有 Secret Manager 密鑰的名稱。VERSION
:指定機密金鑰的版本,其中包含要傳遞至工作項的資料。可以是版本號碼或latest
。
後續步驟
如果您在建立或執行工作時遇到問題,請參閱疑難排解。
進一步瞭解環境變數。
進一步瞭解 Secret Manager。
進一步瞭解建立工作選項。