In diesem Dokument wird erläutert, wie Sie einen Batchjob zum Blockieren konfigurieren externen Zugriff für alle ihre VMs oder bestimmte Container.
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 Netzwerk, das Sie für den Job angeben, Privater Google-Zugriff für private Verbindungen zu Google APIs und Google-Diensten konfigurieren. Privater Google-Zugriff hat keine Auswirkungen auf VMs mit externer IP-Adresse 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 zur Konfiguration 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.
-
Um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen, der den externen Zugriff blockiert, bitten Sie Ihren Administrator, Ihnen folgenden IAM-Rollen:
-
Batch-Job-Editor (
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-Editor (
-
Wenn Sie den externen Zugriff auf die VMs eines Jobs blockieren, müssen Sie das Netzwerk identifizieren
die Sie für den Job verwenden möchten. Das Netzwerk, das Sie für einen Job angeben,
den externen Zugriff auf seine VMs blockiert, müssen die folgenden Anforderungen erfüllen:
- Das Netzwerk ist ein Virtual Private Cloud-Netzwerk (VPC), das sich in der wie der Job, oder ist ein Freigegebenes VPC-Netzwerk das vom Projekt gehostet oder für den Job freigegeben wird.
- Das Netzwerk umfasst ein Subnetzwerk an dem Ort, an dem Sie den Job ausführen möchten.
- Das Netzwerk lässt alle für Ihren Job erforderlichen Zugriffsrechte zu. 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 in Ihrem Job verwendet werden. Beispielsweise verwenden alle Jobs die Methoden Batch und Compute Engine APIs und verwenden sehr oft die Cloud Logging API.
Job erstellen, der den externen Zugriff für alle VMs blockiert
Blockieren Sie den externen Zugriff auf 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 ein Netzwerk und ein Subnetz angeben, damit 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 den folgenden Schritten externe Zugriff für die VMs eines Jobs mithilfe der Methode gcloud CLI oder Batch API verwenden.
gcloud
So erstellen Sie einen Job, der den externen Zugriff blockiert, mithilfe der Methode Wählen Sie für die gcloud CLI eine der folgenden Optionen aus:
- Externen Zugriff für alle VMs mit gcloud-Flags blockieren
- Externen Zugriff für alle VMs mit JSON-Feldern blockieren
Externen Zugriff für alle VMs mit gcloud-Flags blockieren
So erstellen Sie einen Job und blockieren den externen Zugriff mit gcloud-Flags auf den Job: führen Sie die folgenden Schritte aus:
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 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
. Um den externen Zugriff für alle VMs zu blockieren, fügen Sie Die Flags--no-external-ip-address
,--network
und--subnetwork
.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 dieses Jobs.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 von Ihnen angegebene Netzwerk:- Wenn Sie ein freigegebene VPC-Netzwerk verwenden, geben Sie den Host an Projekt arbeiten.
- Geben Sie andernfalls das aktuelle Projekt an.
NETWORK
: der Name eines VPC-Netzwerk im aktuellen Projekt oder ein freigegebenes VPC-Netzwerk das vom aktuellen Projekt gehostet wird 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 den Parameter
Feld „
allowedLocations
“ um den zulässigen Standort für die VMs für den Job anzugeben, muss hier dieselbe Region angeben. - Andernfalls muss die Region mit der im
Standort, den Sie für den Job auswählen
(
LOCATION
).
- Wenn Sie den Parameter
Feld „
SUBNET
: der Name eines Subnetz, das Teil des VPC-Netzwerk und befindet sich in derselben Region wie der VMs für den Job
Externen Zugriff für alle VMs mit JSON-Feldern blockieren
Um einen Job zu erstellen und Felder in der JSON-Konfigurationsdatei zu verwenden, den externen Zugriff für alle VMs blockieren möchten, führen Sie die folgenden Schritte aus:
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 z. B. einen einfachen Skriptjob erstellen möchten, der den externen Zugriff allen VMs 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 } ], "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 den Host an Projekt arbeiten.
- Geben Sie andernfalls 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 das vom aktuellen Projekt gehostet wird oder für das aktuelle Projekt freigegeben wird.REGION
: die Region, in der das Subnetz und die VMs für den Job befinden:- Wenn Sie den Parameter
Feld „
allowedLocations
“ um den zulässigen Standort für die VMs für den Job anzugeben, muss hier dieselbe Region angeben. - Andernfalls muss die Region mit dem Standort übereinstimmen, den Sie für den Job ausgewählt haben (
LOCATION
).
- Wenn Sie den Parameter
Feld „
SUBNET
: der Name eines Subnetz, das Teil des VPC-Netzwerk und befindet sich in derselben Region wie der VMs für den Job
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
: die location für diesen Job an.JSON_CONFIGURATION_FILE
: der Pfad zur JSON-Datei mit den Konfigurationsdetails des Jobs.
API
Verwenden Sie zum Erstellen eines Jobs mit der Batch API die Methode
jobs.create
-Methode
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 der
network
- undsubnetwork
-Felder:
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 Standort die Sie für diesen Job benötigen.JOB_NAME
: der Name, der für diesen Job verwendet werden soll.HOST_PROJECT_ID
: die Projekt-ID des Projekts für das angegebene Netzwerk:- Wenn Sie ein freigegebenes 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. 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 das Subnetz und die VMs für den Job befinden:- Wenn Sie den Parameter
Feld „
allowedLocations
“ um den zulässigen Standort für die VMs für den Job anzugeben, muss hier dieselbe Region angeben. - Andernfalls muss die Region mit dem Standort übereinstimmen, den Sie für den Job ausgewählt haben (
LOCATION
).
- Wenn Sie den Parameter
Feld „
SUBNET
: der Name eines Subnetzes, das Teil des VPC-Netzwerks 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, Feld „
blockExternalNetwork
“ antrue
.Wenn Sie beispielsweise einen einfachen Containerjob erstellen möchten, der externe -Zugriff für den Container 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, der für diesen Job verwendet werden soll.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,
Feld „blockExternalNetwork
“
an true
.
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 Standort die Sie für diesen Job benötigen.JOB_NAME
: der Name, der für diesen Job verwendet werden soll.
Nächste Schritte
- Wenn beim Erstellen oder Ausführen eines Jobs Probleme auftreten, lesen Sie den Abschnitt Fehlerbehebung.
- Weitere Informationen zu Netzwerken
- Weitere Informationen zum Erstellen von Jobs
- Weitere Informationen