Memblokir akses eksternal untuk tugas

Dokumen ini menjelaskan cara mengonfigurasi tugas Batch untuk memblokir akses eksternal bagi semua VM atau container tertentu.

Blokir akses eksternal untuk tugas guna memenuhi persyaratan jaringan atau meningkatkan keamanan. Anda harus memblokir akses eksternal untuk VM tugas dengan menggunakan VM tanpa alamat IP eksternal jika salah satu hal berikut berlaku:

Atau, jika tidak ingin memblokir semua akses eksternal langsung untuk tugas, Anda dapat memblokir akses eksternal untuk container apa pun yang dijalankan tugas.

Untuk mengetahui informasi selengkapnya tentang konsep jaringan dan kapan harus mengonfigurasi jaringan, lihat Ringkasan jaringan Batch.

Sebelum memulai

  1. Jika belum pernah menggunakan Batch, baca Mulai menggunakan Batch dan aktifkan Batch dengan menyelesaikan prasyarat untuk project dan pengguna.
  2. Untuk mendapatkan izin yang Anda perlukan untuk membuat tugas yang memblokir akses eksternal, minta administrator untuk memberi Anda peran IAM berikut:

    Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

    Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

  3. Jika Anda memblokir akses eksternal untuk VM tugas, Anda harus mengidentifikasi jaringan yang ingin digunakan untuk tugas tersebut. Jaringan yang Anda tentukan untuk tugas yang memblokir akses eksternal untuk VM-nya harus memenuhi persyaratan berikut:
    • Jaringan tersebut adalah jaringan Virtual Private Cloud (VPC) yang berada di project yang sama dengan tugas atau merupakan jaringan VPC Bersama yang dihosting oleh atau dibagikan dengan project untuk tugas tersebut.
    • Jaringan tersebut menyertakan subnetwork (subnet) di lokasi tempat Anda ingin menjalankan tugas.
    • Jaringan tersebut mengizinkan akses apa pun yang diperlukan untuk tugas Anda. Jika Anda memblokir akses eksternal untuk VM tugas, jaringan tersebut harus menggunakan Cloud NAT atau Akses Google Pribadi untuk mengizinkan akses ke domain untuk API dan layanan yang digunakan tugas Anda. Misalnya, semua tugas menggunakan Batch dan Compute Engine API dan sangat sering menggunakan Cloud Logging API.
    Untuk mengetahui informasi selengkapnya, lihat Membuat dan mengelola jaringan VPC.

Membuat tugas yang memblokir akses eksternal untuk semua VM

Blokir akses eksternal untuk VM tugas saat Anda membuat tugas. Saat Anda memblokir akses eksternal untuk semua VM yang dijalankan tugas, Anda juga harus menentukan jaringan dan subnet yang memungkinkan tugas mengakses API yang diperlukan.

Jika ingin menggunakan template instance VM saat membuat tugas ini, Anda harus menentukan jaringan dan menonaktifkan alamat IP eksternal di template instance VM. Jika tidak, gunakan langkah-langkah berikut untuk memblokir akses eksternal bagi VM tugas menggunakan gcloud CLI atau Batch API.

gcloud

Untuk membuat tugas yang memblokir akses eksternal menggunakan gcloud CLI, pilih salah satu opsi berikut:

Menggunakan flag gcloud untuk memblokir akses eksternal bagi semua VM

Untuk membuat tugas dan menggunakan flag gcloud untuk memblokir akses eksternal bagi tugas, selesaikan langkah-langkah berikut:

  1. Buat file JSON yang menentukan detail konfigurasi tugas Anda.

    Misalnya, untuk membuat tugas skrip dasar, buat file JSON dengan konten berikut.

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    
  2. Buat tugas menggunakan perintah gcloud batch jobs submit. Untuk memblokir akses eksternal bagi semua VM, sertakan flag --no-external-ip-address, --network, dan --subnetwork.

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE \
        --no-external-ip-address \
        --network projects/HOST_PROJECT_ID/global/networks/NETWORK \
        --subnetwork projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
    

    Ganti kode berikut:

    • JOB_NAME: nama untuk tugas ini.
    • LOCATION: lokasi untuk tugas ini.
    • JSON_CONFIGURATION_FILE: jalur untuk file JSON dengan detail konfigurasi tugas.
    • HOST_PROJECT_ID: ID project project untuk jaringan yang Anda tentukan:
      • Jika Anda menggunakan jaringan VPC Bersama, tentukan project host.
      • Jika tidak, tentukan project saat ini.
    • NETWORK: nama jaringan VPC di project saat ini atau jaringan VPC Bersama yang dihosting oleh atau dibagikan dengan project saat ini.
    • REGION: wilayah tempat subnet dan VM untuk tugas berada:
      • Jika Anda menyertakan allowedLocations kolom untuk menentukan lokasi yang diizinkan untuk VM untuk tugas tersebut, Anda harus menentukan region yang sama di sini.
      • Jika tidak, region harus sama dengan lokasi yang Anda pilih untuk tugas (LOCATION).
    • SUBNET: nama subnet yang merupakan bagian dari jaringan VPC dan berada di region yang sama dengan VM untuk tugas tersebut.

Menggunakan kolom JSON untuk memblokir akses eksternal bagi semua VM

Untuk membuat tugas dan menggunakan kolom dalam file konfigurasi JSON untuk memblokir akses eksternal bagi semua VM, selesaikan langkah-langkah berikut:

  1. Buat file JSON yang menentukan detail konfigurasi tugas Anda. Untuk memblokir akses eksternal bagi semua VM, lakukan hal berikut:

    Misalnya, untuk membuat tugas skrip dasar yang memblokir akses eksternal bagi semua VM, buat file JSON dengan konten berikut.

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "allocationPolicy": {
        "network": {
          "networkInterfaces": [
            {
              "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK",
              "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET",
              "noExternalIpAddress": true
            }
          ]
        }
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    Ganti kode berikut:

    • HOST_PROJECT_ID: ID project project untuk jaringan yang Anda tentukan:
      • Jika Anda menggunakan jaringan VPC Bersama, tentukan project host.
      • Jika tidak, tentukan project saat ini.
    • NETWORK: nama jaringan yang menyediakan akses yang diperlukan untuk tugas ini. Jaringan tersebut harus berupa jaringan VPC di project saat ini atau jaringan VPC Bersama yang dihosting oleh atau dibagikan dengan project saat ini.
    • REGION: wilayah tempat subnet dan VM untuk tugas berada:
      • Jika Anda menyertakan allowedLocations kolom untuk menentukan lokasi yang diizinkan untuk VM untuk tugas tersebut, Anda harus menentukan region yang sama di sini.
      • Jika tidak, region harus sama dengan lokasi yang Anda pilih untuk tugas (LOCATION).
    • SUBNET: nama subnet yang merupakan bagian dari jaringan VPC dan berada di region yang sama dengan VM untuk tugas tersebut.
  2. Buat tugas menggunakan perintah gcloud batch jobs submit.

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

    Ganti kode berikut:

API

Untuk membuat tugas menggunakan Batch API, gunakan metode jobs.create dan tentukan detail konfigurasi tugas Anda. Untuk memblokir akses eksternal bagi semua VM, lakukan hal berikut:

Misalnya, untuk membuat tugas skrip dasar yang memblokir akses eksternal bagi semua VM, buat permintaan POST berikut:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy": {
    "network": {
      "networkInterfaces": [
        {
          "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK",
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET",
          "noExternalIpAddress": true
        }
      ]
    }
  },
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

Ganti kode berikut:

  • PROJECT_ID: the project ID project Anda.
  • LOCATION: lokasi yang Anda inginkan untuk tugas ini.
  • JOB_NAME: nama yang Anda inginkan untuk tugas ini.
  • HOST_PROJECT_ID: ID project project untuk jaringan yang Anda tentukan:
    • Jika Anda menggunakan jaringan VPC Bersama, tentukan project host.
    • Jika tidak, tentukan project saat ini (PROJECT_ID).
  • NETWORK: nama jaringan yang menyediakan akses yang diperlukan untuk tugas ini. Jaringan tersebut harus berupa jaringan VPC di project saat ini atau jaringan VPC Bersama yang dihosting oleh atau dibagikan dengan project saat ini.
  • REGION: wilayah tempat subnet dan VM untuk tugas berada:
    • Jika Anda menyertakan allowedLocations kolom untuk menentukan lokasi yang diizinkan untuk VM untuk tugas tersebut, Anda harus menentukan region yang sama di sini.
    • Jika tidak, region harus sama dengan lokasi yang Anda pilih untuk tugas (LOCATION).
  • SUBNET: nama subnet yang merupakan bagian dari jaringan VPC dan berada di region yang sama dengan VM untuk tugas tersebut.

Membuat tugas yang memblokir akses eksternal untuk satu atau beberapa container

Blokir akses eksternal untuk container tugas mana pun saat Anda membuat tugas.

Anda dapat memblokir akses eksternal untuk container tugas mana pun menggunakan gcloud CLI atau Batch API.

gcloud

Untuk membuat tugas yang memblokir akses eksternal bagi satu atau beberapa container menggunakan gcloud CLI, selesaikan langkah-langkah berikut:

  1. Buat file JSON yang menentukan detail konfigurasi tugas Anda. Untuk setiap container dalam tugas yang ingin Anda batasi, tetapkan kolom blockExternalNetwork ke true.

    Misalnya, untuk membuat tugas container dasar yang memblokir akses eksternal bagi container, buat file JSON dengan konten berikut.

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "container": {
                  "imageUri": "gcr.io/google-containers/busybox",
                  "entrypoint": "/bin/sh",
                  "commands": [
                    "-c",
                    "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
                  ],
                  "blockExternalNetwork": true
                }
              }
            ]
          },
          "taskCount": 4,
          "parallelism": 2
        }
      ],
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    
  2. Buat tugas menggunakan perintah gcloud batch jobs submit.

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

    Ganti kode berikut:

API

Untuk membuat tugas menggunakan Batch API, gunakan metode jobs.create dan tentukan detail konfigurasi tugas Anda. Untuk setiap container dalam tugas yang ingin Anda batasi, tetapkan kolom blockExternalNetwork ke true.

Misalnya, untuk membuat tugas container dasar yang memblokir akses eksternal bagi container, buat permintaan POST berikut:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "container": {
              "imageUri": "gcr.io/google-containers/busybox",
              "entrypoint": "/bin/sh",
              "commands": [
                "-c",
                "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
              ],
              "blockExternalNetwork": true
            }
          }
        ]
      },
      "taskCount": 4,
      "parallelism": 2
    }
  ],
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

Ganti kode berikut:

  • PROJECT_ID: the project ID project Anda.
  • LOCATION: lokasi yang Anda inginkan untuk tugas ini.
  • JOB_NAME: nama yang Anda inginkan untuk tugas ini.

Langkah berikutnya