Neste documento, explicamos como configurar um job do Batch para bloquear o acesso externo a todas as VMs ou contêineres específicos.
Bloqueie o acesso externo de um job para atender aos requisitos de rede ou melhorar a segurança. Bloqueie o acesso externo às VMs de um job usando VMs sem endereços IP externo se alguma das condições a seguir for verdadeira:
- Seu projeto é restrito pela restrição da política
da organização
compute.vmExternalIpAccess
. A rede especificada para o job usa o Acesso privado do Google para configurar a conectividade particular com as APIs e os serviços do Google. O Acesso privado do Google não afeta as VMs que têm endereços IP externo.
Se a rede especificada para o job usar Acesso privado do Google com VPC Service Controls para Lote, consulte Usar VPC Service Controls e lote.
Como alternativa, para não bloquear todo o acesso externo direto de um job, é possível bloquear o acesso externo a todos os contêineres executados por um job.
Para mais informações sobre conceitos de rede e quando configurá-la, consulte Visão geral da rede em lote.
Antes de começar
- Se você nunca usou o Batch, leia os Primeiros passos com o Batch e ative-o com os pré-requisitos para projetos e usuários.
-
Para receber as permissões necessárias para criar um job que bloqueie o acesso externo, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Editor de jobs em lote (
roles/batch.jobsEditor
) no projeto -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço do job, que, por padrão, é a conta de serviço padrão do Compute Engine -
Para identificar a rede e a sub-rede de um job:
Leitor de rede do Compute (
roles/compute.networkViewer
) no projeto
Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.
Talvez você também consiga receber as permissões necessárias por meio de papéis personalizados ou outros papéis predefinidos.
-
Editor de jobs em lote (
-
Se você bloquear o acesso externo às VMs de um job, precisará identificar a rede
que quer usar para o job. A rede especificada para um job que bloqueia o acesso externo para as VMs precisa atender aos seguintes requisitos:
- A rede é uma rede de nuvem privada virtual (VPC) que está no mesmo projeto do job ou é uma rede VPC compartilhada hospedada ou compartilhada com o projeto do job.
- A rede inclui uma sub-rede (sub-rede) no local em que você quer executar o job.
- A rede permite qualquer acesso necessário para o job. Se você bloquear o acesso externo às VMs de um job, a rede precisará usar o Cloud NAT ou o Acesso privado do Google para permitir o acesso aos domínios das APIs e serviços usados pelo job. Por exemplo, todos os jobs usam as APIs Batch e Compute Engine e costumam usar a API Cloud Logging.
Criar um job que bloqueie o acesso externo para todas as VMs
Bloqueie o acesso externo às VMs de um job ao criá-lo. Ao bloquear o acesso externo a todas as VMs em que um job é executado, você também precisa especificar uma rede e uma sub-rede que permitam que o job acesse as APIs necessárias.
Se você quiser usar um modelo de instância de VM ao criar esse job, especifique a rede e desative os endereços IP externo no modelo de instância de VM. Caso contrário, use as etapas a seguir para bloquear o acesso externo às VMs de um job usando a CLI gcloud ou a API Batch.
gcloud
Para criar um job que bloqueie o acesso externo usando a CLI gcloud, selecione uma das seguintes opções:
- Use sinalizações da gcloud para bloquear o acesso externo a todas as VMs
- Usar campos JSON para bloquear o acesso externo a todas as VMs
Usar sinalizações da gcloud para bloquear o acesso externo a todas as VMs
Para criar um job e usar sinalizações da gcloud para bloquear o acesso externo a ele, siga as etapas a seguir:
Crie um arquivo JSON que especifique os detalhes de configuração do job.
Por exemplo, para criar um job de script básico, crie um arquivo JSON com o conteúdo a seguir.
{ "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" } }
Crie o job usando o comando
gcloud batch jobs submit
. Para bloquear o acesso externo a todas as VMs, inclua as sinalizações--no-external-ip-address
,--network
e--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
Substitua:
JOB_NAME
: o nome deste job.LOCATION
: o local deste job.JSON_CONFIGURATION_FILE
: o caminho para o arquivo JSON com os detalhes de configuração do job.HOST_PROJECT_ID
: o ID do projeto para a rede que você especificar:- Se você estiver usando uma rede VPC compartilhada, especifique o projeto host.
- Caso contrário, especifique o projeto atual.
NETWORK
: o nome de uma rede VPC no projeto atual ou de uma rede VPC compartilhada hospedada ou compartilhada com o projeto atual.REGION
: a região onde a sub-rede e as VMs do job estão localizadas:- Se você incluir o
campo
allowedLocations
para especificar o local permitido das VMs para o job, especifique a mesma região aqui. - Caso contrário, a região precisa ser o mesmo local selecionado para o job (
LOCATION
).
- Se você incluir o
campo
SUBNET
: o nome de uma sub-rede que faz parte da rede VPC e está localizada na mesma região das VMs do job.
Usar campos JSON para bloquear o acesso externo a todas as VMs
Para criar um job e usar campos no arquivo de configuração JSON para bloquear o acesso externo a todas as VMs, conclua as seguintes etapas:
Crie um arquivo JSON que especifique os detalhes de configuração do job. Para bloquear o acesso externo a todas as VMs, faça o seguinte:
Defina o campo
noExternalIpAddress
comotrue
.Especifique a rede do job nos campos
network
esubnetwork
.
Por exemplo, para criar um job de script básico que bloqueie o acesso externo para todas as VMs, crie um arquivo JSON com o conteúdo a seguir.
{ "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" } }
Substitua:
HOST_PROJECT_ID
: o ID do projeto para a rede que você especificar:- Se você estiver usando uma rede VPC compartilhada, especifique o projeto host.
- Caso contrário, especifique o projeto atual.
NETWORK
: o nome de uma rede que fornece o acesso necessário para esse job. A rede precisa ser uma rede VPC no projeto atual ou uma rede VPC compartilhada hospedada ou compartilhada com o projeto atual.REGION
: a região onde a sub-rede e as VMs do job estão localizadas:- Se você incluir o
campo
allowedLocations
para especificar o local permitido das VMs para o job, especifique a mesma região aqui. - Caso contrário, a região precisa ser o mesmo local selecionado para o job (
LOCATION
).
- Se você incluir o
campo
SUBNET
: o nome de uma sub-rede que faz parte da rede VPC e está localizada na mesma região das VMs do job.
Crie o job usando o comando
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua:
JOB_NAME
: o nome que você quer para este job.LOCATION
: o local que você quer para esse job.JSON_CONFIGURATION_FILE
: o caminho para o arquivo JSON com os detalhes de configuração do job.
API
Para criar um job usando a API Batch, use o método jobs.create
e especifique os detalhes de configuração do job.
Para bloquear o acesso externo a todas as VMs, faça o seguinte:
Defina o campo
noExternalIpAddress
comotrue
.Especifique a rede do job nos campos
network
esubnetwork
.
Por exemplo, para criar um job de script básico que bloqueia o acesso externo para
todas as VMs, faça a seguinte solicitação 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"
}
}
Substitua:
PROJECT_ID
: o ID do projeto.LOCATION
: o local que você quer para a vaga.JOB_NAME
: o nome que você quer para este job.HOST_PROJECT_ID
: o ID do projeto para a rede que você especificar:- Se você estiver usando uma rede VPC compartilhada, especifique o projeto host.
- Caso contrário, especifique o projeto atual (
PROJECT_ID
).
NETWORK
: o nome de uma rede que fornece o acesso necessário para esse job. A rede precisa ser uma rede VPC no projeto atual ou uma rede VPC compartilhada hospedada ou compartilhada com o projeto atual.REGION
: a região onde a sub-rede e as VMs do job estão localizadas:- Se você incluir o
campo
allowedLocations
para especificar o local permitido das VMs para o job, especifique a mesma região aqui. - Caso contrário, a região precisa ser o mesmo local selecionado para o job (
LOCATION
).
- Se você incluir o
campo
SUBNET
: o nome de uma sub-rede que faz parte da rede VPC e está localizada na mesma região das VMs do job.
Criar um job que bloqueie o acesso externo para um ou mais contêineres
Bloqueie o acesso externo a qualquer um dos contêineres de um job ao criá-lo.
É possível bloquear o acesso externo a qualquer um dos contêineres de um job usando a CLI gcloud ou a API Batch.
gcloud
Para criar um job que bloqueie o acesso externo a um ou mais contêineres usando a CLI gcloud, conclua as etapas a seguir:
Crie um arquivo JSON que especifique os detalhes de configuração do job. Para cada contêiner no job que você quer restringir, defina o campo
blockExternalNetwork
comotrue
.Por exemplo, para criar um job básico de contêiner que bloqueie o acesso externo ao contêiner, crie um arquivo JSON com o conteúdo a seguir.
{ "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" } }
Crie o job usando o comando
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua:
JOB_NAME
: o nome que você quer para este job.LOCATION
: o local que você quer para esse job.JSON_CONFIGURATION_FILE
: o caminho para o arquivo JSON com os detalhes de configuração do job.
API
Para criar um job usando a API Batch, use o método jobs.create
e especifique os detalhes de configuração do job.
Para cada contêiner no job que você quer restringir, defina o
campo blockExternalNetwork
como true
.
Por exemplo, para criar um job básico de contêiner que bloqueie o acesso
externo ao contêiner, faça a seguinte solicitação 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"
}
}
Substitua:
PROJECT_ID
: o ID do projeto.LOCATION
: o local que você quer para a vaga.JOB_NAME
: o nome que você quer para este job.
A seguir
- Se você tiver problemas para criar ou executar um job, consulte Solução de problemas.
- Saiba mais sobre redes.
- Saiba mais sobre como criar um job.
- Saiba como visualizar jobs e tarefas.