Conectividade de rede particular

Nesta página, descrevemos como configurar o Integration Connectors para que você se conecte de maneira particular ao seu aplicativos de back-end e pressupõe que você esteja familiarizado com os seguintes conceitos:

Os conectores de integração oferecem suporte à conectividade com seus back-ends hospedados em uma rede privada. Para ativar a conectividade particular, use o Private Service Connect (PSC). O PSC permite a conexão particular com serviços em diferentes redes.

No caso dos Integration Connectors, do ponto de vista da rede, você é o produtor de serviços, e o Integration Connectors é o consumidor do serviço. Como produtor de serviços, você precisa configurar um anexo de serviço do PSC que os conectores de integração podem usar para consumir o serviço. Quando o anexo de serviço estiver pronto, será possível configurar a conexão para consumir o anexo de serviço usando um anexo de endpoint.

Anexos de endpoint

Os anexos de endpoint são recursos de conectores de integração que permitem que as conexões estabeleçam conectividade com seus aplicativos de back-end usando os anexos de serviço do PSC.

A imagem a seguir mostra um anexo de endpoint que permite uma conexão para estabelecer conectividade com um aplicativo de back-end por meio de um anexo de serviço PSC:

É possível criar o anexo de endpoint como um endereço IP ou um nome de host.

Crie um anexo de endpoint como um endereço IP

Para criar um anexo de endpoint como um endereço IP, use o console do Cloud ou pela linha de comando (gcloud). .

Console

Para criar um anexo de endpoint no console do Cloud, faça o seguinte:

  1. Abra a página Anexos de endpoint para o Integration Connectors.

    Acessar "Anexos de endpoint"

  2. Clique em Criar. A página Criar anexo de endpoint é aberta.
  3. Insira valores nos seguintes campos:
    • Nome: um nome para o anexo de endpoint. O nome precisa ser único. Pode haver nenhum outro anexo de endpoint com o mesmo nome, e não será possível alterá-lo posteriormente. O nome precisa começar com uma letra minúscula seguida por até 63 letras minúsculas. números ou hifens, mas não podem terminar com um hífen. O comprimento mínimo é 2.
    • ID do anexo de serviço: nome do anexo de serviço do PSC que você já tem. criados.
    • Descrição (opcional): insira uma descrição para o anexo do endpoint.
    • (Opcional) Rótulos: insira os rótulos de recursos como pares de chave-valor. Para mais informações sobre marcadores, consulte O que são marcadores?
    • (Opcional) Ativar o acesso global do endpoint: selecione essa opção se quiser enviar tráfego para seu back-end de uma conexão presente em qualquer região.

      Por padrão, o anexo de endpoint exige que a conexão e o back-end da mesma região. Portanto, se você ativar o acesso global para o endpoint, uma conexão presente em qualquer região pode enviar tráfego para seu back-end.

  4. Clique em Criar.

A coluna Endereço IP especifica o endereço IP do anexo de endpoint. É necessário usar esse endereço IP ao configurar um conector para conectividade particular.

gcloud

Para criar um anexo de endpoint na linha de comando, faça o seguinte:

  1. Acesse o recurso de anexo do serviço PSC:
    gcloud compute service-attachments list

    O comando retorna a lista de anexos de serviço. Exemplo:

      NAME       REGION   TARGET_SERVICE                                       CONNECTION_PREFERENCE
      demo-sa us-west1 k8s2-tcp-tgysilgj-apps-ingressgateway-fzdhwstg ACCEPT_AUTOMATIC

    Você vai precisar dessas informações nas etapas seguintes.

  2. Receba um token de autenticação antes de executar a API CreateEndpointAttachment:
    TOKEN="$(gcloud auth print-access-token)"
  3. Crie o anexo do endpoint usando a API CreateEndpointAttachment. Exemplo:
    curl -X POST -H "Authorization: Bearer $TOKEN" \
           -H "Content-Type: application/json" \
           -d '{
          "name": "projects/PROJECT_ID/locations/LOCATION/endpointAttachments/ENDPOINT_ATTACHMENT_NAME",
          "serviceAttachment": "projects/demo/serviceAttachments/?SERVICE_ATTACHMENT_NAME"
        }' \
           https://connectors.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpointAttachments?endpointAttachmentId=ENDPOINT_ATTACHMENT_NAME
      

    Em que:

    • LOCATION é a região do anexo de serviço. Por exemplo, us-west1.
    • PROJECT_ID é o projeto do Google Cloud em que você criou o anexo de serviço do PSC.
    • ENDPOINT_ATTACHMENT_NAME é o nome do anexo de endpoint. O nome precisa ser único. Não pode haver outros anexos de endpoints com o mesmo nome, e não é possível mudar o nome mais tarde. O nome deve começar com letra minúscula seguida por até 31 letras minúsculas, números ou hifens, mas não pode terminam com um hífen. O comprimento mínimo é 2.
    • SERVICE_ATTACHMENT_NAME: é o nome do anexo de serviço. Usar o PSC o nome da conta de serviço retornado pelo execute o comando gcloud compute service-attachments list.

    Depois que você chama a API, o Integration Connectors inicia uma operação de longa duração e que pode levar algum tempo para ser concluída. O endpoint anexo será criado depois que a operação for concluída com êxito.

  4. Receba o ID do projeto do diretório de serviços associado ao seu projeto do Google Cloud e adicione esse ID à lista de permissões do anexo de serviço.
  5. Verifique se o anexo do endpoint foi criado usando a API GetEndpointAttachment. Exemplo:
    curl -X GET -H "Authorization: Bearer $TOKEN" \
        https://connectors.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/endpointAttachments/ENDPOINT_ATTACHMENT_NAME
      

    A API retorna uma resposta semelhante a esta:

    {
        "name": "projects/demo-project/locations/us-central1/endpointAttachments/demo-ea",
        "createTime": "2023-04-17T04:34:59.569527046Z",
        "updateTime": "2023-04-17T04:37:25.189074195Z",
        "description": "demo endpoint attachment",
        "serviceAttachment": "projects/demo-project/regions/us-central1/serviceAttachments/demo-sa",
        "endpointIp": "10.0.0.0",
        "labels": {"team":"sre"},
      }

    O endereço IP do anexo de endpoint está disponível no campo endpointIp. Neste exemplo de resposta, o endereço IP é 10.0.0.0. Use esse endereço IP ao configurar um conector para conectividade particular.

Se a criação do anexo de endpoint for bem-sucedida, o anexo recém-criado será listado na página Anexos de endpoint, semelhante à imagem abaixo:

endpoint-attachment endpoint-attachment

As etapas, descritas até agora, mostram como criar um anexo de endpoint como um endereço IP. No entanto, Também é possível criar um anexo de endpoint como nome do host e usá-lo para configurar um conector para conectividade particular. Para entender como criar um anexo de endpoint com um nome de host, consulte Criar um anexo de endpoint como um nome de host.

Criar um anexo de endpoint como nome do host

Para criar um anexo de endpoint como um nome de host, execute as seguintes tarefas:

  1. Crie um anexo de endpoint como endereço IP. Para mais informações, consulte Crie um anexo de endpoint como endereço IP.
  2. Crie uma zona gerenciada privada do Cloud DNS em qualquer um dos seus projetos do Google Cloud.

    Nessa zona DNS, você precisa adicionar um nome de host que será usado na configuração do conector e mapeá-lo para o endereço IP do anexo do endpoint que você recebeu na etapa 1. Para saber como criar uma zona gerenciada particular do Cloud DNS, consulte Criar uma zona particular e Adicionar um registro.

  3. Criar uma zona gerenciada do Integration Connectors no projeto do Google Cloud que você usa para os Integration Connectors. A zona gerenciada dos conectores de integração (zona de peering) se comunica com a zona particular gerenciada do Cloud DNS (criada na etapa 2) para resolução de nome.

    Antes de criar a zona gerenciada, você precisa conceder os seguintes papéis e permissões:

    • Conceda a permissão connectors.managedZones.create para o usuário criando a zona gerenciada do Integration Connectors.

      A permissão connectors.managedZones.create é disponível no papel do IAM roles/connectors.admin ou no papel do IAM roles/connectors.managedZonesAdmin. Para informações sobre os vários papéis do IAM e as permissões correspondentes disponíveis para os conectores de integração, consulte Papéis e permissões do IAM para conectores de integração.

    • Conceda o papel role/dns.peer à conta de serviço service-PROJECT_NUMBER@gcp-sa-connectors.iam.gserviceaccount.com dos conectores de integração.

      Se o projeto do Google Cloud no Cloud DNS for diferente dos Integration Connectors projeto do Google Cloud e conceda o papel roles/dns.peer ao Conta de serviço do Integration Connectors no projeto do Google Cloud do Cloud DNS. Por exemplo: você quer criar a zona gerenciada do Integration Connectors no projeto 12345 do Google Cloud e a do Cloud DNS está no projeto 67890 do Google Cloud. Nesse caso, conceda o papel roles/dns.peer à conta de serviço service-12345@gcp-sa-connectors.iam.gserviceaccount.com no projeto 67890 do Google Cloud.

    Para criar uma zona gerenciada pelos Conectores de integração, use o console do Cloud ou a linha de comando (gcloud).

    Console

    Para criar uma zona gerenciada do Integration Connectors no console do Cloud, faça o seguinte:

    1. Acesse a página "Zonas gerenciadas" para os conectores de integração.

      Acessar "Zonas gerenciadas"

    2. Insira valores para os seguintes campos:
      1. Nome: um nome para a zona gerenciada.
      2. Nome do DNS de destino: nome completo do Cloud DNS para o qual você está criando a zona gerenciada (peering). Por exemplo, server8.stage.user.private.
      3. Projeto de destino: nome do projeto do Google Cloud que tem a zona particular do Cloud DNS.
      4. Rede de destino: nome da rede VPC em que a zona particular do Cloud DNS é mantida.
      5. (Opcional) Descrição: insira uma descrição para o anexo do endpoint.
      6. (Opcional) Rótulos: insira rótulos de recursos como pares de chave-valor. Para mais informações sobre marcadores, consulte O que são marcadores?
    3. Clique em Criar.

    gcloud

    Para criar uma zona gerenciada de conectores de integração na linha de comando, faça o seguinte:

    1. Receba um token de autenticação antes de executar a API CreateManagedZone:
      TOKEN="$(gcloud auth print-access-token)"
    2. Crie a zona gerenciada usando a API CreateManagedZone. Exemplo:
      curl -X POST -H "Authorization: Bearer $TOKEN" \
        -H "Content-Type: application/json" \
        -d '{
          "description": "DESCRIPTION",
          "dns": "DNS_NAME",
          "target_project": "TARGET_PROJECT",
          "target_vpc": "TARGET_VPC"
        }' \
        https://connectors.googleapis.com/v1/projects/PROJECT_ID/locations/global/managedZones?managedZoneId=MANAGED_ZONE_NAME
        

      Em que:

      • DESCRIPTION é uma descrição opcional da zona gerenciada.
      • DNS_NAME: nome completo do Cloud DNS para o qual você está criando a zona gerenciada (de peering). Por exemplo, server8.stage.user.private.
      • TARGET_PROJECT é o nome do projeto do Google Cloud que tem a zona particular do Cloud DNS.
      • TARGET_NETWORK é o nome da rede VPC em que a zona particular do Cloud DNS é mantida.
      • PROJECT_ID é o projeto do Google Cloud que você está usando para os Conectores de integração.
      • MANAGED_ZONE_NAME é o nome da zona gerenciada. O nome precisa ser único. Não é possível criar outras zonas gerenciadas com o mesmo nome, e não é possível mudar o nome depois. O nome precisa começar com uma letra minúscula seguida por até 63 letras minúsculas, números ou hifens, mas não pode terminar com um hífen. O comprimento mínimo é 2.

      Depois que você chamar a API, os conectores de integração vão iniciar uma operação de longa duração, que pode levar algum tempo para ser concluída. A página zona será criada depois que a operação for concluída com êxito.

    3. Verifique se a zona gerenciada foi criada usando a API GetManagedZone. Exemplo:
      curl -X GET -H "Authorization: Bearer $TOKEN" \
          https://connectors.googleapis.com/v1/projects/PROJECT_ID/locations/global/managedZones/MANAGED_ZONE_NAME
        

      A API retorna uma resposta semelhante a esta:

      {
          "name": "projects/demo-project/locations/global/managedZones/demo-mz",
          "createTime": "2023-04-17T04:34:59.569527046Z",
          "updateTime": "2023-04-17T04:37:25.189074195Z",
          "description": "demo managed zone",
          "dns": "api.private.service.com.",
          "targetVpc": "target-project-vpc",
          "targetProject": "target-project"
        }

Se a criação da zona gerenciada for bem-sucedida, a zona gerenciada recém-criada será listada na página Zonas gerenciadas de forma semelhante à imagem a seguir:

zona gerenciada managed-zone

Adicionar o projeto Integration Connectors à lista de permissões em um anexo de serviço

É possível criar o anexo de serviço do PSC para que ele aceite solicitações apenas dos projetos do Google Cloud especificados. No entanto, para fazer isso, você precisa do ID do projeto do diretório de serviços associado ao seu projeto do Google Cloud. Para conferir o ID do projeto do diretório de serviços, use a API List Connections, conforme mostrado no exemplo abaixo.

Sintaxe

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

Substitua:

  • CONNECTORS_PROJECT_ID: o ID do projeto do Google Cloud em que você criou a conexão.

Exemplo

Este exemplo recebe o ID do projeto do diretório de serviços do projeto connectors-test do Google Cloud.

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

A execução desse comando no terminal vai mostrar uma resposta semelhante a esta:

.....
{
  "connections": [
    {
      "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
      "createTime": "2022-10-07T09:02:31.905048520Z",
      "updateTime": "2022-10-07T09:22:39.993778690Z",
      "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
      "status": {
        "state": "ACTIVE"
      },
      "configVariables": [
        {
          "key": "project_id",
          "stringValue": "connectors-test"
        },
        {
          "key": "dataset_id",
          "stringValue": "testDataset"
        }
      ],
      "authConfig": {},
      "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
      "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
      "nodeConfig": {
        "minNodeCount": 2,
        "maxNodeCount": 50
      }
    },
....

Na saída de exemplo, para o projeto connectors-test do Google Cloud, o ID do projeto do diretório de serviço é abcdefghijk-tp.

Verificar a conexão do anexo de endpoint

Para verificar a conexão de anexo do endpoint, faça o seguinte:

  1. Na página Anexos do endpoint, clique no nome do anexo de endpoint que você criou.
  2. Na página Detalhes do anexo do endpoint que aparece, confira o campo Estado da conexão. Se o estado for Accepted, o anexo de endpoint está configurado corretamente e a conexão do Private Service Connect foi estabelecida.

    Para informações sobre outros status, consulte Status de conexão.

Configurar uma conexão para usar o anexo do endpoint

No Integration Connectors, quando você cria uma nova conexão ou atualiza uma existente, na seção "Destinos", selecione Anexo do endpoint como Tipo de destino e escolha o anexo de endpoint que criou na lista Anexo do endpoint.

Se você criou uma zona gerenciada, selecione Endereço do host como Tipo de destino e use o registro A criado ao criar a zona gerenciada.

Conectividade a vários tipos de redes privadas

Embora a conectividade particular nos Integration Connectors sempre seja feita por meio de um anexo de serviço do PSC, as etapas para estabelecer a conectividade particular variam um pouco de acordo com o ambiente. As seções a seguir descrevem como estabelecer a conectividade privada nos vários ambientes: