Acessar serviços gerenciados usando o Private Service Connect

O Private Service Connect permite que você se conecte a produtores de serviços usando endpoints com endereços IP internos na sua rede VPC.

Neste documento, você verá como usar os endpoints do Private Service Connect para se conectar a serviços compatíveis em outra rede VPC. É possível se conectar aos seus próprios serviços ou aos fornecidos por outros produtores de serviços. Consulte Como publicar serviços para mais informações.

Papéis

O papel do IAM a seguir fornece as permissões necessárias para executar as tarefas neste guia.

Tarefa Papéis
Criar um endpoint do Private Service Connect Ambos os papéis:
Administrador de rede do Compute (roles/compute.networkAdmin) e
EDitor do Diretório de serviços (roles/servicedirectory.editor)
Configurar de maneira automática ou manual as entradas DNS de um endpoint do Private Service Connect Administrador do DNS (roles/dns.admin)

Antes de começar

  • Você precisa ativar a API Compute Engine no projeto.

  • Você precisa ativar a API Service Directory no seu projeto.

  • Você precisa ativar a API Cloud DNS no seu projeto.

  • As regras de firewall de saída precisam permitir o tráfego para o endereço IP interno do endpoint do Private Service Connect. A regra de firewall de saída de permissão implícita permite a saída para qualquer endereço IP de destino.

    Se você tiver criado regras de firewall de negação de saída na rede VPC ou criado políticas de firewall hierárquicas que modificam o comportamento de saída implícito permitido, o acesso ao endpoint poderá ser afetado. Crie uma regra ou política de firewall específica de permissão de saída para permitir o tráfego para o destino de endereço IP interno do endpoint do serviço.

  • É necessário ter o URI do anexo de serviço para o serviço. Por exemplo, projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME.

  • Se você estiver criando um endpoint do Private Service Connect em um projeto protegido por um perímetro do VPC Service Controls que restrinja compute.googleapis.com, servicedirectory.googleapis.com ou dns.googleapis.com, será necessária uma configuração extra. É preciso criar regras de entrada e saída para o VPC Service Controls antes de criar o endpoint. Para mais informações, consulte Como configurar regras de entrada e saída para o VPC Service Controls.

Limitações

  • Os endpoints do Private Service Connect não são acessíveis em redes VPC com peering.

  • Não é possível enviar solicitações de um ambiente local conectado a uma VPC usando anexos do Cloud Interconnect (VLANs) para um endpoint do Private Service Connect usado para acessar serviços{101 }em outra rede VPC.

    Para mais informações sobre como acessar os endpoints do Private Service Connect em ambientes locais conectados com o Cloud VPN, consulte Como usar o Private Service Connect em hosts locais.

  • O espelhamento de pacotes não pode espelhar pacotes entre VMs e endpoints do Private Service Connect que se conectam a um serviço publicado.

Configuração automática de DNS

Se houver as seguintes configurações, as entradas DNS serão criadas automaticamente para os endpoints do Private Service Connect:

  • O produtor de serviço configurou um nome de domínio para o serviço.

  • O endpoint do Private Service Connect é registrado com um namespace do Diretório de serviços.

    Todos os novos endpoints são registrados automaticamente no Diretório de serviços, mas os mais antigos podem não ser registrados.

Se as duas configurações estiverem presentes, quando o endpoint do Private Service Connect for criado, uma zona DNS do diretório de serviços será criada com o nome: NAMESPACE--REGION. Essa zona particular armazena entradas de DNS para serviços encontrados no namespace NAMESPACE do Diretório de serviços, na região REGION.

Configuração automática de DNS para endpoints do Private Service Connect usando o Diretório de serviços (clique para ampliar)

Depois de criar o endpoint do Private Service Connect, é possível verificar se uma zona DNS do diretório de serviços foi criada. Se a zona DNS do diretório de serviços não for criada, você poderá criar manualmente uma configuração semelhante. Para mais informações, consulte Visualizar zonas do DNS do diretório de serviços.

Se você não quiser que essas entradas de DNS sejam criadas, siga um destes procedimentos:

  • Se você não estiver usando o Cloud DNS para outra finalidade, desative a API do Cloud DNS ou remova as permissões necessárias para o Cloud DNS.

  • Aguarde a criação da zona de DNS e depois exclua a zona DNS manualmente.

    Se você preferir configurar o DNS manualmente, consulte Configurar o DNS manualmente.

Criar um endpoint do Private Service Connect

Um endpoint do Private Service Connect se conecta a serviços em outra rede VPC usando uma regra de encaminhamento do Private Service Connect. Cada regra de encaminhamento é contabilizada na cota por projeto das regras de encaminhamento do Private Service Connect para acessar serviços em outra rede VPC.

Ao usar o Private Service Connect para se conectar a serviços em outra rede VPC, você escolhe um endereço IP em uma sub-rede na sua rede VPC.

O endereço IP precisa estar na mesma região que o anexo do serviço do produtor de serviços. O endereço IP é contabilizado na cota do projeto para endereços IP internos.

Quando você cria um endpoint do Private Service Connect, ele é registrado automaticamente no Diretório de serviços, usando um namespace escolhido por você ou o namespace padrão, goog-psc-default.

Console

  1. No Console do Google Cloud, acesse Private Service Connect.

    Acessar a página "Private Service Connect"

  2. Clique na guia Endpoints conectados.

  3. Clique em Conectar endpoint.

  4. Em Destino, selecione Serviço publicado.

  5. Em Serviço de destino, digite o URI do anexo de serviço ao qual você quer se conectar.

    O URI do anexo de serviço está neste formato: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

  6. Em Nome do endpoint, digite um nome para usar o endpoint.

  7. Selecione uma Rede para o endpoint.

  8. Selecione uma Sub-rede para o endpoint.

  9. Selecione um Endereço IP para o endpoint. Se você precisar de um novo endereço IP, crie um:

    1. Clique no menu suspenso Endereço IP e selecione Criar endereço IP.
    2. Digite um Nome e uma Descrição opcional para o endereço IP.
    3. Em Endereço IP estático, selecione Atribuir automaticamente ou Quero escolher.

      Se você selecionou Quero escolher, insira o Endereço IP personalizado que quer usar.

    4. Clique em Reservar.

  10. Selecione um Namespace na lista suspensa ou crie um novo namespace.

    A Região é preenchida com base na sub-rede selecionada.

  11. Clique em Adicionar endpoint.

gcloud

  1. Reserve um endereço IP interno para atribuir ao endpoint.

    gcloud compute addresses create ADDRESS_NAME \
        --region=REGION \
        --subnet=SUBNET
    

    Substitua:

    • ADDRESS_NAME: o nome a ser atribuído ao endereço IP reservado.

    • REGION: a região do endereço IP do endpoint. Precisa ser a mesma região que contém o anexo de serviço do produtor de serviço.

    • SUBNET: o nome da sub-rede do endereço IP do endpoint.

  2. Encontre o endereço IP reservado.

    gcloud compute addresses list --filter="name=ADDRESS_NAME"
    
  3. Crie uma regra de encaminhamento para conectar o endpoint ao anexo de serviço do produtor de serviço.

    gcloud compute forwarding-rules create ENDPOINT_NAME \
        --region=REGION \
        --network=NETWORK_NAME \
        --address=ADDRESS_NAME \
        --target-service-attachment=SERVICE_ATTACHMENT \
        [ --service-directory-registration=projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE ]
    

    Substitua:

    • ENDPOINT_NAME: o nome a ser atribuído ao endpoint.

    • REGION: a região do endpoint. Precisa ser a mesma região que contém o anexo de serviço do produtor de serviço.

    • NETWORK_NAME: o nome da rede VPC do endpoint.

    • ADDRESS_NAME: o nome do endereço reservado.

    • SERVICE_ATTACHMENT: o URI do anexo de serviço do produtor de serviço. Por exemplo: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

    • PROJECT_ID: o ID do projeto.

    • NAMESPACE: o namespace do Diretório de serviços que você quer usar. Se você especificar um namespace que não existe, o namespace será criado.

      Se você omitir a sinalização --service-directory-registration, o namespace padrão de goog-psc-default será usado.

API

  1. Reserve um endereço IP interno para atribuir ao endpoint.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/region/REGION/addresses
    
    {
      "name": ADDRESS_NAME,
      "addressType": "INTERNAL",
      "subnetwork": SUBNET_URI
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto.

    • ADDRESS_NAME: o nome a ser atribuído ao endereço IP reservado.

    • SUBNET_URI: a sub-rede do endereço IP. Use o método network.list ou gcloud compute networks subnets list --uri para encontrar os URLs das suas redes.

  2. Crie uma regra de encaminhamento para conectar o endpoint aos serviços e APIs do Google.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules
    {
      "name": ENDPOINT_NAME,
      "IPAddress": ADDRESS_URI,
      "target": SERVICE_ATTACHMENT,
      "network": NETWORK_URI,
      "serviceDirectoryRegistrations": [
          {
              "namespace": NAMESPACE,
          }
      ],
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto.

    • REGION: a região do endpoint.

    • ENDPOINT_NAME: o nome a ser atribuído ao endpoint.

    • ADDRESS_URI: o URL do endereço reservado na rede associada. Use o método endereços.list ou gcloud compute addresses list --uri para encontrar o URL do seu endereço reservado.

    • SERVICE_ATTACHMENT: o URI do anexo de serviço do produtor de serviços. Por exemplo: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

    • NETWORK_URI: a rede VPC do endpoint. Use o método network.list ou gcloud compute networks list --uri para encontrar o URI da sua rede.

    • NAMESPACE: o namespace do endpoint. Se você especificar um namespace que não existe, o namespace será criado. Se você omitir o campo namespace, o namespace padrão de goog-psc-default será atribuído.

Configurar regras de entrada e saída para o VPC Service Controls

Se você estiver criando um endpoint do Private Service Connect em um projeto protegido por um perímetro do VPC Service Controls que restrinja compute.googleapis.com, servicedirectory.googleapis.com ou dns.googleapis.com, será necessária uma configuração extra. Antes de criar um endpoint do Private Service Connect, solicite ao produtor de serviços as seguintes informações:

  • PRODUCER_PROJECT_NUMBER: o número do projeto que contém o anexo do serviço.

  • PRODUCER_SERVICE_ACCOUNT (opcional): o nome da conta de serviço que criou o anexo de serviço, se você quiser configurar uma regra de entrada que restringe o acesso por conta.

Use essas informações para criar regras de entrada e saída que permitam a conexão entre o endpoint do Private Service Connect e o anexo de serviço.

Para informações sobre como configurar regras de entrada e saída, consulte Como configurar políticas de entrada e saída.

  1. Configure uma regra de saída que permita a saída do projeto do consumidor para o projeto do produtor PRODUCER_PROJECT_NUMBER.

    - egressFrom:
        identityType: ANY_IDENTITY
      egressTo:
        operations:
        - serviceName: 'compute.googleapis.com'
          methodSelectors:
          - method: 'ServiceAttachmentsService.Insert'
          - method: 'ServiceAttachmentsService.Patch'
          - method: 'RegionForwardingRulesService.Insert'
        - serviceName: 'servicedirectory.googleapis.com'
          methodSelectors:
          - method: '*'
        - serviceName: 'dns.googleapis.com'
          methodSelectors:
          - method: '*'
        resources:
        - 'projects/PRODUCER_PROJECT_NUMBER'
    
  2. Crie uma das seguintes regras de entrada.

    • Este exemplo de regra de entrada permite que o produtor do serviço atualize um anexo de serviço que foi criado por PRODUCER_SERVICE_ACCOUNT para adicionar seu projeto à lista de aceitação.

      - ingressFrom:
          sources:
          - accessLevel: '*' # All Sources
          identities: serviceAccount: PRODUCER_SERVICE_ACCOUNT
        ingressTo:
          operations:
          - serviceName: 'compute.googleapis.com'
            methodSelectors:
            - method: 'ServiceAttachmentsService.Patch'
          - serviceName: 'servicedirectory.googleapis.com'
            methodSelectors:
            - method: '*'
          - serviceName: 'dns.googleapis.com'
            methodSelectors:
            - method: '*'
          resources:
          - '*'
      
    • Este exemplo de regra de entrada permite que o fornecedor de serviços atualize um anexo de serviço criado por qualquer conta para adicionar seu projeto à lista de aceitação.

      - ingressFrom:
          sources:
          - accessLevel: '*' # All Sources
          identityType: ANY_IDENTITY
        ingressTo:
          operations:
          - serviceName: 'compute.googleapis.com'
            methodSelectors:
            - method: 'ServiceAttachmentsService.Patch'
          - serviceName: 'servicedirectory.googleapis.com'
            methodSelectors:
            - method: '*'
          - serviceName: 'dns.googleapis.com'
            methodSelectors:
            - method: '*'
          resources:
          - '*'
      

Depois que as regras de entrada e saída estiverem configuradas, será possível criar um endpoint do Service Service particular que se conecta a um anexo de serviço no projeto PRODUCER_PROJECT_NUMBER.

Ver zonas de DNS do Diretório de serviços

Se os pré-requisitos da configuração automática de DNS forem atendidos, uma zona DNS será criada com um nome no formato NAMESPACE--REGION.

Console

  1. No Console do Cloud, acesse a página de zonas do Cloud DNS.

    Acessar zonas do Cloud DNS

  2. Procure uma zona particular com o nome NAMESPACE--REGION.

gcloud

  • Execute o seguinte comando para listar todas as zonas DNS particulares:

    gcloud dns managed-zones list \
        --filter="visibility=private"
    
  • Execute o comando a seguir para ver os detalhes de uma zona com o nome NAMESPACE--REGION.

    gcloud dns managed-zones describe NAMESPACE--REGION
    

Se a zona não estiver presente, veja os detalhes do endpoint do Private Service Connect e verifique se a configuração do endpoint inclui um valor para o namespace.

Listar endpoints

É possível listar todos os endpoints do Private Service Connect configurados.

Console

  1. No Console do Google Cloud, acesse a página do Private Service Connect.

    Acessar a página "Private Service Connect"

  2. Clique na guia Endpoints conectados.

    Os endpoints do Private Service Connect são exibidos.

gcloud

gcloud compute forwarding-rules list  \
    --filter 'target~serviceAttachments'

A resposta será semelhante a:

NAME  REGION  IP_ADDRESS  IP_PROTOCOL  TARGET
RULE          IP          TCP          REGION/serviceAttachments/SERVICE_NAME

API

Essa chamada de API retorna todas as regras de encaminhamento, não apenas os endpoints do Private Service Connect usados para acessar os serviços.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules

Substitua:

  • PROJECT_ID: o projeto que contém o endpoint.
  • REGION: a região do endpoint.

Ver detalhes do endpoint

É possível visualizar todos os detalhes de configuração de um endpoint do Private Service Connect.

O endpoint pode ter um dos seguintes status:

  • Pendente: o endpoint está configurado para se conectar a um serviço que requer aprovação, e a aprovação ainda não foi concedida ao projeto.

  • Aceito: o endpoint está em um projeto aprovado para se conectar ao serviço.

  • Rejeitado: o endpoint está em um projeto sem permissão para se conectar ao serviço.

  • Fechado: o endpoint está conectado a um anexo de serviço que foi excluído.

Console

  1. No Console do Google Cloud, acesse a página do Private Service Connect.

    Acessar a página "Private Service Connect"

  2. Clique na guia Endpoints conectados.

  3. Clique no endpoint que você quer visualizar.

gcloud

gcloud compute forwarding-rules describe \
    ENDPOINT_NAME --region=REGION

Substitua:

  • ENDPOINT_NAME: o nome do endpoint.
  • REGION: a região do endpoint.

API

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/ENDPOINT_NAME

Substitua:

  • PROJECT_ID: o projeto que contém o endpoint.
  • REGION: a região do endpoint.
  • ENDPOINT_NAME: o nome do endpoint.

Como rotular um endpoint

É possível gerenciar rótulos para endpoints do Private Service Connect. Consulte Como rotular recursos para mais informações.

Como excluir um endpoint

É possível excluir um endpoint do Private Service Connect.

No entanto, as seguintes configurações do diretório de serviços não são excluídas quando você exclui o endpoint:

  • Namespace do diretório de serviços
  • Zona de DNS do Diretório de serviços

O namespace do Diretório de serviços e a zona DNS do Diretório de serviços podem ser usados por outros serviços. Verifique se o namespace está vazio antes de excluir o namespace do Diretório de serviços ou excluir a zona de DNS do Diretório de serviços.

Console

  1. No Console do Google Cloud, acesse Private Service Connect.

    Acessar a página "Private Service Connect"

  2. Clique na guia Endpoints conectados.

  3. Selecione o endpoint do Private Service Connect que você quer excluir e clique em Excluir.

gcloud

    gcloud compute forwarding-rules delete \
        ENDPOINT_NAME --region=REGION

Substitua:

  • ENDPOINT_NAME: o nome do endpoint.
  • REGION: a região do endpoint.

API

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/ENDPOINT_NAME

Substitua:

  • PROJECT_ID: o projeto que contém o endpoint.
  • REGION: a região do endpoint.
  • ENDPOINT_NAME: o nome do endpoint.

Outras maneiras de configurar o DNS

Se os pré-requisitos da configuração automática de DNS não forem atendidos, será possível criar entradas DNS de outras maneiras:

Configurar uma zona de DNS do diretório de serviços

Se um endpoint do Private Service Connect estiver registrado no Diretório de serviços, mas o serviço publicado ao qual ele se conecta não tiver um nome de domínio configurado, nenhuma alteração de DNS será feita.

Se você quiser replicar a configuração automática de DNS, poderá configurar manualmente uma zona DNS do Diretório de serviços apoiada pelo namespace do Diretório de serviços. Após a criação da zona, as entradas DNS são criadas automaticamente pelo endpoint do Private Service Connect.

Crie uma zona do Diretório de serviços com a seguinte configuração:

  • Nome da zona: especifique NAMESPACE--REGION, em que NAMESPACE é o namespace em que o endpoint do Private Service Connect é registrado e REGION é a região em que o endpoint é criado.

  • Nome do DNS: o domínio DNS que o fornecedor de serviços está usando para os serviços publicados. Consulte o produtor de serviços para saber mais.

    O nome do DNS pode ter o formato REGION.p.DOMAIN. Por exemplo, se o domínio público do produtor de serviços for example.com e o serviço publicado estiver em us-west1, recomendamos que ele disponibilize o serviço usando os nomes de domínio us-west1.p.example.com. Inclua um ponto à direita, por exemplo, us-west1.p.example.com.

  • Namespace do diretório de serviços: o namespace que você configurou para este endpoint.

Veja os detalhes do endpoint do Private Service Connect para encontrar o namespace e a região do diretório de serviços.

Com essa configuração, se você tiver configurado uma zona DNS do diretório de serviços com o nome DNS us-west1.p.example.com e criado um endpoint do Private Service Connect chamado analytics, um registro DNS para analytics.us-west1.p.example.com é criado automaticamente.

Registrar um endpoint do Private Service Connect com o diretório de serviços manualmente

Novos endpoints do Private Service Connect são registrados automaticamente no Diretório de serviços. No entanto, se um endpoint do Private Service Connect tiver sido criado antes da ativação do registro automático com o Diretório de serviços, talvez essa configuração esteja ausente.

É possível excluir o endpoint do Private Service Connect e criar um novo, que é registrado no Diretório de serviços automaticamente.

Ou então, siga estas etapas para registrar uma instância do Private Service Connect atual com um namespace do diretório de serviços.

  1. Crie um namespace do Diretório de serviços para o endpoint do Private Service Connect, NAMESPACE.

  2. Crie um serviço do Diretório de serviços para o endpoint do Private Service Connect, SERVICE_NAME.

    No serviço, use o mesmo nome da regra de encaminhamento usada para o endpoint do Private Service Connect, ENDPOINT_NAME.

  3. Crie um endpoint do Diretório de serviços usando o nome default e use o endereço IP e a porta (443) do endpoint do Private Service Connect.

Depois de registrar o endpoint do Private Service Connect no Diretório de serviços, siga as instruções para Configurar uma zona do Diretório de serviços.

Configurar o DNS manualmente

Se você tiver impedido a configuração automática de DNS ou se ela não estiver ativada na configuração, poderá usar o Cloud DNS para criar registros DNS manualmente.

Para mais informações, consulte as seguintes páginas:

  • Controle de acesso: o papel de Administrador de DNS (roles/dns.admin) fornece as permissões necessárias para criar zonas e registros DNS.

  • Criar uma zona particular.

    • Ao configurar uma zona particular, você fornece um nome de DNS. Use o domínio DNS que o fornecedor de serviços está usando para os serviços publicados. Verifique com o produtor de serviços para saber essas informações.

      Ele pode ter o seguinte formato: REGION.p.DOMAIN. Por exemplo, se o domínio público do produtor de serviços for example.com e o serviço publicado estiver em us-west1, recomendamos que ele disponibilize o serviço usando os nomes de domínio us-west1.p.example.com.

  • Adicionar um registro.

Logging

É possível ativar os registros de fluxo de VPC em sub-redes que contêm VMs que estão acessando serviços em outra rede VPC usando endpoints do Private Service Connect. Os registros mostram fluxos entre as VMs e o endpoint do Private Service Connect.

Como usar o Private Service Connect em hosts locais

Se a rede local estiver conectada a uma rede VPC, será possível acessar os serviços publicados do Private Service Connect de hosts locais usando o endereço IP interno do endpoint do Private Service Connect.

  • Sua rede local precisa estar conectada a uma rede VPC usando túneis do Cloud VPN, na mesma região em que o endpoint do Private Service Connect está localizado.

  • O endpoint do Private Service Connect está na rede VPC conectada à sua rede local.

  • Se você quiser acessar o endpoint do Private Service Connect usando o nome DNS, configure sistemas locais para que eles façam consultas nas zonas DNS particulares.

    Se você implementou as zonas DNS particulares usando o Cloud DNS, siga estas etapas:

Solução de problemas

Falha na criação da zona de DNS privado

Quando você cria um endpoint do Private Service Connect, uma zona DNS do Diretório de serviços é criada. A criação da zona pode falhar por estes motivos:

  • Você não ativou a API do Cloud DNS no projeto.

  • Você não tem as permissões necessárias para criar uma zona de DNS do Diretório de serviços.

  • Há uma zona DNS com o mesmo nome de zona nessa rede VPC.

  • Já existe uma zona DNS para o mesmo nome de domínio nesta rede VPC.

Para criar a zona DNS do Diretório de serviços, faça o seguinte:

  1. Verifique se a API do Cloud DNS está ativada no projeto.

  2. Verifique se você tem as permissões necessárias para criar a zona DNS do Diretório de serviços:

    • dns.managedZones.create
    • dns.networks.bindPrivateDNSZone
    • servicedirectory.namespaces.associatePrivateZone
  3. Se houver uma zona conflitante, mas ela não for mais necessária, exclua a zona DNS.

  4. Crie uma zona DNS do Diretório de serviços compatível com o namespace do diretório de serviços associado ao endpoint do Private Service Connect.