In diesem Dokument wird beschrieben, wie Sie einen Batch-Job so konfigurieren, dass der externe Zugriff für alle seine VMs oder bestimmte Container blockiert wird.
Blockieren Sie den externen Zugriff auf einen Job, um 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 zutrifft:
- Ihr Projekt ist durch die Einschränkung der Organisationsrichtlinie
compute.vmExternalIpAccess
eingeschränkt. Das Netzwerk, das Sie für den Job angeben, verwendet privaten Google-Zugriff, um private Verbindungen zu Google APIs und Google-Diensten zu konfigurieren. Privater Google-Zugriff hat keine Auswirkungen auf VMs mit externen IP-Adressen.
Wenn für das Netzwerk, das Sie für den Job angeben, privater Google-Zugriff mit VPC Service Controls für Batch verwendet wird, lesen Sie den Abschnitt VPC Service Controls und Batch verwenden.
Alternativ können Sie den externen Zugriff für alle Container blockieren, in denen ein Job ausgeführt wird, wenn Sie nicht den gesamten direkten externen Zugriff für einen Job blockieren möchten.
Weitere Informationen zu Netzwerkkonzepten und dazu, wann Sie das Netzwerk konfigurieren sollten, finden Sie unter Batch-Netzwerk – Übersicht.
Hinweise
- Wenn Sie Batch noch nicht verwendet haben, lesen Sie den Abschnitt Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfü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-Editor (
roles/batch.jobsEditor
) für das Projekt -
Dienstkontonutzer (
roles/iam.serviceAccountUser
) für das Dienstkonto des Jobs, das standardmäßig das Compute Engine-Standarddienstkonto ist -
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-Editor (
-
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 Netzwerk, das Sie für einen Job angeben, der 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 freigegebenes VPC-Netzwerk, das vom Projekt für den Job gehostet oder für das Projekt freigegeben wird.
- Das Netzwerk enthält ein Subnetzwerk (Subnetz) an dem Ort, an dem Sie den Job ausführen möchten.
- Das Netzwerk ermöglicht jeden für Ihren Job erforderlichen Zugriff. Wenn Sie den externen Zugriff für 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 zu ermöglichen, die von Ihrem Job verwendet werden. Alle Jobs verwenden beispielsweise die Batch- und Compute Engine APIs und sehr oft die Cloud Logging API.
Job erstellen, der externen Zugriff für alle VMs blockiert
Sie können den externen Zugriff für 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 Subnetzwerk angeben, über die der Job auf die erforderlichen APIs zugreifen kann.
Wenn Sie eine VM-Instanzvorlage beim Erstellen dieses Jobs 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 externen Zugriff für alle VMs zu blockieren
- JSON-Felder verwenden, um externen Zugriff für alle VMs zu blockieren
gcloud-Flags verwenden, um den externen Zugriff für alle VMs zu blockieren
Führen Sie die folgenden Schritte aus, um einen Job zu erstellen und den externen Zugriff für den Job mit gcloud-Flags zu blockieren:
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails Ihres Jobs angegeben sind.
Wenn Sie beispielsweise einen einfachen Script-Job 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 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
ein.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 zur 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 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 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 auswählen (
LOCATION
).
- Wenn Sie das Feld
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 Feld
noExternalIpAddress
auftrue
.Geben Sie das Netzwerk für den Job in den Feldern
network
undsubnetwork
an.
Wenn Sie beispielsweise einen einfachen Script-Job erstellen möchten, der den externen Zugriff für alle VMs blockiert, erstellen Sie eine JSON-Datei mit folgendem 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 bietet. Das Netzwerk muss entweder ein VPC-Netzwerk im aktuellen Projekt oder ein freigegebenes VPC-Netzwerk sein, das vom aktuellen Projekt gehostet 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 auswählen (
LOCATION
).
- Wenn Sie das Feld
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 Befehl
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Ersetzen Sie Folgendes:
JOB_NAME
: der Name, den Sie für diesen Job verwenden möchten.LOCATION
: der Speicherort, den Sie für diesen Job verwenden möchten.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 Methode jobs.create
und geben Sie die Konfigurationsdetails des Jobs an.
So blockieren Sie den externen Zugriff für alle VMs:
Setzen Sie das Feld
noExternalIpAddress
auftrue
.Geben Sie das Netzwerk für den Job in den Feldern
network
undsubnetwork
an.
Wenn Sie beispielsweise einen einfachen Script-Job 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 Speicherort, den Sie für diesen Job verwenden möchten.JOB_NAME
: der Name, den Sie für diesen Job verwenden möchten.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 (
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 freigegebenes VPC-Netzwerk sein, das vom aktuellen Projekt gehostet 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 auswählen (
LOCATION
).
- Wenn Sie das Feld
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
Sie können den externen Zugriff für alle Container eines Jobs blockieren, 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. Legen Sie für jeden Container im Job, den Sie einschränken möchten, das Feld
blockExternalNetwork
auftrue
fest.Wenn Sie beispielsweise einen einfachen Containerjob erstellen möchten, der den externen Zugriff auf 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 Befehl
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Ersetzen Sie Folgendes:
JOB_NAME
: der Name, den Sie für diesen Job verwenden möchten.LOCATION
: der Speicherort, den Sie für diesen Job verwenden möchten.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 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 auf 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 Speicherort, den Sie für diesen Job verwenden möchten.JOB_NAME
: der Name, den Sie für diesen Job verwenden möchten.
Nächste Schritte
- Wenn Probleme beim Erstellen oder Ausführen eines Jobs auftreten, finden Sie weitere Informationen unter Fehlerbehebung.
- Weitere Informationen zum Networking
- Weitere Informationen zum Erstellen von Jobs
- Jobs und Aufgaben ansehen