Externen Zugriff für einen Job blockieren

In diesem Dokument wird erläutert, wie Sie einen Batchjob konfigurieren, um den externen Zugriff für alle zugehörigen VMs oder bestimmte Container zu blockieren.

Blockieren Sie den externen Zugriff für einen Job, um Netzwerkanforderungen zu erfüllen oder die Sicherheit zu verbessern. Sie müssen den externen Zugriff auf die VMs eines Jobs mithilfe von VMs ohne externe IP-Adressen blockieren, wenn eine der folgenden Bedingungen zutrifft:

Wenn Sie nicht den gesamten direkten externen Zugriff für einen Job blockieren möchten, können Sie den externen Zugriff für alle Container blockieren, die von einem Job ausgeführt werden.

Weitere Informationen zu Netzwerkkonzepten und zur Konfiguration des Netzwerks finden Sie unter Batch-Netzwerk – Übersicht.

Hinweise

  • Wenn Sie Batch noch nie verwendet haben, lesen Sie die Informationen unter Erste Schritte mit Batch. Aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfüllen.
  • Bitten Sie den Administrator, Ihnen die folgenden IAM-Rollen zu gewähren, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen, der den externen Zugriff blockiert:

    Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

    Möglicherweise können Sie die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

  • Wenn Sie den externen Zugriff auf die VMs eines Jobs blockieren, müssen Sie das Netzwerk identifizieren, das Sie für den Job verwenden möchten. Das Netzwerk, das Sie für einen Job angeben, der den externen Zugriff auf seine VMs blockiert, muss die folgenden Anforderungen erfüllen:
    • Das Netzwerk ist ein VPC-Netzwerk (Virtual Private Cloud), das sich im selben Projekt wie der Job befindet oder ein freigegebenes VPC-Netzwerk, das vom Projekt für den Job gehostet oder für dieses freigegeben wird.
    • Das Netzwerk enthält ein Subnetzwerk (Subnetz) an dem Standort, an dem Sie den Job ausführen möchten.
    • Das Netzwerk lässt den für den Job erforderlichen Zugriff zu. Wenn Sie den externen Zugriff auf die VMs eines Jobs blockieren, muss das Netzwerk Cloud NAT oder privaten Google-Zugriff verwenden, um den Zugriff auf die Domains für die APIs und Dienste zuzulassen, die der Job verwendet. Alle Jobs verwenden beispielsweise die Batch API und die Compute Engine API und sehr oft die Cloud Logging API.
    Weitere Informationen finden Sie unter VPC-Netzwerke erstellen und verwalten.

Job erstellen, der den externen Zugriff für alle VMs blockiert

Externen Zugriff auf die VMs eines Jobs blockieren, wenn Sie den Job erstellen. Wenn Sie den externen Zugriff für alle VMs blockieren, auf denen ein Job ausgeführt wird, müssen Sie auch ein Netzwerk und ein Subnetz angeben, die dem Job den Zugriff auf die erforderlichen APIs ermöglichen.

Wenn Sie beim Erstellen dieses Jobs eine VM-Instanzvorlage verwenden möchten, müssen Sie in der VM-Instanzvorlage das Netzwerk angeben und externe IP-Adressen deaktivieren. Andernfalls führen Sie die folgenden Schritte aus, um den externen Zugriff auf die VMs eines Jobs über die gcloud CLI oder die Batch API zu blockieren.

gcloud

Wählen Sie eine der folgenden Optionen aus, um einen Job zu erstellen, der den externen Zugriff über die gcloud CLI blockiert:

Mit gcloud-Flags den externen Zugriff für alle VMs blockieren

So erstellen Sie einen Job und blockieren den externen Zugriff für den Job mit gcloud-Flags:

  1. Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs angegeben sind.

    Um beispielsweise einen einfachen Skriptjob zu erstellen, erstellen Sie eine JSON-Datei mit dem folgenden Inhalt.

    {
      "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. Erstellen Sie den Job mit dem Befehl gcloud batch jobs submit. Wenn Sie den externen Zugriff für alle VMs blockieren möchten, fügen Sie die Flags --no-external-ip-address, --network und --subnetwork hinzu.

    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
    

    Ersetzen Sie Folgendes:

    • JOB_NAME: der Name für diesen Job.
    • LOCATION: der Standort für diesen Job
    • JSON_CONFIGURATION_FILE: der Pfad für die JSON-Datei mit den Konfigurationsdetails des Jobs.
    • HOST_PROJECT_ID: die Projekt-ID des Projekts für das von Ihnen angegebene Netzwerk:
      • Wenn Sie ein freigegebene VPC-Netzwerk verwenden, geben Sie das Hostprojekt an.
      • Geben Sie andernfalls das aktuelle Projekt an.
    • NETWORK: der Name eines VPC-Netzwerks im aktuellen Projekt oder eines freigegebenen VPC-Netzwerks, das vom aktuellen Projekt gehostet wird oder für das aktuelle Projekt freigegeben ist.
    • REGION: die Region, in der sich das Subnetz und die VMs für den Job befinden:
      • Wenn Sie das Feld allowedLocations verwenden, um den zulässigen Standort für die VMs für den Job anzugeben, müssen Sie hier dieselbe Region angeben.
      • Andernfalls muss die Region mit dem Standort übereinstimmen, den Sie für den Job ausgewählt haben (LOCATION).
    • SUBNET: der Name eines Subnetzes, das Teil des VPC-Netzwerk ist und sich in derselben Region wie die VMs für den Job befindet.

Mit JSON-Feldern den externen Zugriff für alle VMs blockieren

Führen Sie die folgenden Schritte aus, um einen Job zu erstellen und den externen Zugriff für alle VMs mithilfe von Feldern in der JSON-Konfigurationsdatei zu blockieren:

  1. Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs angegeben sind. So blockieren Sie den externen Zugriff für alle VMs:

    Wenn Sie beispielsweise einen einfachen Skriptjob erstellen möchten, der den externen Zugriff für alle VMs blockiert, erstellen Sie eine JSON-Datei mit dem folgenden Inhalt.

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

    Ersetzen Sie Folgendes:

    • HOST_PROJECT_ID: die Projekt-ID des Projekts für das von Ihnen angegebene Netzwerk:
      • Wenn Sie ein freigegebene VPC-Netzwerk verwenden, geben Sie das Hostprojekt an.
      • Geben Sie andernfalls das aktuelle Projekt an.
    • NETWORK: der Name eines Netzwerks, das den für diesen Job erforderlichen Zugriff bereitstellt. Das Netzwerk muss entweder ein VPC-Netzwerk im aktuellen Projekt oder ein freigegebenes VPC-Netzwerk sein, das vom aktuellen Projekt gehostet oder für dieses freigegeben wird.
    • REGION: die Region, in der sich das Subnetz und die VMs für den Job befinden:
      • Wenn Sie das Feld allowedLocations verwenden, um den zulässigen Standort für die VMs für den Job anzugeben, müssen Sie hier dieselbe Region angeben.
      • Andernfalls muss die Region mit dem Standort übereinstimmen, den Sie für den Job ausgewählt haben (LOCATION).
    • SUBNET: der Name eines Subnetzes, das Teil des VPC-Netzwerk ist und sich in derselben Region wie die VMs für den Job befindet.
  2. Erstellen Sie den Job mit dem Befehl gcloud batch jobs submit.

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

    Ersetzen Sie Folgendes:

    • JOB_NAME: der gewünschte Name für diesen Job
    • LOCATION: der Standort, den Sie für diesen Job verwenden möchten
    • JSON_CONFIGURATION_FILE: der Pfad für die JSON-Datei mit den Konfigurationsdetails des Jobs.

API

Verwenden Sie zum Erstellen eines Jobs mit der Batch API die Methode jobs.create und geben Sie die Konfigurationsdetails des Jobs an. So blockieren Sie den externen Zugriff für alle VMs:

Wenn Sie beispielsweise einen einfachen Skriptjob erstellen möchten, der den externen Zugriff für alle VMs blockiert, senden Sie die folgende POST-Anfrage:

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

Ersetzen Sie Folgendes:

  • PROJECT_ID: die Projekt-ID Ihres Projekts.
  • LOCATION: der Standort, den Sie für diesen Job benötigen.
  • JOB_NAME: der gewünschte Name für diesen Job
  • HOST_PROJECT_ID: die Projekt-ID des Projekts für das von Ihnen angegebene Netzwerk:
    • Wenn Sie ein freigegebene VPC-Netzwerk verwenden, geben Sie das Hostprojekt an.
    • Geben Sie andernfalls das aktuelle Projekt an (PROJECT_ID).
  • NETWORK: der Name eines Netzwerks, das den für diesen Job erforderlichen Zugriff bereitstellt. Das Netzwerk muss entweder ein VPC-Netzwerk im aktuellen Projekt oder ein freigegebenes VPC-Netzwerk sein, das vom aktuellen Projekt gehostet oder für dieses freigegeben wird.
  • REGION: die Region, in der sich das Subnetz und die VMs für den Job befinden:
    • Wenn Sie das Feld allowedLocations verwenden, um den zulässigen Standort für die VMs für den Job anzugeben, müssen Sie hier dieselbe Region angeben.
    • Andernfalls muss die Region mit dem Standort übereinstimmen, den Sie für den Job ausgewählt haben (LOCATION).
  • SUBNET: der Name eines Subnetzes, das Teil des VPC-Netzwerk ist und sich in derselben Region wie die VMs für den Job befindet.

Job erstellen, der den externen Zugriff für einen oder mehrere Container blockiert

Blockieren Sie beim Erstellen des Jobs den externen Zugriff auf die Container eines Jobs.

Sie können den externen Zugriff auf jeden Jobcontainer über die gcloud CLI oder die Batch API blockieren.

gcloud

So erstellen Sie einen Job, der den externen Zugriff für einen oder mehrere Container über die gcloud CLI blockiert:

  1. Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs angegeben sind. Legen Sie für jeden Container im Job, den Sie einschränken möchten, das Feld blockExternalNetwork auf true fest.

    Wenn Sie beispielsweise einen einfachen Containerjob erstellen möchten, der den externen Zugriff für den Container blockiert, erstellen Sie eine JSON-Datei mit dem folgenden Inhalt.

    {
      "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. Erstellen Sie den Job mit dem Befehl gcloud batch jobs submit.

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

    Ersetzen Sie Folgendes:

    • JOB_NAME: der gewünschte Name für diesen Job
    • LOCATION: der Standort, den Sie für diesen Job verwenden möchten
    • JSON_CONFIGURATION_FILE: der Pfad für die JSON-Datei mit den Konfigurationsdetails des Jobs.

API

Verwenden Sie zum Erstellen eines Jobs mit der Batch API die Methode jobs.create und geben Sie die Konfigurationsdetails des Jobs an. Legen Sie für jeden Container im Job, den Sie einschränken möchten, das Feld blockExternalNetwork auf true fest.

Wenn Sie beispielsweise einen einfachen Containerjob erstellen möchten, der den externen Zugriff für den Container blockiert, senden Sie die folgende POST-Anfrage:

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

Ersetzen Sie Folgendes:

  • PROJECT_ID: die Projekt-ID Ihres Projekts.
  • LOCATION: der Standort, den Sie für diesen Job benötigen.
  • JOB_NAME: der gewünschte Name für diesen Job

Nächste Schritte