In diesem Dokument wird beschrieben, wie Sie einen Batchjob so konfigurieren, dass der externe Zugriff für alle VMs oder bestimmten 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 einer der folgenden Punkte zutrifft:
- Ihr Projekt ist durch die Einschränkung der Organisationsrichtlinie
compute.vmExternalIpAccess
eingeschränkt. Das von Ihnen 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 für das von Ihnen für den Job angegebene Netzwerk der private Google-Zugriff mit VPC Service Controls für Batch verwendet wird, lesen Sie den Hilfeartikel VPC Service Controls und Batch verwenden.
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, in denen ein Job ausgeführt wird.
Weitere Informationen zu Netzwerkkonzepten und zum Konfigurieren von Netzwerken finden Sie unter Batch-Netzwerk – Übersicht.
Hinweise
- Wenn Sie Batch noch nicht verwendet haben, lesen Sie den Hilfeartikel Batch-Dateien erstellen und ausführen 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-Bearbeiter (
roles/batch.jobsEditor
) für das Projekt -
Dienstkontonutzer (
roles/iam.serviceAccountUser
) im 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-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 Netzwerk, das Sie für einen Job angeben, der den externen Zugriff für die zugehörigen 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 mit diesem geteilt wird.
- Das Netzwerk umfasst ein Subnetzwerk an dem Ort, an dem Sie den Job ausführen möchten.
- Das Netzwerk bietet Zugriff auf alle Ressourcen, die Sie für Ihre Arbeit benötigen. 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 zuzulassen, die von Ihrem Job verwendet werden. So werden beispielsweise für alle Jobs die Batch- und Compute Engine APIs und sehr häufig die Cloud Logging API verwendet.
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, über die der Job auf die erforderlichen APIs zugreifen kann.
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 können Sie mit der gcloud CLI oder der Batch API den externen Zugriff für die VMs eines Jobs blockieren.
gcloud
Wählen Sie eine der folgenden Optionen aus, um mit der gcloud CLI einen Job zu erstellen, der den externen Zugriff blockiert:
- Externen Zugriff für alle VMs mit gcloud-Flags blockieren
- JSON-Felder verwenden, um den externen Zugriff für alle VMs zu blockieren
Externen Zugriff für alle VMs mit gcloud-Flags blockieren
So erstellen Sie einen Job und blockieren mit gcloud-Flags den externen Zugriff für den Job:
Erstellen Sie eine JSON-Datei mit den Konfigurationsdetails des Jobs.
Wenn Sie beispielsweise einen einfachen Script-Job erstellen möchten, 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 } ], "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
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
: den Speicherort für diese Aufgabe.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 freigegebenen VPC-Netzwerks, 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
angeben, um den zulässigen Speicherort 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
).
- 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.
Externen Zugriff für alle VMs mit JSON-Feldern 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 mit den Konfigurationsdetails des Jobs. So blockieren Sie den externen Zugriff für alle VMs:
Legen Sie für das Feld
noExternalIpAddress
den Werttrue
fest.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 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.
- Andernfalls geben Sie das aktuelle Projekt an.
NETWORK
: Der Name eines Netzwerks, das den für diese Aufgabe 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 wird.REGION
: die Region, in der sich das Subnetz und die VMs für den Job befinden:- Wenn Sie das Feld
allowedLocations
angeben, um den zulässigen Speicherort 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
).
- 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 gewünschte Name für diesen Job.LOCATION
: der Speicherort 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 Methode jobs.create
und geben Sie die Konfigurationsdetails des Jobs an.
So blockieren Sie den externen Zugriff für alle VMs:
Legen Sie für das Feld
noExternalIpAddress
den Werttrue
fest.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 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 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 diese Aufgabe 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 wird.REGION
: die Region, in der sich das Subnetz und die VMs für den Job befinden:- Wenn Sie das Feld
allowedLocations
angeben, um den zulässigen Speicherort 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
).
- 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
Blockieren Sie den externen Zugriff für alle Container eines Jobs, wenn Sie den Job erstellen.
Sie können den externen Zugriff für jeden der Container des Jobs mit der gcloud CLI oder der Batch API blockieren.
gcloud
So erstellen Sie mit der gcloud CLI einen Job, der den externen Zugriff für einen oder mehrere Container blockiert:
Erstellen Sie eine JSON-Datei mit den Konfigurationsdetails des Jobs. 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 gewünschte Name für diesen Job.LOCATION
: der Speicherort 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 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, 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 Speicherort für diesen Job.JOB_NAME
: Der gewünschte Name für diesen Job.
Nächste Schritte
- Wenn beim Erstellen oder Ausführen eines Jobs Probleme auftreten, lesen Sie den Hilfeartikel Fehlerbehebung.
- Weitere Informationen zum Networking
- Weitere Informationen zum Erstellen von Jobs
- Weitere Informationen