Bloquear o acesso externo a um job

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:

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

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

    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.

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

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

Para criar um job e usar flags da gcloud para bloquear o acesso externo do 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 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"
      }
    }
    
  2. Crie o job usando o gcloud batch jobs submit comando. Para bloquear o acesso externo de 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:

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

  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 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.
  2. Crie o job usando o gcloud batch jobs submit comando.

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

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:

  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 blockExternalNetwork campo como true.

    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"
      }
    }
    
  2. Crie o job usando o gcloud batch jobs submit comando.

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