Bloqueie o acesso externo para uma tarefa

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:

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

  1. 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.
  2. 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:

    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.

  3. 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.
    Para mais informações, consulte o artigo Crie e faça a gestão de redes VPC.

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 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:

  1. 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"
      }
    }
    
  2. 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).
    • 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:

  1. 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:

    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).
    • 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.
  2. 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:

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).
  • 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:

  1. 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 como true.

    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"
      }
    }
    
  2. 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?