Este documento explica como configurar uma tarefa em lote para bloquear o acesso externo para todas as respetivas VMs ou contentores específicos.
Bloquear o acesso externo de uma tarefa para cumprir os requisitos de rede ou melhorar a segurança. Tem de bloquear o acesso externo para as VMs de um trabalho através de VMs sem endereços IP externos se alguma das seguintes condições for verdadeira:
- O seu projeto está restrito pela restrição de política da organização
compute.vmExternalIpAccess
. A rede que especifica para a tarefa usa o acesso privado à Google para configurar a conetividade privada às APIs e aos serviços Google. O acesso privado à Google não tem efeito nas VMs que têm endereços IP externos.
Se a rede que especificar para a tarefa usar o acesso privado à Google com os VPC Service Controls para o Batch, consulte o artigo Use os VPC Service Controls e o Batch.
Em alternativa, se não quiser bloquear todo o acesso externo direto para uma tarefa, pode bloquear o acesso externo para todos os contentores que uma tarefa executa.
Para mais informações acerca dos conceitos de rede e quando configurar a rede, consulte a Vista geral da rede em lote.
Antes de começar
- Se nunca usou o Batch, reveja o artigo Comece a usar o Batch e ative o Batch concluindo os pré-requisitos para projetos e utilizadores.
-
Para receber as autorizações necessárias para criar uma tarefa que bloqueie o acesso externo, peça ao seu administrador para lhe conceder as seguintes funções de IAM:
-
Editor de tarefas em lote (
roles/batch.jobsEditor
) no projeto -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço da tarefa, que, por predefinição, é a conta de serviço predefinida do Compute Engine -
Para identificar a rede e a sub-rede de uma tarefa:
Compute Network Viewer (
roles/compute.networkViewer
) no projeto
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
-
Editor de tarefas em lote (
-
Se bloquear o acesso externo para as VMs de uma tarefa, tem de identificar a rede que quer usar para a tarefa. A rede que especificar para uma tarefa que
bloqueia o acesso externo para as respetivas VMs tem de cumprir os seguintes requisitos:
- A rede é uma rede da nuvem virtual privada (VPC) que está no mesmo projeto que a tarefa ou é uma rede da VPC partilhada alojada ou partilhada com o projeto da tarefa.
- A rede inclui uma sub-rede (sub-net) na localização onde quer executar a tarefa.
- A rede permite qualquer acesso necessário para o seu trabalho. Se bloquear o acesso externo para as VMs de um trabalho, a rede tem de usar o Cloud NAT ou o acesso privado à Google para permitir o acesso aos domínios das APIs e dos serviços que o seu trabalho usa. Por exemplo, todas as tarefas usam as APIs Batch e Compute Engine e, muitas vezes, usam a API Cloud Logging.
Crie uma tarefa que bloqueie o acesso externo para todas as VMs
Bloqueie o acesso externo para as VMs de um trabalho quando o estiver a criar. Quando bloqueia o acesso externo para todas as VMs em que um trabalho é executado, também tem de especificar uma rede e uma sub-rede que permitam que o trabalho aceda às APIs necessárias.
Se quiser usar um modelo de instância de VM ao criar esta tarefa, tem de especificar a rede e desativar os endereços IP externos no modelo de instância de VM. Caso contrário, siga estes passos para bloquear o acesso externo às VMs de uma tarefa através da CLI gcloud ou da API Batch.
gcloud
Para criar uma tarefa que bloqueie o acesso externo através da CLI gcloud, selecione uma das seguintes opções:
- Use flags gcloud para bloquear o acesso externo para todas as VMs
- Use campos JSON para bloquear o acesso externo para todas as VMs
Use flags do gcloud para bloquear o acesso externo para todas as VMs
Para criar uma tarefa e usar flags do gcloud para bloquear o acesso externo à tarefa, conclua os seguintes passos:
Crie um ficheiro JSON que especifique os detalhes de configuração da sua tarefa.
Por exemplo, para criar uma tarefa de script básica, crie um ficheiro 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 a tarefa através do comando
gcloud batch jobs submit
. Para bloquear o acesso externo para todas as VMs, inclua as flags--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 o seguinte:
JOB_NAME
: o nome desta tarefa.LOCATION
: a localização para este trabalho.JSON_CONFIGURATION_FILE
: o caminho para o ficheiro JSON com os detalhes de configuração da tarefa.HOST_PROJECT_ID
: o ID do projeto do projeto para a rede que especificar:- Se estiver a usar uma rede VPC partilhada, especifique o projeto anfitrião.
- Caso contrário, especifique o projeto atual.
NETWORK
: o nome de uma rede VPC no projeto atual ou uma rede VPC partilhada alojada ou partilhada com o projeto atual.REGION
: a região onde a sub-rede e as VMs para a tarefa estão localizadas:- Se incluir o campo
allowedLocations
para especificar a localização permitida para as VMs para o trabalho, tem de especificar a mesma região aqui. - Caso contrário, a região tem de ser a mesma que a localização selecionada para a tarefa (
LOCATION
).
- Se incluir o campo
SUBNET
: o nome de uma sub-rede que faz parte da rede da VPC e está localizada na mesma região que as VMs para a tarefa.
Use campos JSON para bloquear o acesso externo para todas as VMs
Para criar uma tarefa e usar campos no ficheiro de configuração JSON para bloquear o acesso externo para todas as VMs, conclua os seguintes passos:
Crie um ficheiro JSON que especifique os detalhes de configuração da sua tarefa. Para bloquear o acesso externo para todas as VMs, faça o seguinte:
Defina o campo
noExternalIpAddress
comotrue
.Especifique a rede para a tarefa nos campos
network
esubnetwork
.
Por exemplo, para criar uma tarefa de script básica que bloqueie o acesso externo para todas as VMs, crie um ficheiro 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 o seguinte:
HOST_PROJECT_ID
: o ID do projeto do projeto para a rede que especificar:- Se estiver a usar uma rede VPC partilhada, especifique o projeto anfitrião.
- Caso contrário, especifique o projeto atual.
NETWORK
: o nome de uma rede que fornece o acesso necessário para este trabalho. A rede tem de ser uma rede VPC no projeto atual ou uma rede VPC partilhada hospedada ou partilhada com o projeto atual.REGION
: a região onde a sub-rede e as VMs para a tarefa estão localizadas:- Se incluir o campo
allowedLocations
para especificar a localização permitida para as VMs para o trabalho, tem de especificar a mesma região aqui. - Caso contrário, a região tem de ser a mesma que a localização selecionada para a tarefa (
LOCATION
).
- Se incluir o campo
SUBNET
: o nome de uma sub-rede que faz parte da rede da VPC e está localizada na mesma região que as VMs para a tarefa.
Crie a tarefa através do comando
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua o seguinte:
JOB_NAME
: o nome que quer para esta tarefa.LOCATION
: a localização que quer para este trabalho.JSON_CONFIGURATION_FILE
: o caminho para o ficheiro JSON com os detalhes de configuração da tarefa.
API
Para criar uma tarefa através da API Batch, use o método
jobs.create
e especifique os detalhes de configuração da tarefa.
Para bloquear o acesso externo para todas as VMs, faça o seguinte:
Defina o campo
noExternalIpAddress
comotrue
.Especifique a rede para a tarefa nos campos
network
esubnetwork
.
Por exemplo, para criar uma tarefa de script básica que bloqueie o acesso externo para todas as VMs, faça o seguinte pedido 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 o seguinte:
PROJECT_ID
: o ID do projeto do seu projeto.LOCATION
: a localização que quer para este trabalho.JOB_NAME
: o nome que quer para esta tarefa.HOST_PROJECT_ID
: o ID do projeto do projeto para a rede que especificar:- Se estiver a usar uma rede VPC partilhada, especifique o projeto anfitrião.
- Caso contrário, especifique o projeto atual (
PROJECT_ID
).
NETWORK
: o nome de uma rede que fornece o acesso necessário para este trabalho. A rede tem de ser uma rede VPC no projeto atual ou uma rede VPC partilhada hospedada ou partilhada com o projeto atual.REGION
: a região onde a sub-rede e as VMs para a tarefa estão localizadas:- Se incluir o campo
allowedLocations
para especificar a localização permitida para as VMs para o trabalho, tem de especificar a mesma região aqui. - Caso contrário, a região tem de ser a mesma que a localização selecionada para a tarefa (
LOCATION
).
- Se incluir o campo
SUBNET
: o nome de uma sub-rede que faz parte da rede da VPC e está localizada na mesma região que as VMs para a tarefa.
Crie uma tarefa que bloqueie o acesso externo para um ou mais contentores
Bloquear o acesso externo para qualquer um dos contentores de uma tarefa quando cria a tarefa.
Pode bloquear o acesso externo para qualquer um dos contentores de tarefas através da CLI gcloud ou da API Batch.
gcloud
Para criar uma tarefa que bloqueie o acesso externo para um ou mais contentores através da CLI gcloud, conclua os seguintes passos:
Crie um ficheiro JSON que especifique os detalhes de configuração da sua tarefa. Para cada contentor na tarefa que quer restringir, defina o campo
blockExternalNetwork
comotrue
.Por exemplo, para criar uma tarefa de contentor básica que bloqueie o acesso externo ao contentor, crie um ficheiro 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 a tarefa através do comando
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua o seguinte:
JOB_NAME
: o nome que quer para esta tarefa.LOCATION
: a localização que quer para este trabalho.JSON_CONFIGURATION_FILE
: o caminho para o ficheiro JSON com os detalhes de configuração da tarefa.
API
Para criar uma tarefa através da API Batch, use o método
jobs.create
e especifique os detalhes de configuração da tarefa.
Para cada contentor na tarefa que quer restringir, defina o campo
blockExternalNetwork
como true
.
Por exemplo, para criar uma tarefa de contentor básica que bloqueie o acesso externo ao contentor, faça o seguinte pedido 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 o seguinte:
PROJECT_ID
: o ID do projeto do seu projeto.LOCATION
: a localização que quer para este trabalho.JOB_NAME
: o nome que quer para esta tarefa.
O que se segue?
- Se tiver problemas ao criar ou executar uma tarefa, consulte a secção Resolução de problemas.
- Saiba mais acerca das redes.
- Saiba mais sobre como criar uma tarefa.
- Saiba como ver serviços e tarefas.