Batch와 함께 Secret Manager를 사용하여 민감한 정보 보호

이 문서에서는 Secret Manager 보안 비밀을 사용하여 Batch 작업에 지정하려는 민감한 정보를 보호하는 방법을 설명합니다.

Secret Manager 보안 비밀은 암호화를 통해 민감한 정보를 보호합니다. Batch 작업에서는 기존 보안 비밀을 하나 이상 지정하여 포함된 민감한 정보를 안전하게 전달할 수 있으며 이를 통해 다음을 수행할 수 있습니다.

  • 민감한 정보가 포함된 커스텀 환경 변수를 안전하게 정의합니다.

  • 작업의 실행 가능 항목이 비공개 컨테이너 이미지에 액세스할 수 있도록 Docker 레지스트리의 로그인 사용자 인증 정보를 안전하게 지정합니다.

시작하기 전에

민감한 정보를 커스텀 환경 변수에 안전하게 전달

Secret Manager 보안 비밀에서 커스텀 환경 변수로 민감한 정보를 안전하게 전달하려면 환경의 보안 비밀 변수(secretVariables) 하위 필드에 각 환경 변수를 정의하고 각 값에 대해 보안 비밀을 지정해야 합니다. 작업에서 보안 비밀을 지정할 때마다 형식을 보안 비밀 버전의 경로(projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION)로 지정해야 합니다.

gcloud CLI 또는 Batch API를 사용하여 보안 비밀 변수를 정의하는 작업을 만들 수 있습니다. 다음 예시에서는 모든 실행 가능 항목 환경(taskSpecenvironment 하위 필드)의 보안 비밀 변수를 정의하고 사용하는 작업을 만드는 방법을 설명합니다.

gcloud

  1. 작업 구성 세부정보를 지정하고 환경 하나 이상에 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: 프로젝트의 프로젝트 ID입니다.

    • SECRET_NAME: 기존 Secret Manager 보안 비밀의 이름입니다.

    • VERSION: 작업에 전달할 데이터가 포함된 지정된 보안 비밀의 버전입니다. 버전 번호 또는 latest일 수 있습니다.

  2. 작업을 만들고 실행하려면 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: 프로젝트의 프로젝트 ID입니다.

  • LOCATION: 작업의 위치입니다.

  • JOB_NAME: 작업의 이름입니다.

  • SECRET_VARIABLE_NAME: 보안 비밀 변수의 이름입니다. 규칙에 따라 환경 변수 이름은 대문자로 표시됩니다.

    변수의 Secret Manager 보안 비밀에서 민감한 정보에 안전하게 액세스하려면 작업의 실행 가능 항목에 이 변수 이름을 지정합니다. 보안 비밀 변수는 보안 비밀 변수를 정의하는 동일한 환경에 있는 모든 실행 가능 항목에 액세스할 수 있습니다.

  • SECRET_NAME: 기존 Secret Manager 보안 비밀의 이름입니다.

  • VERSION: 작업에 전달할 데이터가 포함된 지정된 보안 비밀의 버전입니다. 버전 번호 또는 latest일 수 있습니다.

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

  1. 작업의 구성 세부정보를 지정하는 JSON 파일을 만듭니다. 비공개 Docker 레지스트리의 이미지를 사용하는 컨테이너 실행 가능 항목의 경우 usernamepassword 필드에 액세스하는 데 필요한 사용자 인증 정보를 포함합니다.

    예를 들어 비공개 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
      

      다음을 바꿉니다.

  2. 작업을 만들고 실행하려면 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 레지스트리의 이미지를 사용하는 컨테이너 실행 가능 항목의 경우 usernamepassword 필드에 액세스하는 데 필요한 사용자 인증 정보를 포함합니다.

예를 들어 비공개 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
    

    다음을 바꿉니다.

다음 단계