Bloquear o acesso externo de um job

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:

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

  1. Se você nunca usou o Batch antes, revise Introdução ao Batch e ativar o Batch. pré-requisitos para projetos e usuários.
  2. 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:

    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.

  3. 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.
    Para mais informações, consulte Criar e gerenciar redes VPC.

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:

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:

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

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

    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).
    • SUBNET: o nome de um sub-rede que faz parte rede VPC e está localizado na mesma região que a para o job.
  2. 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:

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

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

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