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:
- Ihr Projekt wird durch die Einschränkung der Organisationsrichtlinie
compute.vmExternalIpAccess
eingeschränkt. Das Netzwerk, das Sie für den Job angeben, verwendet den 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 das für den Job angegebene Netzwerk 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 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:
-
Batch Job Editor (
roles/batch.jobsEditor
) für das Projekt -
Dienstkontonutzer (
roles/iam.serviceAccountUser
) im Dienstkonto des Jobs. Dies ist standardmäßig das Compute Engine-Standarddienstkonto. -
So identifizieren 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 verwalten.
Möglicherweise können Sie die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
-
Batch Job Editor (
-
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.
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:
- Externen Zugriff für alle VMs mit gcloud-Flags blockieren
- Externen Zugriff für alle VMs mit JSON-Feldern blockieren
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:
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" } }
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 JobJSON_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
).
- 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.
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:
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs angegeben sind. So blockieren Sie den externen Zugriff für alle VMs:
Legen Sie das Feld
noExternalIpAddress
auftrue
fest.Geben Sie in den Feldern
network
undsubnetwork
das Netzwerk für den Job 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 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
).
- 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 JobLOCATION
: der Standort, den Sie für diesen Job verwenden möchtenJSON_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:
Legen Sie das Feld
noExternalIpAddress
auftrue
fest.Geben Sie in den Feldern
network
undsubnetwork
das Netzwerk für den Job an.
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 JobHOST_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
).
- 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 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:
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
auftrue
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" } }
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 JobLOCATION
: der Standort, den Sie für diesen Job verwenden möchtenJSON_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
- Wenn Probleme beim Erstellen oder Ausführen eines Jobs auftreten, lesen Sie die Informationen unter Fehlerbehebung.
- Weitere Informationen zu Netzwerken
- Weitere Informationen zum Erstellen von Jobs
- Aufträge und Aufgaben aufrufen