Este documento explica como configurar um job em lote para bloquear o acesso externo de 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. Você precisa bloquear o acesso externo das VMs de um job usando VMs sem endereços IP externo se alguma das seguintes condições for verdadeira:
- Seu projeto é restrito pela restrição de 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 APIs e 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 o Acesso privado do Google com o VPC Service Controls para o Batch, consulte Usar o VPC Service Controls e o Batch.
Como alternativa, se você não quiser bloquear todo o acesso externo direto de um job, poderá bloquear o acesso externo de todos os contêineres que um job executa.
Para mais informações sobre conceitos de rede e quando configurar a rede, consulte Visão geral da rede do Batch.
Antes de começar
- Se você nunca usou o Batch, consulte Introdução ao Batch e ative o Batch concluindo 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 do Batch (
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 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 com papéis personalizados ou outros papéis predefinidos.
- Editor de jobs do Batch (
-
Se você bloquear o acesso externo das 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 das VMs precisa atender aos seguintes requisitos:
- A rede é uma rede de nuvem privada virtual (VPC) que está no mesmo projeto que o job ou é uma rede VPC compartilhada hospedada ou compartilhada com o projeto do job.
- A rede inclui uma 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 das VMs de um job, a rede precisará usar Cloud NAT ou Acesso privado do Google para permitir o acesso aos domínios das APIs e dos serviços que o job usa. Por exemplo, todos os jobs usam as APIs Batch e Compute Engine e, com muita frequência, usam a API Cloud Logging.
Criar um job que bloqueie o acesso externo de todas as VMs
Bloqueie o acesso externo das VMs de um job ao criar o job. Ao bloquear o acesso externo de 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, siga as etapas abaixo para bloquear o acesso externo das 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:
- Usar flags da gcloud para bloquear o acesso externo de todas as VMs
- Usar campos JSON para bloquear o acesso externo de todas as VMs
Usar flags da gcloud para bloquear o acesso externo de todas as VMs
Para criar um job e usar flags da gcloud para bloquear o acesso externo do 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 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
gcloud batch jobs submitcomando. Para bloquear o acesso externo de todas as VMs, inclua as flags--no-external-ip-address,--networke--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/SUBNETSubstitua:
JOB_NAME: o nome desse job.LOCATION: o local desse job.JSON_CONFIGURATION_FILE: o caminho do arquivo JSON com os detalhes de configuração do job.HOST_PROJECT_ID: o ID do projeto da rede especificada:- 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 uma rede VPC compartilhada hospedada ou compartilhada com o projeto atual.REGION: a região em que a sub-rede do job e os recursos do Compute Engine do job estão localizados. Saiba mais em Locais.SUBNET: o nome de uma sub-rede que faz parte da rede VPC e está localizada na mesma região que os recursos do Compute Engine do job.
Usar 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
noExternalIpAddresscampo comotrue.Especifique a rede do job nos
networkesubnetworkcampos.
Por exemplo, para criar um job de script básico que bloqueie o acesso externo de 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 da rede especificada:- 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 em que a sub-rede do job e os recursos do Compute Engine do job estão localizados. Saiba mais em Locais.SUBNET: o nome de uma sub-rede que faz parte da rede VPC e está localizada na mesma região que os recursos do Compute Engine do job.
Crie o job usando o
gcloud batch jobs submitcomando.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILESubstitua:
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
jobs.create método
e especifique os detalhes de configuração do job.
Para bloquear o acesso externo de todas as VMs, faça o seguinte:
Defina o
noExternalIpAddresscampo comotrue.Especifique a rede do job nos
networkesubnetworkcampos.
Por exemplo, para criar um job de script básico que bloqueie o acesso externo de 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 da 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 do job e os recursos do Compute Engine do job estão localizados. Saiba mais em Locais.SUBNET: o nome de uma sub-rede que faz parte da rede VPC e está localizada na mesma região que os recursos do Compute Engine do job.
Criar um job que bloqueie o acesso externo de um ou mais contêineres
Bloqueie o acesso externo de qualquer contêiner de um job ao criar o job.
É possível bloquear o acesso externo de qualquer contêiner de um job usando a CLI gcloud ou a API Batch.
gcloud
Para criar um job que bloqueie o acesso externo de 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
blockExternalNetworkcampo comotrue.Por exemplo, para criar um job de contêiner básico que bloqueie o acesso externo do 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
gcloud batch jobs submitcomando.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILESubstitua:
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
jobs.create método
e especifique os detalhes de configuração do job.
Para cada contêiner no job que você quer restringir, defina o
blockExternalNetwork campo
como true.
Por exemplo, para criar um job de contêiner básico que bloqueie o acesso externo do 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 visualizar jobs e tarefas.