Bloquear o acesso externo de um job

Neste documento, explicamos como configurar um job do Batch para bloquear o acesso externo a 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. Bloqueie o acesso externo às VMs de um job usando VMs sem endereços IP externo se alguma das condições a seguir for verdadeira:

Como alternativa, para não bloquear todo o acesso externo direto de um job, é possível bloquear o acesso externo a 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

Criar um job que bloqueie o acesso externo para todas as VMs

Bloqueie o acesso externo às VMs de um job ao criá-lo. Ao bloquear o acesso externo a 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, use as etapas a seguir para bloquear o acesso externo às 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 sinalizações da gcloud para bloquear o acesso externo a todas as VMs

Para criar um job e usar sinalizações da gcloud para bloquear o acesso externo a ele, siga as etapas a seguir:

  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 comando gcloud batch jobs submit. Para bloquear o acesso externo a 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 deste job.
    • LOCATION: o local deste job.
    • JSON_CONFIGURATION_FILE: o caminho para o arquivo JSON com os detalhes de configuração do job.
    • HOST_PROJECT_ID: o ID do projeto para a rede que você especificar:
      • 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 de uma rede VPC compartilhada hospedada ou compartilhada com o projeto atual.
    • REGION: a região onde a sub-rede e as VMs do job estão localizadas:
      • Se você incluir o campo allowedLocations para especificar o local permitido das VMs para o job, especifique a mesma região aqui.
      • Caso contrário, a região precisa ser o mesmo 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.

Usar campos JSON para bloquear o acesso externo a todas as VMs

Para criar um job e usar campos no arquivo de configuração JSON para bloquear o acesso externo a todas as VMs, conclua as seguintes etapas:

  1. Crie um arquivo JSON que especifique os detalhes de configuração do job. Para bloquear o acesso externo a todas as VMs, faça o seguinte:

    Por exemplo, para criar um job de script básico que bloqueie o acesso externo para 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 para a rede que você especificar:
      • 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 onde a sub-rede e as VMs do job estão localizadas:
      • Se você incluir o campo allowedLocations para especificar o local permitido das VMs para o job, especifique a mesma região aqui.
      • Caso contrário, a região precisa ser o mesmo 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.
  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 este job.
    • LOCATION: o local que você quer para esse job.
    • JSON_CONFIGURATION_FILE: o caminho para o 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 a 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.
  • LOCATION: o local que você quer para a vaga.
  • JOB_NAME: o nome que você quer para este job.
  • HOST_PROJECT_ID: o ID do projeto para a rede que você especificar:
    • 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 onde a sub-rede e as VMs do job estão localizadas:
    • Se você incluir o campo allowedLocations para especificar o local permitido das VMs para o job, especifique a mesma região aqui.
    • Caso contrário, a região precisa ser o mesmo 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.

Criar um job que bloqueie o acesso externo para um ou mais contêineres

Bloqueie o acesso externo a qualquer um dos contêineres de um job ao criá-lo.

É possível bloquear o acesso externo a qualquer um dos contêineres de um job usando a CLI gcloud ou a API Batch.

gcloud

Para criar um job que bloqueie o acesso externo a um ou mais contêineres usando a CLI gcloud, conclua as etapas a seguir:

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

    Por exemplo, para criar um job básico de contêiner que bloqueie o acesso externo ao 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 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 este job.
    • LOCATION: o local que você quer para esse job.
    • JSON_CONFIGURATION_FILE: o caminho para o 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 o acesso externo 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.
  • LOCATION: o local que você quer para a vaga.
  • JOB_NAME: o nome que você quer para este job.

A seguir