En este documento, se explica cómo configurar un trabajo por lotes a fin de bloquear el acceso externo a todas sus VM o contenedores específicos.
Bloquea el acceso externo a un trabajo para cumplir con los requisitos de red o mejorar la seguridad. Debes bloquear el acceso externo a las VM de un trabajo mediante el uso de VM sin direcciones IP externas si se cumple alguna de las siguientes condiciones:
- El proyecto está restringido por la restricción
compute.vmExternalIpAccess
de la política de la organización. La red que especificas para el trabajo usa el Acceso privado a Google para configurar la conectividad privada a los servicios y las API de Google. El Acceso privado a Google no tiene efecto en las VM que tienen direcciones IP externas.
Si la red que especificas para el trabajo usa Acceso privado a Google con Controles del servicio de VPC para Batch, consulta Usa los Controles del servicio de VPC y Batch.
Como alternativa, si no deseas bloquear todo el acceso externo directo para un trabajo, puedes bloquear el acceso externo a cualquier contenedor que ejecute un trabajo.
Si quieres obtener más información sobre los conceptos de herramientas de redes y cuándo configurarlas, consulta Descripción general de las redes por lotes.
Antes de comenzar
- Si nunca usaste Batch, revisa Comienza a usar Batch y completa los requisitos previos para proyectos y usuarios a fin de habilitar Batch.
-
Si quieres obtener los permisos necesarios para crear un trabajo que bloquee el acceso externo, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
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 es la cuenta de servicio predeterminada de Compute Engine de forma predeterminada -
Para identificar la red y la subred de un trabajo, usa el Visualizador de red de Compute (
roles/compute.networkViewer
) en el proyecto.
Si quieres obtener más información para otorgar funciones, consulta Administra el acceso.
Es posible que también puedas obtener los permisos necesarios mediante funciones personalizadas, o bien otras funciones predefinidas.
-
Editor de trabajos por lotes (
-
Si bloqueas el acceso externo a las VMs de un trabajo, debes identificar la red que deseas usar para el trabajo. La red que especifiques para un trabajo que bloquea el acceso externo a sus VM debe cumplir con los siguientes requisitos:
- La red es una red de nube privada virtual (VPC) que se encuentra en el mismo proyecto que el trabajo o es una red de VPC compartida que se aloja en el proyecto o se comparte con él.
- La red incluye una subred (subred) en la ubicación en la que deseas ejecutar el trabajo.
- La red permite el acceso necesario para el trabajo. Si bloqueas el acceso externo a las VM de un trabajo, la red debe usar Cloud NAT o el Acceso privado a Google a fin de permitir el acceso a los dominios para las API y los servicios que usa tu trabajo. Por ejemplo, todos los trabajos usan las API de Batch y Compute Engine y, con mucha frecuencia, usan la API de Cloud Logging.
Crea un trabajo que bloquee el acceso externo a todas las VMs
Bloquea el acceso externo a las VMs de un trabajo cuando lo crees. Cuando bloqueas el acceso externo para todas las VM 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 requeridas.
Si deseas usar una plantilla de instancias de VM mientras creas este trabajo, debes especificar la red y, luego, inhabilitar las direcciones IP externas en la plantilla. De lo contrario, sigue estos pasos para bloquear el acceso externo a las VMs de un trabajo mediante gcloud CLI o la API de Batch.
gcloud
Para crear un trabajo que bloquee el acceso externo con gcloud CLI, selecciona una de las siguientes opciones:
- Usa marcas de gcloud para bloquear el acceso externo a todas las VMs
- Usa campos JSON para bloquear el acceso externo a todas las VMs
Usa marcas de gcloud para bloquear el acceso externo a todas las VMs
Si quieres crear un trabajo y usar marcas de gcloud para bloquear el acceso externo al trabajo, completa los siguientes pasos:
Crea un archivo JSON que especifique los detalles de configuración de tu trabajo.
Por ejemplo, para crear un trabajo básico de secuencia de comandos, 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 VM, 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
Reemplaza lo siguiente:
JOB_NAME
: Es el nombre de este trabajo.LOCATION
: Es la ubicación de este trabajo.JSON_CONFIGURATION_FILE
: Es la ruta del archivo JSON con los detalles de configuración del trabajo.HOST_PROJECT_ID
: Es el ID del proyecto para la red que especifiques:- Si usas una red de VPC compartida, especifica el proyecto host.
- De lo contrario, especifica el proyecto actual.
NETWORK
: Es el nombre de una red de VPC en el proyecto actual o una red de VPC compartida que se aloja en el proyecto actual o se comparte con él.REGION
: Es la región en la que se encuentran la subred y las VM del trabajo:- Si incluyes el campo
allowedLocations
a fin de especificar la ubicación permitida para las VM del trabajo, debes 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 incluyes el campo
SUBNET
: Es el nombre de una subred que forma parte de la red de VPC y se encuentra en la misma región que las VM del trabajo.
Usa campos JSON para bloquear el acceso externo a todas las VMs
Si deseas crear un trabajo y usar campos en el archivo de configuración JSON para bloquear el acceso externo a todas las VM, completa los siguientes pasos:
Crea un archivo JSON que especifique los detalles de configuración de tu trabajo. Para bloquear el acceso externo a todas las VMs, haz lo siguiente:
Establece el campo
noExternalIpAddress
entrue
.Especifica la red para el 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 VM, crea un archivo JSON con los siguientes contenidos.
{ "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" } }
Reemplaza lo siguiente:
HOST_PROJECT_ID
: Es el ID del proyecto para la red que especifiques:- Si usas una red de VPC compartida, especifica el proyecto host.
- De lo contrario, especifica el proyecto actual.
NETWORK
: Es el nombre de una red que proporciona el acceso requerido para este trabajo. La red debe ser una red de VPC en el proyecto actual o una red de VPC compartida que esté alojada en el proyecto actual o se comparta con él.REGION
: Es la región en la que se encuentran la subred y las VM del trabajo:- Si incluyes el campo
allowedLocations
a fin de especificar la ubicación permitida para las VM del trabajo, debes 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 incluyes el campo
SUBNET
: Es el nombre de una subred que forma parte de la red de VPC y se encuentra en la misma región que las VM del trabajo.
Crea el trabajo con el comando
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Reemplaza lo siguiente:
JOB_NAME
: Es el nombre que deseas para este trabajo.LOCATION
: Es la ubicación que deseas para este trabajo.JSON_CONFIGURATION_FILE
: Es la ruta del archivo JSON con los detalles de configuración del trabajo.
API
Para crear un trabajo con la API de Batch, usa el método jobs.create
y especifica los detalles de configuración de tu trabajo.
Para bloquear el acceso externo a todas las VMs, haz lo siguiente:
Establece el campo
noExternalIpAddress
entrue
.Especifica la red para el 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 VM, realiza 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"
}
}
Reemplaza lo siguiente:
PROJECT_ID
: Es el ID del proyecto.LOCATION
: Es la ubicación que deseas para este trabajo.JOB_NAME
: Es el nombre que deseas para este trabajo.HOST_PROJECT_ID
: Es el ID del proyecto para la red que especifiques:- Si usas una red de VPC compartida, especifica el proyecto host.
- De lo contrario, especifica el proyecto actual (
PROJECT_ID
).
NETWORK
: Es el nombre de una red que proporciona el acceso requerido para este trabajo. La red debe ser una red de VPC en el proyecto actual o una red de VPC compartida que esté alojada en el proyecto actual o se comparta con él.REGION
: Es la región en la que se encuentran la subred y las VM del trabajo:- Si incluyes el campo
allowedLocations
a fin de especificar la ubicación permitida para las VM del trabajo, debes 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 incluyes el campo
SUBNET
: Es el nombre de una subred que forma parte de la red de VPC y se encuentra en la misma región que las VM del trabajo.
Crea un trabajo que bloquee el acceso externo a uno o más contenedores.
Bloquea el acceso externo a cualquiera de los contenedores de un trabajo cuando crees el trabajo.
Puedes bloquear el acceso externo a cualquiera de los contenedores del trabajo con gcloud CLI o la API de Batch.
gcloud
Para crear un trabajo que bloquee el acceso externo a uno o más contenedores con gcloud CLI, completa los siguientes pasos:
Crea un archivo JSON que especifique los detalles de configuración de tu trabajo. Para cada contenedor en el trabajo que deseas restringir, establece el campo
blockExternalNetwork
entrue
.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
Reemplaza lo siguiente:
JOB_NAME
: Es el nombre que deseas para este trabajo.LOCATION
: Es la ubicación que deseas para este trabajo.JSON_CONFIGURATION_FILE
: Es la ruta del archivo JSON con los detalles de configuración del trabajo.
API
Para crear un trabajo con la API de Batch, usa el método jobs.create
y especifica los detalles de configuración de tu trabajo.
Para cada contenedor en el trabajo que deseas restringir, establece el campo blockExternalNetwork
en true
.
Por ejemplo, para crear un trabajo de contenedor básico que bloquee el acceso externo al contenedor, realiza 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"
}
}
Reemplaza lo siguiente:
PROJECT_ID
: Es el ID del proyecto.LOCATION
: Es la ubicación que deseas para este trabajo.JOB_NAME
: Es el nombre que deseas para este trabajo.
¿Qué sigue?
- Si tienes problemas para crear o ejecutar un trabajo, consulta Solución de problemas.
- Obtén más información sobre las herramientas de redes.
- Obtén más información sobre cómo crear un trabajo.
- Aprende a ver trabajos y tareas.