Melindungi data sensitif menggunakan Secret Manager dengan Batch

Dokumen ini menjelaskan cara melindungi data sensitif yang ingin Anda tentukan untuk tugas Batch menggunakan secret Secret Manager.

Rahasia Secret Manager melindungi data sensitif melalui enkripsi. Dalam tugas Batch, Anda dapat menentukan satu atau beberapa secret yang ada untuk meneruskan data sensitif yang ada di dalamnya dengan aman, yang dapat Anda gunakan untuk melakukan hal berikut:

Sebelum memulai

Meneruskan data sensitif ke variabel lingkungan kustom dengan aman

Untuk meneruskan data sensitif dengan aman dari secret Secret Manager ke variabel lingkungan kustom, Anda harus menentukan setiap variabel lingkungan di subkolom variabel secret (secretVariables) untuk lingkungan dan menentukan secret untuk setiap nilai. Setiap kali menetapkan secret dalam tugas, Anda harus memformatnya sebagai jalur ke versi secret: projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION.

Anda dapat membuat tugas yang menetapkan variabel secret menggunakan gcloud CLI atau Batch API. Contoh berikut menjelaskan cara membuat tugas yang menentukan dan menggunakan variabel secret untuk lingkungan semua runnable (subkolom environment dari taskSpec).

gcloud

  1. Buat file JSON yang menentukan detail konfigurasi tugas dan sertakan subkolom secretVariables untuk satu atau beberapa lingkungan.

    Misalnya, untuk membuat tugas skrip dasar yang menggunakan variabel rahasia di lingkungan untuk semua runnable, buat file JSON dengan konten berikut:

    {
      "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"
      }
    }
    

    Ganti kode berikut:

    • SECRET_VARIABLE_NAME: nama variabel secret. Berdasarkan konvensi, nama variabel lingkungan ditulis dengan huruf besar.

      Untuk mengakses data sensitif dengan aman dari secret Secret Manager variabel, tentukan nama variabel ini dalam runnable tugas ini. Variabel secret dapat diakses oleh semua runnable yang berada di lingkungan yang sama tempat Anda menentukan variabel secret.

    • PROJECT_ID: project ID dari project Anda.

    • SECRET_NAME: nama rahasia Secret Manager yang ada.

    • VERSION: versi dari secret yang ditentukan yang berisi data yang ingin Anda teruskan ke tugas. Nomor ini dapat berupa nomor versi atau latest.

  2. Untuk membuat dan menjalankan tugas, gunakan perintah gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Ganti kode berikut:

    • JOB_NAME: nama tugas.

    • LOCATION: lokasi tugas.

    • JSON_CONFIGURATION_FILE: jalur untuk file JSON dengan detail konfigurasi tugas.

API

Buat permintaan POST ke metode jobs.create yang menentukan subkolom secretVariables untuk satu atau beberapa lingkungan.

Misalnya, untuk membuat tugas skrip dasar yang menggunakan variabel rahasia di lingkungan untuk semua runnable, buat permintaan berikut:

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"
  }
}

Ganti kode berikut:

  • PROJECT_ID: project ID dari project Anda.

  • LOCATION: lokasi tugas.

  • JOB_NAME: nama tugas.

  • SECRET_VARIABLE_NAME: nama variabel secret. Berdasarkan konvensi, nama variabel lingkungan ditulis dengan huruf besar.

    Untuk mengakses data sensitif dengan aman dari secret Secret Manager variabel, tentukan nama variabel ini dalam runnable tugas ini. Variabel secret dapat diakses oleh semua runnable yang berada di lingkungan yang sama tempat Anda menentukan variabel secret.

  • SECRET_NAME: nama rahasia Secret Manager yang ada.

  • VERSION: versi dari secret yang ditentukan yang berisi data yang ingin Anda teruskan ke tugas. Nomor ini dapat berupa nomor versi atau latest.

Mengakses image container dengan aman yang memerlukan kredensial registry Docker

Untuk menggunakan image container dari registry Docker pribadi, runnable harus menentukan kredensial login agar dapat mengakses registry Docker tersebut. Khususnya, untuk setiap container yang dapat dijalankan dengan kolom URI gambar (imageUri) yang ditetapkan ke image dari registry Docker pribadi, Anda harus menentukan kredensial yang diperlukan untuk mengakses registry Docker tersebut menggunakan kolom nama pengguna (username) dan kolom sandi (password).

Anda dapat melindungi kredensial sensitif apa pun untuk registry Docker dengan menentukan secret yang ada dan berisi informasi tersebut, bukan menentukan kolom ini secara langsung. Setiap kali menetapkan secret dalam tugas, Anda harus memformatnya sebagai jalur ke versi secret: projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION.

Anda dapat membuat tugas yang menggunakan image container dari registry Docker pribadi menggunakan gcloud CLI atau Batch API. Contoh berikut menjelaskan cara membuat tugas yang menggunakan image container dari registry Docker pribadi dengan menentukan nama pengguna dan sandi sebagai rahasia secara langsung.

gcloud

  1. Buat file JSON yang menentukan detail konfigurasi tugas. Untuk setiap container yang dapat dijalankan yang menggunakan image dari registry Docker pribadi, sertakan kredensial yang diperlukan untuk mengaksesnya di kolom username dan password.

    Misalnya, untuk membuat tugas container dasar yang menentukan image dari registry Docker pribadi, buat file JSON dengan konten berikut:

    {
      "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"
      }
    }
    

    Ganti kode berikut:

    • PRIVATE_IMAGE_URI: URI image untuk image container dari registry Docker pribadi. Jika image ini memerlukan setelan penampung lain, Anda juga harus menyertakannya.

    • USERNAME: nama pengguna untuk registry Docker pribadi, yang dapat ditentukan sebagai rahasia atau secara langsung.

    • PASSWORD: sandi untuk registry Docker pribadi, yang dapat ditentukan sebagai rahasia (direkomendasikan) atau secara langsung.

      Misalnya, untuk menetapkan sandi sebagai rahasia, tetapkan PASSWORD ke kode berikut:

      projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
      

      Ganti kode berikut:

      • PROJECT_ID: project ID dari project Anda.

      • SECRET_NAME: nama rahasia Secret Manager yang ada.

      • VERSION: versi dari secret yang ditentukan yang berisi data yang ingin Anda teruskan ke tugas. Nomor ini dapat berupa nomor versi atau latest.

  2. Untuk membuat dan menjalankan tugas, gunakan perintah gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Ganti kode berikut:

    • JOB_NAME: nama tugas.

    • LOCATION: lokasi tugas.

    • JSON_CONFIGURATION_FILE: jalur untuk file JSON dengan detail konfigurasi tugas.

API

Buat permintaan POST ke metode jobs.create. Untuk setiap container yang dapat dijalankan yang menggunakan image dari registry Docker pribadi, sertakan kredensial yang diperlukan untuk mengaksesnya di kolom username dan password.

Misalnya, untuk membuat tugas container dasar yang menentukan image dari registry Docker pribadi, buat permintaan berikut:

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"
  }
}

Ganti kode berikut:

  • PROJECT_ID: project ID dari project Anda.

  • LOCATION: lokasi tugas.

  • JOB_NAME: nama tugas.

  • PRIVATE_IMAGE_URI: URI image untuk image container dari registry Docker pribadi. Jika image ini memerlukan setelan penampung lain, Anda juga harus menyertakannya.

  • USERNAME: nama pengguna untuk registry Docker pribadi, yang dapat ditentukan sebagai rahasia atau secara langsung.

  • PASSWORD: sandi untuk registry Docker pribadi, yang dapat ditentukan sebagai rahasia (direkomendasikan) atau secara langsung.

    Misalnya, untuk menetapkan sandi sebagai rahasia, tetapkan PASSWORD ke kode berikut:

    projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
    

    Ganti kode berikut:

    • PROJECT_ID: project ID dari project Anda.

    • SECRET_NAME: nama rahasia Secret Manager yang ada.

    • VERSION: versi dari secret yang ditentukan yang berisi data yang ingin Anda teruskan ke tugas. Nomor ini dapat berupa nomor versi atau latest.

Langkah selanjutnya