Neste documento, explicamos como configurar um job em lote para bloquear acesso externo a todas as VMs ou contêineres específicos.
Bloquear o acesso externo a um job para atender aos requisitos de rede ou melhorar a segurança. É preciso bloquear o acesso externo às VMs de um job usando VMs sem endereços IP externo, se uma das seguintes condições for verdadeira:
- Seu projeto é restrito pela restrição da política da organização
compute.vmExternalIpAccess
. A rede especificada para o job usa Acesso privado do Google a configurar a conectividade particular com as APIs e os serviços do Google. O Acesso privado do Google não afeta as VMs com IP externo endereços IP internos.
Se a rede especificada para o job usar Acesso privado do Google com o VPC Service Controls para o Batch, consulte Usar VPC Service Controls e Batch.
Como alternativa, se você não quiser bloquear todo o acesso externo direto para um job, bloqueie o acesso externo para 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 antes, revise Introdução ao Batch e ativar o Batch. pré-requisitos para projetos e usuários.
-
Para receber as permissões necessárias para criar um job que bloqueia 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 é a conta de serviço padrão do Compute Engine -
Para identificar a rede e a sub-rede de um job:
Leitor da rede do Compute (
roles/compute.networkViewer
) no projeto
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de 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 vai ser usada. A rede especificada para um job que
bloqueia o acesso externo às VMs precisa atender aos seguintes requisitos:
- A rede é uma rede de nuvem privada virtual (VPC, na sigla em inglês) 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 no local onde você quer executar o job.
- A rede permite qualquer acesso necessário para seu trabalho. 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, com frequência, a API Cloud Logging.
Criar um job que bloqueie o acesso externo a todas as VMs
Bloqueie o acesso externo às VMs de um job ao criá-lo. Ao bloquear o acesso externo de todas as VMs em que um job é executado, você também especificar uma rede e uma sub-rede para permitir 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 externos no modelo de instância de VM. Caso contrário, siga as etapas abaixo para bloquear para as VMs de um job usando o CLI gcloud ou API Batch.
gcloud
Para criar um job que bloqueie o acesso externo usando CLI gcloud, selecione uma das seguintes opções:
- Usar flags do gcloud para bloquear o acesso externo a todas as VMs
- Usar campos JSON para bloquear o acesso externo de todas as VMs
Use flags da gcloud para bloquear o acesso externo de todas as VMs
Para criar um job e usar sinalizações da gcloud para bloquear o acesso externo ao job, siga estas etapas:
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 seguinte conteúdo.
{ "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 de 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 do job.LOCATION
: o location do job.JSON_CONFIGURATION_FILE
: o caminho do arquivo JSON com os detalhes de configuração do job.HOST_PROJECT_ID
: o ID do projeto do projeto para a rede especificada:- Se você estiver usando uma rede VPC compartilhada, especifique o host projeto.
- Caso contrário, especifique o projeto atual.
NETWORK
: o nome de uma rede VPC no projeto atual ou uma rede VPC compartilhada hospedada ou compartilhada com o projeto atual.REGION
: o região em que a sub-rede e as VMs para o job estão localizados:- Se você incluir o parâmetro
Campo
allowedLocations
para especificar o local permitido para as VMs do job, especifique a mesma região aqui. - Caso contrário, a região precisa ser a mesma do
local selecionado para o job
(
LOCATION
).
- Se você incluir o parâmetro
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.
Use campos JSON para bloquear o acesso externo de todas as VMs
Para criar um job e usar campos no arquivo de configuração JSON para bloquear o acesso externo de todas as VMs, siga estas etapas:
Crie um arquivo JSON que especifique os detalhes de configuração do job. Para bloquear o acesso externo de todas as VMs, faça o seguinte:
Defina o campo
noExternalIpAddress
comotrue
.Especifique a rede do trabalho no Campos
network
esubnetwork
.
Por exemplo, para criar um job de script básico que bloqueia o acesso externo para todas as VMs, crie um arquivo JSON com o seguinte conteúdo.
{ "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 do projeto para a rede especificada:- Se você estiver usando uma rede VPC compartilhada, especifique o host projeto.
- Caso contrário, especifique o projeto atual.
NETWORK
: o nome de uma rede que fornece o acesso necessário para o job. A rede precisa ser uma rede VPC no projeto atual ou uma rede VPC compartilhada hospedada ou compartilhada com o projeto atual.REGION
: o região em que a sub-rede e as VMs para o job estão localizados:- Se você incluir o
campo
allowedLocations
para especificar o local permitido para as VMs do job, especifique a mesma região aqui. - Caso contrário, a região precisa ser a mesma do
local selecionado para o job
(
LOCATION
).
- Se você incluir o
campo
SUBNET
: o nome de um sub-rede que faz parte rede VPC e está localizado na mesma região que a para o 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 esse job.LOCATION
: o local que você quer para esse job.JSON_CONFIGURATION_FILE
: o caminho do 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 de 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 do seu projeto.LOCATION
: o local que você quer para esse job.JOB_NAME
: o nome que você quer para esse job.HOST_PROJECT_ID
: o ID do projeto do projeto para a rede especificada:- 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 em que a sub-rede e as VMs do job estão localizadas:- Se você incluir o parâmetro
Campo
allowedLocations
para especificar o local permitido para as VMs do job, especifique a mesma região aqui. - Caso contrário, a região precisa ser a mesma do
local selecionado para o job
(
LOCATION
).
- Se você incluir o parâmetro
Campo
SUBNET
: o nome de um sub-rede que faz parte rede VPC e está localizado na mesma região que a para o job.
Criar um job que bloqueia o acesso externo a um ou mais contêineres
Bloqueie o acesso externo a qualquer contêiner de um job ao criar o trabalho.
É possível bloquear o acesso externo a qualquer contêiner do job usando a CLI gcloud ou a API Batch.
gcloud
Para criar um job que bloqueia o acesso externo a um ou mais contêineres usando a CLI gcloud, siga estas etapas:
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
paratrue
.Por exemplo, para criar um job de contêiner básico que bloqueia o acesso externo ao contêiner, crie um arquivo JSON com o seguinte conteúdo.
{ "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 esse job.LOCATION
: o local que você quer para esse job.JSON_CONFIGURATION_FILE
: o caminho do 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
acesso 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 do seu projeto.LOCATION
: o local que você quer para esse job.JOB_NAME
: o nome que você quer para esse 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 acessar jobs e tarefas.