En este documento se explica cómo configurar un trabajo por lotes para bloquear el acceso externo de todas sus VMs o de contenedores específicos.
Bloquea el acceso externo a un trabajo para cumplir los requisitos de red o mejorar la seguridad. Debes bloquear el acceso externo a las VMs de un trabajo mediante VMs sin direcciones IP externas si se cumple alguna de las siguientes condiciones:
- Tu proyecto está restringido por la restricción de la política de la organización
compute.vmExternalIpAccess
. La red que especifiques para el trabajo usará Acceso privado de Google para configurar la conectividad privada a las APIs y los servicios de Google. El acceso privado de Google no afecta a las VMs que tienen direcciones IP externas.
Si la red que especifiques para el trabajo usa Acceso privado de Google con Controles de Servicio de VPC para Batch, consulta Usar Controles de Servicio de VPC y Batch.
Si no quiere bloquear todo el acceso externo directo a un trabajo, puede bloquear el acceso externo a los contenedores en los que se ejecute un trabajo.
Para obtener más información sobre los conceptos de redes y cuándo configurar las redes, consulta la información general sobre las redes por lotes.
Antes de empezar
- Si no has usado Batch antes, consulta el artículo Empezar a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
-
Para obtener los permisos que necesitas para crear un trabajo que bloquee el acceso externo, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:
-
Editor de trabajos por lotes (
roles/batch.jobsEditor
) en el proyecto -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en la cuenta de servicio del trabajo, que de forma predeterminada es la cuenta de servicio predeterminada de Compute Engine -
Para identificar la red y la subred de un trabajo, haz lo siguiente:
Lector de red de Compute (
roles/compute.networkViewer
) en el proyecto
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
-
Editor de trabajos por lotes (
-
Si bloqueas el acceso externo a las VMs de un trabajo, debes identificar la red que quieres usar para el trabajo. La red que especifiques para un trabajo que bloquee el acceso externo de sus VMs debe cumplir los siguientes requisitos:
- La red es una red de nube privada virtual (VPC) que está en el mismo proyecto que el trabajo o es una red de VPC compartida que está alojada en el proyecto del trabajo o se comparte con él.
- La red incluye una subred en la ubicación en la que quieres ejecutar el trabajo.
- La red permite cualquier acceso necesario para tu trabajo. Si bloqueas el acceso externo a las VMs de un trabajo, la red debe usar Cloud NAT o Acceso privado de Google para permitir el acceso a los dominios de las APIs y los servicios que usa el trabajo. Por ejemplo, todos los trabajos usan las APIs Batch y Compute Engine, y muy a menudo la API Cloud Logging.
Crear un trabajo que bloquee el acceso externo de todas las VMs
Bloquea el acceso externo a las VMs de un trabajo al crear el trabajo. Si bloqueas el acceso externo de todas las VMs en las que se ejecuta un trabajo, también debes especificar una red y una subred que permitan que el trabajo acceda a las APIs necesarias.
Si quieres usar una plantilla de instancia de VM al crear este trabajo, debes especificar la red y inhabilitar las direcciones IP externas en la plantilla de instancia de VM. De lo contrario, sigue estos pasos para bloquear el acceso externo a las VMs de un trabajo mediante la CLI de gcloud o la API Batch.
gcloud
Para crear un trabajo que bloquee el acceso externo mediante gcloud CLI, selecciona una de las siguientes opciones:
- Usar marcas de gcloud para bloquear el acceso externo de todas las VMs
- Usar campos JSON para bloquear el acceso externo a todas las máquinas virtuales
Usar marcas de gcloud para bloquear el acceso externo de todas las VMs
Para crear un trabajo y usar las marcas de gcloud para bloquear el acceso externo al trabajo, sigue estos pasos:
Crea un archivo JSON que especifique los detalles de configuración del trabajo.
Por ejemplo, para crear un trabajo de secuencia de comandos básico, crea un archivo JSON con el siguiente contenido.
{ "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" } }
Crea el trabajo con el comando
gcloud batch jobs submit
. Para bloquear el acceso externo a todas las VMs, incluye las marcas--no-external-ip-address
,--network
y--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
Haz los cambios siguientes:
JOB_NAME
: el nombre de este trabajo.LOCATION
: la ubicación de este trabajo.JSON_CONFIGURATION_FILE
: la ruta del archivo JSON con los detalles de configuración del trabajo.HOST_PROJECT_ID
: el ID del proyecto del proyecto de la red que especifiques:- Si utilizas una red de VPC compartida, especifica el proyecto host.
- De lo contrario, especifica el proyecto actual.
NETWORK
: el nombre de una red de VPC del proyecto actual o de una red de VPC compartida alojada en el proyecto actual o compartida con él.REGION
: la región en la que se encuentran la subred y las VMs del trabajo:- Si incluye el campo
allowedLocations
para especificar la ubicación permitida de las VMs del trabajo, debe especificar la misma región aquí. - De lo contrario, la región debe ser la misma que la ubicación que selecciones para el trabajo
(
LOCATION
).
- Si incluye el campo
SUBNET
: el nombre de una subred que forma parte de la red de VPC y se encuentra en la misma región que las VMs del trabajo.
Usar campos JSON para bloquear el acceso externo de todas las VMs
Para crear un trabajo y usar campos del archivo de configuración JSON para bloquear el acceso externo de todas las máquinas virtuales, sigue estos pasos:
Crea un archivo JSON que especifique los detalles de configuración del trabajo. Para bloquear el acceso externo de todas las VMs, sigue estos pasos:
Asigna el valor
true
al camponoExternalIpAddress
.Especifica la red del trabajo en los campos
network
ysubnetwork
.
Por ejemplo, para crear un trabajo de secuencia de comandos básico que bloquee el acceso externo de todas las máquinas virtuales, crea un archivo JSON con el siguiente contenido.
{ "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" } }
Haz los cambios siguientes:
HOST_PROJECT_ID
: el ID del proyecto del proyecto de la red que especifiques:- Si utilizas una red de VPC compartida, especifica el proyecto host.
- De lo contrario, especifica el proyecto actual.
NETWORK
: el nombre de una red que proporciona el acceso necesario para este trabajo. La red debe ser una red de VPC del proyecto actual o una red de VPC compartida alojada en el proyecto actual o compartida con él.REGION
: la región en la que se encuentran la subred y las VMs del trabajo:- Si incluye el campo
allowedLocations
para especificar la ubicación permitida de las VMs del trabajo, debe especificar la misma región aquí. - De lo contrario, la región debe ser la misma que la ubicación que selecciones para el trabajo
(
LOCATION
).
- Si incluye el campo
SUBNET
: el nombre de una subred que forma parte de la red de VPC y se encuentra en la misma región que las VMs del trabajo.
Crea el trabajo con el comando
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Haz los cambios siguientes:
JOB_NAME
: el nombre que quieras darle a este trabajo.LOCATION
: la ubicación que quieras para este trabajo.JSON_CONFIGURATION_FILE
: la ruta del archivo JSON con los detalles de configuración del trabajo.
API
Para crear un trabajo con la API Batch, usa el método jobs.create
y especifica los detalles de configuración del trabajo.
Para bloquear el acceso externo de todas las VMs, sigue estos pasos:
Asigna el valor
true
al camponoExternalIpAddress
.Especifica la red del trabajo en los campos
network
ysubnetwork
.
Por ejemplo, para crear un trabajo de secuencia de comandos básico que bloquee el acceso externo a todas las VMs, haz la siguiente solicitud POST
:
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"
}
}
Haz los cambios siguientes:
PROJECT_ID
: el ID de proyecto de tu proyecto.LOCATION
: la ubicación que quieras para este puesto.JOB_NAME
: el nombre que quieras darle a este trabajo.HOST_PROJECT_ID
: el ID del proyecto del proyecto de la red que especifiques:- Si utilizas una red de VPC compartida, especifica el proyecto host.
- De lo contrario, especifica el proyecto actual (
PROJECT_ID
).
NETWORK
: el nombre de una red que proporciona el acceso necesario para este trabajo. La red debe ser una red de VPC del proyecto actual o una red de VPC compartida alojada en el proyecto actual o compartida con él.REGION
: la región en la que se encuentran la subred y las VMs del trabajo:- Si incluye el campo
allowedLocations
para especificar la ubicación permitida de las VMs del trabajo, debe especificar la misma región aquí. - De lo contrario, la región debe ser la misma que la ubicación que selecciones para el trabajo
(
LOCATION
).
- Si incluye el campo
SUBNET
: el nombre de una subred que forma parte de la red de VPC y se encuentra en la misma región que las VMs del trabajo.
Crear un trabajo que bloquee el acceso externo a uno o varios contenedores
Bloquea el acceso externo a cualquiera de los contenedores de un trabajo al crear el trabajo.
Puedes bloquear el acceso externo a cualquiera de los contenedores de un trabajo mediante la CLI de gcloud o la API Batch.
gcloud
Para crear un trabajo que bloquee el acceso externo a uno o varios contenedores mediante la CLI de gcloud, sigue estos pasos:
Crea un archivo JSON que especifique los detalles de configuración del trabajo. En cada contenedor del trabajo que quieras restringir, asigna el valor
true
al campoblockExternalNetwork
.Por ejemplo, para crear un trabajo de contenedor básico que bloquee el acceso externo al contenedor, crea un archivo JSON con el siguiente contenido.
{ "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" } }
Crea el trabajo con el comando
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Haz los cambios siguientes:
JOB_NAME
: el nombre que quieras darle a este trabajo.LOCATION
: la ubicación que quieras para este trabajo.JSON_CONFIGURATION_FILE
: la ruta del archivo JSON con los detalles de configuración del trabajo.
API
Para crear un trabajo con la API Batch, usa el método jobs.create
y especifica los detalles de configuración del trabajo.
En cada contenedor del trabajo que quieras restringir, asigna el valor true
al campo blockExternalNetwork
.
Por ejemplo, para crear un trabajo de contenedor básico que bloquee el acceso externo al contenedor, haz la siguiente solicitud POST
:
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"
}
}
Haz los cambios siguientes:
PROJECT_ID
: el ID de proyecto de tu proyecto.LOCATION
: la ubicación que quieras para este puesto.JOB_NAME
: el nombre que quieras darle a este trabajo.
Siguientes pasos
- Si tienes problemas para crear o ejecutar un trabajo, consulta la sección Solución de problemas.
- Más información sobre las redes
- Más información sobre cómo crear un trabajo
- Consulta cómo ver trabajos y tareas.