In diesem Dokument wird erläutert, wie Sie einen Batch-Job so konfigurieren, dass der externe Zugriff für alle VMs oder bestimmte Container blockiert wird.
Blockieren Sie den externen Zugriff für einen Job, um die Netzwerkanforderungen zu erfüllen oder die Sicherheit zu verbessern. Sie müssen den externen Zugriff für die VMs eines Jobs blockieren, indem Sie VMs ohne externe IP-Adressen verwenden, wenn eine der folgenden Bedingungen erfüllt ist:
- Ihr Projekt ist durch die Organisationsrichtlinien-Einschränkung
compute.vmExternalIpAccesseingeschränkt. Das für den Job angegebene Netzwerk verwendet den privaten Google-Zugriff, um eine private Verbindung zu Google APIs und ‑Diensten zu konfigurieren. Privater Google-Zugriff hat keine Auswirkungen auf VMs mit externen IP-Adressen.
Wenn das für den Job angegebene Netzwerk den privaten Google-Zugriff mit VPC Service Controls für Batch verwendet, lesen Sie VPC Service Controls und Batch verwenden.
Wenn Sie nicht den gesamten direkten externen Zugriff für einen Job blockieren möchten, können Sie alternativ den externen Zugriff für alle Container blockieren, die von einem Job ausgeführt werden.
Weitere Informationen zu Netzwerkkonzepten und dazu, wann Sie die Netzwerkkonfiguration vornehmen sollten, finden Sie unter Batch-Netzwerkübersicht.
Hinweis
- Wenn Sie Batch noch nicht verwendet haben, lesen Sie Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzererfüllen.
-
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen, der den externen Zugriff blockiert:
- Batch-Job-Bearbeiter (
roles/batch.jobsEditor) für das Projekt - Dienstkontonutzer (
roles/iam.serviceAccountUser) für das Dienstkonto des Jobs. Standardmäßig ist das das Standarddienstkonto für Compute Engine. -
So ermitteln Sie das Netzwerk und das Subnetz für einen Job:
Compute-Netzwerkbetrachter (
roles/compute.networkViewer) für das Projekt
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
- Batch-Job-Bearbeiter (
-
Wenn Sie den externen Zugriff für die VMs eines Jobs blockieren, müssen Sie das Netzwerk angeben, das Sie für den Job verwenden möchten. Das für einen Job angegebene Netzwerk, das den externen Zugriff für 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 gemeinsam genutztes VPC-Netzwerk , das vom Projekt für den Job gehostet oder für das Projekt freigegeben wird.
- Das Netzwerk enthält ein Subnetzwerk (Subnetz) am Standort, an dem Sie den Job ausführen möchten.
- Das Netzwerk ermöglicht den für Ihren Job erforderlichen Zugriff. Wenn Sie den externen Zugriff für die VMs eines Jobs blockieren, muss das Netzwerk Cloud NAT oder den privaten Google-Zugriff verwenden, um den Zugriff auf die Domains für die APIs und Dienste zu ermöglichen, die von Ihrem Job verwendet werden. Alle Jobs verwenden beispielsweise die Batch API und die Compute Engine API und sehr oft die Cloud Logging API.
Job erstellen, der den externen Zugriff für alle VMs blockiert
Blockieren Sie den externen Zugriff für die VMs eines Jobs, 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 das Netzwerk angeben und externe IP-Adressen in der VM-Instanzvorlage deaktivieren. Andernfalls führen Sie die folgenden Schritte aus, um den externen Zugriff für die VMs eines Jobs mit der gcloud CLI oder der Batch API zu blockieren.
gcloud
Wählen Sie eine der folgenden Optionen aus, um einen Job zu erstellen, der den externen Zugriff mit der gcloud CLI blockiert:
- gcloud-Flags verwenden, um den externen Zugriff für alle VMs zu blockieren
- JSON-Felder verwenden, um den externen Zugriff für alle VMs zu blockieren
gcloud-Flags verwenden, um den externen Zugriff für alle VMs zu blockieren
So erstellen Sie einen Job und verwenden gcloud-Flags, um den externen Zugriff für den Job zu blockieren:
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails Ihres Jobs angegeben sind.
Wenn Sie beispielsweise einen einfachen Skriptjob erstellen möchten, 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" } }Erstellen Sie den Job mit dem
gcloud batch jobs submitBefehl. Wenn Sie den externen Zugriff für alle VMs blockieren möchten, fügen Sie die Flags--no-external-ip-address,--networkund--subnetworkein.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/SUBNETErsetzen Sie Folgendes:
JOB_NAME: der Name für diesen Job.LOCATION: der Standort für diesen Job.JSON_CONFIGURATION_FILE: der Pfad zur JSON-Datei mit den Konfigurationsdetails des Jobs.HOST_PROJECT_ID: die Projekt-ID des Projekts für das 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 gemeinsam genutzten VPC-Netzwerks, das vom aktuellen Projekt gehostet oder für das aktuelle Projekt freigegeben wird.REGION: die Region, in der sich das Subnetz und die VMs für den Job befinden:- Wenn Sie das
allowedLocationsFeld 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 auswählen
(
LOCATION).
- Wenn Sie das
SUBNET: der Name eines Subnetzes, das Teil des VPC-Netzwerk ist und sich in derselben Region wie die VMs für den Job befindet.
JSON-Felder verwenden, um den externen Zugriff für alle VMs zu blockieren
So erstellen Sie einen Job und verwenden Felder in der JSON-Konfigurationsdatei, um den externen Zugriff für alle VMs zu blockieren:
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails Ihres Jobs angegeben sind. So blockieren Sie den externen Zugriff für alle VMs:
Setzen Sie das
noExternalIpAddressFeld auftrue.Geben Sie das Netzwerk für den Job in den
networkundsubnetworkFeldern an.
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 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 bietet. Das Netzwerk muss entweder ein VPC-Netzwerk im aktuellen Projekt oder ein gemeinsam genutztes VPC-Netzwerk sein, das vom aktuellen Projekt gehostet oder für das aktuelle Projekt freigegeben wird.REGION: die Region, in der sich das Subnetz und die VMs für den Job befinden:- Wenn Sie das
allowedLocationsFeld 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 auswählen
(
LOCATION).
- Wenn Sie das
SUBNET: der Name eines Subnetzes, das Teil des VPC-Netzwerk ist und sich in derselben Region wie die VMs für den Job befindet.
Erstellen Sie den Job mit dem
gcloud batch jobs submitBefehl.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILEErsetzen Sie Folgendes:
JOB_NAME: der gewünschte Name für diesen Job.LOCATION: der gewünschte Standort für diesen Job.JSON_CONFIGURATION_FILE: der Pfad zur JSON-Datei mit den Konfigurationsdetails des Jobs.
API
Wenn Sie einen Job mit der Batch API erstellen möchten, verwenden Sie die
jobs.create Methode
und geben Sie die Konfigurationsdetails des Jobs an.
So blockieren Sie den externen Zugriff für alle VMs:
Setzen Sie das
noExternalIpAddressFeld auftrue.Geben Sie das Netzwerk für den Job in den
networkundsubnetworkFeldern an.
Wenn Sie beispielsweise einen einfachen Skriptjob erstellen möchten, der den externen Zugriff für alle VMs blockiert, stellen 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 gewünschte Standort für diesen Job.JOB_NAME: der gewünschte Name für diesen Job.HOST_PROJECT_ID: die Projekt-ID des Projekts für das angegebene Netzwerk:- Wenn Sie ein freigegebene VPC-Netzwerk verwenden, geben Sie das Hostprojekt an.
- Geben Sie andernfalls das aktuelle Projekt (
PROJECT_ID) an.
NETWORK: der Name eines Netzwerks, das den für diesen Job erforderlichen Zugriff bietet. Das Netzwerk muss entweder ein VPC-Netzwerk im aktuellen Projekt oder ein gemeinsam genutztes VPC-Netzwerk sein, das vom aktuellen Projekt gehostet oder für das aktuelle Projekt freigegeben wird.REGION: die Region, in der sich das Subnetz und die VMs für den Job befinden:- Wenn Sie das
allowedLocationsFeld 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 auswählen
(
LOCATION).
- Wenn Sie das
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 den externen Zugriff für alle Container eines Jobs, wenn Sie den Job erstellen.
Sie können den externen Zugriff für alle Container eines Jobs mit der gcloud CLI oder der Batch API blockieren.
gcloud
So erstellen Sie einen Job, der den externen Zugriff für einen oder mehrere Container mit der gcloud CLI blockiert:
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails Ihres Jobs angegeben sind. Setzen Sie für jeden Container im Job, den Sie einschränken möchten, das
blockExternalNetworkFeld auftrue.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" } }Erstellen Sie den Job mit dem
gcloud batch jobs submitBefehl.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILEErsetzen Sie Folgendes:
JOB_NAME: der gewünschte Name für diesen Job.LOCATION: der gewünschte Standort für diesen Job.JSON_CONFIGURATION_FILE: der Pfad zur JSON-Datei mit den Konfigurationsdetails des Jobs.
API
Wenn Sie einen Job mit der Batch API erstellen möchten, verwenden Sie die
jobs.create Methode
und geben Sie die Konfigurationsdetails des Jobs an.
Setzen Sie für jeden Container im Job, den Sie einschränken möchten, das
blockExternalNetwork Feld
auf true.
Wenn Sie beispielsweise einen einfachen Containerjob erstellen möchten, der den externen Zugriff für den Container blockiert, stellen 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 gewünschte Standort für diesen Job.JOB_NAME: der gewünschte Name für diesen Job.
Nächste Schritte
- Wenn Sie Probleme beim Erstellen oder Ausführen eines Jobs haben, lesen Sie den Abschnitt zu Fehlerbehebung.
- Weitere Informationen zum Netzwerk.
- Weitere Informationen zum Erstellen eines Jobs.
- Jobs und Aufgaben ansehen