이 문서에서는 Secret Manager 보안 비밀을 사용하여 Batch 작업에 지정하려는 민감한 정보를 보호하는 방법을 설명합니다.
Secret Manager 보안 비밀은 암호화를 통해 민감한 정보를 보호합니다. Batch 작업에서는 기존 보안 비밀을 하나 이상 지정하여 포함된 민감한 정보를 안전하게 전달할 수 있으며 이를 통해 다음을 수행할 수 있습니다.
민감한 정보가 포함된 커스텀 환경 변수를 안전하게 정의합니다.
작업의 실행 가능 항목이 비공개 컨테이너 이미지에 액세스할 수 있도록 Docker 레지스트리의 로그인 사용자 인증 정보를 안전하게 지정합니다.
시작하기 전에
- Batch를 사용한 적이 없으면 Batch 시작하기를 검토하고 프로젝트 및 사용자 기본 요건을 완료하여 Batch를 사용 설정하세요.
- 보안 비밀을 만들거나 작업에 안전하게 지정할 민감한 정보의 보안 비밀을 식별합니다.
-
작업을 만드는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
-
프로젝트에 대한 일괄 작업 편집자(
roles/batch.jobsEditor
) -
기본적으로 기본 Compute Engine 서비스 계정인 작업의 서비스 계정에 대한 서비스 계정 사용자(
roles/iam.serviceAccountUser
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
-
프로젝트에 대한 일괄 작업 편집자(
-
작업의 서비스 계정에 보안 비밀에 액세스하는 데 필요한 권한이 있는지 확인하려면 관리자에게 작업의 서비스 계정에 보안 비밀에 대한 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
작업 구성 세부정보를 지정하고 환경 하나 이상에
secretVariables
하위 필드를 포함하는 JSON 파일을 만듭니다.예를 들어 모든 실행 가능 항목 환경의 보안 비밀 변수를 사용하는 기본 스크립트 작업을 만들려면 다음 콘텐츠가 포함된 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" } }
다음을 바꿉니다.
SECRET_VARIABLE_NAME
: 보안 비밀 변수의 이름. 규칙에 따라 환경 변수 이름은 대문자로 표시됩니다.변수의 Secret Manager 보안 비밀에서 민감한 정보에 안전하게 액세스하려면 작업의 실행 가능 항목에 이 변수 이름을 지정합니다. 보안 비밀 변수는 보안 비밀 변수를 정의하는 동일한 환경에 있는 모든 실행 가능 항목에 액세스할 수 있습니다.
PROJECT_ID
: 프로젝트의 프로젝트 IDSECRET_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
환경 하나 이상에 secretVariables
하위 필드를 지정하는 jobs.create
메서드에 POST
요청을 보냅니다.
예를 들어 모든 실행 가능 항목 환경에서 보안 비밀 변수를 사용하는 기본 스크립트 작업을 만들려면 다음 요청을 보냅니다.
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"
}
}
다음을 바꿉니다.
PROJECT_ID
: 프로젝트의 프로젝트 IDLOCATION
: 작업의 위치JOB_NAME
: 작업의 이름SECRET_VARIABLE_NAME
: 보안 비밀 변수의 이름. 규칙에 따라 환경 변수 이름은 대문자로 표시됩니다.변수의 Secret Manager 보안 비밀에서 민감한 정보에 안전하게 액세스하려면 작업의 실행 가능 항목에 이 변수 이름을 지정합니다. 보안 비밀 변수는 보안 비밀 변수를 정의하는 동일한 환경에 있는 모든 실행 가능 항목에 액세스할 수 있습니다.
SECRET_NAME
: 기존 Secret Manager 보안 비밀의 이름VERSION
: 작업에 전달할 데이터가 포함된 지정된 보안 비밀의 버전. 버전 번호 또는latest
일 수 있습니다.
Java
Node.js
Python
Docker 레지스트리 사용자 인증 정보가 필요한 컨테이너 이미지에 안전하게 액세스
비공개 Docker 레지스트리의 컨테이너 이미지를 사용하려면 실행 가능 항목에서 해당 Docker 레지스트리에 액세스할 수 있는 로그인 사용자 인증 정보를 지정해야 합니다.
특히 비공개 Docker 레지스트리의 이미지로 설정된 이미지 URI(imageUri
) 필드가 있는 컨테이너 실행 가능 항목의 경우 사용자 이름(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
: 프로젝트의 프로젝트 IDSECRET_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
: 프로젝트의 프로젝트 IDLOCATION
: 작업의 위치JOB_NAME
: 작업의 이름PRIVATE_IMAGE_URI
: 비공개 Docker 레지스트리의 컨테이너 이미지에 대한 이미지 URI. 이 이미지에 다른 컨테이너 설정이 필요한 경우 이 컨테이너도 포함해야 합니다.USERNAME
: 보안 비밀로 또는 직접 지정할 수 있는 비공개 Docker 레지스트리의 사용자 이름PASSWORD
: 보안 비밀(권장)로 또는 직접 지정할 수 있는 비공개 Docker 레지스트리의 비밀번호.예를 들어 비밀번호를 보안 비밀로 지정하려면
PASSWORD
를 다음으로 설정합니다.projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
다음을 바꿉니다.
PROJECT_ID
: 프로젝트의 프로젝트 IDSECRET_NAME
: 기존 Secret Manager 보안 비밀의 이름VERSION
: 작업에 전달할 데이터가 포함된 지정된 보안 비밀의 버전. 버전 번호 또는latest
일 수 있습니다.
다음 단계
작업을 만들거나 실행하는 데 문제가 있는 경우 문제 해결을 참조하기
환경 변수 자세히 알아보기
Secret Manager 자세히 알아보기
작업 만들기 옵션 자세히 알아보기