Como provisionar a VPC compartilhada

A VPC compartilhada permite exportar sub-redes de uma rede VPC em um projeto host para outros projetos de serviço na mesma organização. As instâncias nos projetos de serviço podem ter conexões de rede nas sub-redes compartilhadas do projeto host. Nesta página, você vai ver como configurar e usar a VPC compartilhada, incluindo alguma preparação administrativa necessária para sua organização.

A VPC compartilhada é compatível com a exportação tanto de sub-redes somente IPv4 (pilha única) quanto de redes IPv4 e IPv6 (pilha dupla).

Para informações sobre como remover projetos de serviço ou a configuração da VPC compartilhada, veja Como desprovisionar a VPC compartilhada.

Cotas, limites e recursos qualificados

Antes de começar, certifique-se de ter bom conhecimento da Visão geral da VPC compartilhada e da Visão geral do IAM. Especificamente:

Preparar a organização

Administradores e IAM

A preparação da organização, configuração de projetos host da VPC compartilhada e uso de redes VPC compartilhadas envolve no mínimo três papéis administrativos diferentes do gerenciamento de identidade e acesso (IAM). Para mais detalhes sobre cada papel e informações sobre os papéis opcionais, veja a seção sobre administradores e IAM da visão geral da VPC compartilhada.

Restrições da política da organização

As restrições da política da organização podem proteger os recursos da VPC compartilhada no nível do projeto, da pasta ou da organização. As seções a seguir descrevem cada política.

Evitar a exclusão acidental de projetos host

A exclusão acidental de um projeto host levaria a interrupções em todos os projetos de serviço anexados a ele. Quando um projeto é configurado para ser um projeto host da VPC compartilhada, um bloqueio especial, chamado de garantia, é colocado nele. Enquanto a garantia está presente, ela impede que o projeto seja excluído acidentalmente. A garantia é removida automaticamente do projeto host quando não está mais configurada para a VPC compartilhada.

Um usuário com o papel orgpolicy.policyAdmin pode definir uma restrição de política no nível da organização (constraints/compute.restrictXpnProjectLienRemoval) que limita a remoção de garantias apenas aos seguintes papéis:

  • Usuários com roles/owner ou roles/resourcemanager.lienModifier no nível da organização
  • Usuário com papéis personalizados que incluem as permissões resourcemanager.projects.get e resourcemanager.projects.updateLiens no nível da organização

Com isso, impede-se um proprietário de projeto que não tenha os papéis roles/owner ou resourcemanager.lienModifier no nível da organização de excluir acidentalmente um projeto host da VPC compartilhada. Para mais informações sobre as permissões associadas ao papel resourcemanager.lienModifier, consulte Como aplicar uma garantia a um projeto na documentação do Resource Manager.

Como uma política da organização se aplica a todos os projetos da organização, basta seguir estas etapas uma vez para restringir a remoção de garantia.

  1. Autentique-se no gcloud como Administrador da organização ou principal do IAM com o papel orgpolicy.policyAdmin. Substitua ORG_ADMIN pelo nome de um administrador da organização:

    gcloud auth login ORG_ADMIN
    
  2. Consulte a resposta ao comando para determinar o ID da organização.

    gcloud organizations list
    
  3. Para aplicar a política compute.restrictXpnProjectLienRemoval à sua organização, execute este comando. Substitua ORG_ID pelo número determinado na etapa anterior.

    gcloud beta resource-manager org-policies enable-enforce \
        --organization ORG_ID compute.restrictXpnProjectLienRemoval
    
  4. Saia de gcloud quando concluir a execução de tarefas como Administrador da organização para proteger sua conta.

    gcloud auth revoke ORG_ADMIN
    

Restringir anexos do projeto host

Por padrão, um Administrador da VPC compartilhada pode anexar um não host a qualquer projeto host na mesma organização. O administrador da política da organização pode limitar o conjunto de projetos hosts a que um ou mais projeto não host em uma pasta ou organização podem ser anexados. Para mais informações, consulte a restrição constraints/compute.restrictSharedVpcHostProjects.

Restringir as sub-redes do projeto host que um projeto de serviço pode usar

Por padrão, depois de configurar a VPC compartilhada, os principais do IAM em projetos de serviço podem usar qualquer sub-rede do projeto host se tiverem as permissões do IAM adequadas. Além de gerenciar permissões de usuários individuais, o administrador de política da organização pode definir uma política para definir o conjunto de sub-redes que podem ser acessadas por um projeto específico ou por projetos em uma pasta ou organização. Para mais informações, consulte a restrição constraints/compute.restrictSharedVpcSubnetworks.

Nomear administradores de VPC compartilhada

O Administrador da organização pode conceder os papéis de Administrador da VPC compartilhada e Administrador de IAM do projeto a um ou mais principais do IAM. Se um usuário tiver o papel de Administrador da VPC compartilhada no nível da pasta, ele também precisará do papel de Visualizador de rede do Compute ou de outro papel que tenha a permissão compute.subnetworks.list para gerenciar a VPC compartilhada no Console do Google Cloud. Se o Administrador da VPC compartilhada não tiver essa permissão, é possível usar a Google Cloud CLI ou a API para administrar a VPC compartilhada.

O papel de administrador do IAM do projeto concede permissão aos Administradores de VPC compartilhada para compartilhar todas as sub-redes atuais e futuras, não apenas sub-redes individuais. Essa concessão cria um vínculo no nível da organização ou pasta, não no nível do projeto. Portanto, os principais do IAM precisam ser definidos na organização e não apenas em um projeto.

Console

Para conceder o papel de Administrador de VPC compartilhada no nível da organização

  1. Faça login no Console do Google Cloud como um Administrador da organização e acesse a página "IAM".
    Acessar a página "IAM"
  2. No menu do projeto, selecione sua organização.
    Se você selecionar um projeto, não verá as entradas corretas no menu Papéis.
  3. Clique em Add.
  4. Insira os endereços de e-mail dos Novos principais.
  5. Na lista suspensa Papéis, selecione Compute Engine > Administrador de VPC compartilhada do Compute.

  6. Clique em Adicionar outro papel.

  7. Na lista suspensa Papéis, selecione Resource Manager > Administrador de IAM do projeto.

  8. Clique em Salvar.

Para conceder o papel de Administrador de VPC compartilhada no nível da pasta

  1. Faça login no Console do Google Cloud como um Administrador da organização e acesse a página "IAM".
    Acessar a página "IAM"
  2. No menu do projeto, selecione sua pasta.
    Se selecionar um projeto ou organização, não verá as opções corretas.
  3. Clique em Add.
  4. Insira os endereços de e-mail dos Novos principais.
  5. Em Selecionar um papel, selecione Compute Engine > Administrador de VPC compartilhada do Compute.
  6. Clique em Adicionar outro papel.
  7. Na lista suspensa Papéis, selecione Resource Manager > Administrador de IAM do projeto.
  8. Clique em Adicionar outro papel.
  9. Na lista suspensa Papéis, selecione Gerenciador de recursos > Visualizador de rede do Compute.
  10. Clique em Save.

gcloud

  1. Autentique-se no gcloud como Administrador da organização. Substitua ORG_ADMIN pelo nome de um administrador da organização:

    gcloud auth login ORG_ADMIN
    
  2. Consulte a resposta ao comando para determinar o ID da organização.

    gcloud organizations list
    
  3. Se você quiser atribuir o papel de Administrador de VPC compartilhada no nível da organização, faça isto:

    1. Atribua o papel de Administrador de VPC compartilhada a um principal do IAM atual. Substitua ORG_ID pelo ID da organização da etapa anterior e EMAIL_ADDRESS pelo endereço de e-mail do usuário a quem você está concedendo o papel de Administrador de VPC compartilhada.

      gcloud organizations add-iam-policy-binding ORG_ID \
        --member='user:EMAIL_ADDRESS' \
        --role="roles/compute.xpnAdmin"
      
      gcloud organizations add-iam-policy-binding ORG_ID \
        --member='user:EMAIL_ADDRESS' \
        --role="roles/resourcemanager.projectIamAdmin"
      
  4. Se você quiser atribuir o papel de Administrador de VPC compartilhada no nível da pasta, faça isto:

    1. Determine seu código da pasta observando a saída deste comando.

      gcloud beta resource-manager folders list --organization=ORG_ID
      
    2. Atribua o papel de Administrador de VPC compartilhada a um principal do IAM atual. Substitua ORG_ID pelo ID da organização da etapa anterior e EMAIL_ADDRESS pelo endereço de e-mail do usuário a quem você está concedendo o papel de Administrador de VPC compartilhada.

      gcloud beta resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/compute.xpnAdmin"
      
      gcloud beta resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/resourcemanager.projectIamAdmin"
      
      gcloud beta resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/compute.networkViewer"
      
  5. Revogue o token da conta de administrador da organização na ferramenta de linha de comando gcloud ao final das tarefas para proteger sua conta.

    gcloud auth revoke ORG_ADMIN
    

API

  • Para atribuir o papel de Administrador de VPC compartilhada no nível da organização, use o seguinte procedimento:

    1. Determine o número de ID da organização.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations
      
    2. Descreva e registre os detalhes da política da organização atual.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORG_ID:getIamPolicy
      

      Substitua ORG_ID pelo ID da organização.

    3. Atribua o papel Administrador de VPC compartilhada.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORG_ID:setIamPolicy
      {
        "bindings": [
          ...copy existing bindings
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/compute.xpnAdmin"
          },
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/resourcemanager.projectIamAdmin"
          }
        ],
        "etag": "ETAG",
        "version": 1,
        ...other existing policy details
      }
      

      Substitua os marcadores por valores válidos:

      • ORG_ID é o ID da organização com o usuário a quem você está concedendo o papel de Administrador de VPC compartilhada.
      • EMAIL_ADDRESS é o endereço de e-mail do usuário.
      • ETAG é um identificador exclusivo que você recebeu quando descreveu a política atual. Isso evita colisões quando várias solicitações de atualização são enviadas ao mesmo tempo.

      Para mais informações, consulte o método organizations.setIamPolicy.

  • Para atribuir o papel de Administrador de VPC compartilhada no nível da pasta, use a seguinte solicitação:

    1. Determine o número de ID da organização.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations
      
    2. Encontre o ID da pasta.

      GET https://cloudresourcemanager.googleapis.com/v2/folders?parent=organizations/ORG_ID
      

      Substitua ORG_ID pelo ID da organização.

    3. Descreva e registre os detalhes da política de pastas atual.

      POST https://cloudresourcemanager.googleapis.com/v2/folders/FOLDER_ID:getIamPolicy
      

      Substitua FOLDER_ID pelo ID da pasta.

    4. Atribua o papel Administrador de VPC compartilhada.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations/FOLDER_ID:setIamPolicy
      {
        "bindings": [
          ...copy existing bindings
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/compute.xpnAdmin"
          },
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/resourcemanager.projectIamAdmin"
          },
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/compute.networkViewer"
          }
        ],
        "etag": "ETAG",
        "version": 1,
        ...other existing policy details
      }
      

      Substitua os marcadores por valores válidos:

      • FOLDER_ID é o ID da organização com o usuário a quem você está concedendo o papel de Administrador de VPC compartilhada.
      • EMAIL_ADDRESS é o endereço de e-mail do usuário.
      • ETAG é um identificador exclusivo que você recebeu quando descreveu a política atual. Isso evita colisões se várias solicitações de atualizações forem enviadas ao mesmo tempo.

      Para mais informações, consulte o método folders.setIamPolicy.

Como configurar a VPC compartilhada

Todas as tarefas nesta seção precisam ser executadas por um administrador de VPC compartilhada.

Ativar um projeto host

Dentro de uma organização, os Administradores da VPC compartilhada podem seguir o procedimento abaixo para designar projetos como projetos host de VPC compartilhada, sujeitos a cotas e limites. Os administradores de VPC compartilhada também podem criar e excluir projetos se tiverem o papel Criador de projetos e Excluidor de projetos (roles/resourcemanager.projectCreator e roles/resourcemanager.projectDeleter) na sua organização.

Quando você ativa um projeto host, os recursos de rede do projeto não são compartilhados automaticamente com projetos de serviço. Você precisa anexar projetos de serviço ao projeto host para compartilhar redes e sub-redes selecionadas com os projetos de serviço.

Console

Se você ainda não tiver o papel de Administrador de VPC compartilhada, não poderá visualizar esta página no Console do Google Cloud.

Se você tiver o papel de Administrador de VPC compartilhada no nível da pasta, será necessário usar o comando gcloud beta ou a API Beta.

  1. Acesse a página "VPC compartilhada" no Console do Google Cloud.
    Acessar a página "VPC compartilhada"
  2. Faça login como um Administrador da VPC compartilhada.
  3. Selecione o projeto que você quer ativar como projeto host da VPC compartilhada no seletor de projetos.
  4. Clique em Configurar VPC compartilhada.
  5. Na página seguinte, clique em Salvar e continuar abaixo de Ativar projeto host.
  6. Em Selecionar sub-redes, siga um destes procedimentos:
    1. Clique em Compartilhar todas as sub-redes (permissões no nível do projeto) se precisar compartilhar todas as sub-redes atuais e futuras nas redes VPC do projeto host com os projetos de serviço e os Administradores de projetos de serviço especificados nas próximas etapas.
    2. Clique em Sub-redes individuais (permissões no nível da sub-rede) se você precisar compartilhar seletivamente sub-redes das redes VPC do projeto host com projetos de serviço e Administradores do projeto de serviço. Em seguida, selecione Sub-redes a serem compartilhadas.
  7. Clique em Continuar.
    A próxima tela será exibida.
  8. Em Nomes de projeto, especifique os projetos de serviço a serem anexados ao projeto host. Observe que anexar projetos de serviço não define nenhum Administrador de projetos de serviço. Essa definição é feita na próxima etapa.
  9. Na seção Selecionar usuários por papel, adicione Administradores de projeto de serviço. Esses usuários receberão o papel do IAM de compute.networkUser para as sub-redes compartilhadas. Somente os Administradores de projetos de serviço podem criar recursos nas sub-redes do projeto host da VPC compartilhada.
  10. Clique em Save.

gcloud

  1. Autentique-se no gcloud como Administrador de VPC compartilhada. Substitua SHARED_VPC_ADMIN pelo nome do Administrador de VPC compartilhada:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Ative a VPC compartilhada no projeto que se tornará o projeto host. Substitua HOST_PROJECT_ID pelo ID do projeto.

    Se você tiver o papel Administrador de VPC compartilhada no nível da organização

    gcloud compute shared-vpc enable HOST_PROJECT_ID
    

    Se você tiver o papel de Administrador de VPC compartilhada no nível da pasta

    gcloud beta compute shared-vpc enable HOST_PROJECT_ID
    
  3. Confirme se o projeto está listado como um projeto host para a organização. Substitua ORG_ID pelo ID da organização (determinado por gcloud organizations list).

    gcloud compute shared-vpc organizations list-host-projects ORG_ID
    
  4. Se bastava ativar um projeto host, saia de gcloud para proteger as credenciais da conta de Administrador da VPC compartilhada. Caso contrário, pule esta etapa e continue com as etapas para anexar projetos de serviço.

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. Ative a VPC compartilhada para o projeto usando credenciais com permissões de Administrador de VPC compartilhada.

    • Se você tiver o papel de Administrador de VPC compartilhada no nível da organização, use a API v1:

      POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnHost
      
    • Se você tiver o papel Administrador de VPC compartilhada na pasta, use a API Beta:

      POST https://compute.googleapis.com/compute/beta/projects/HOST_PROJECT_ID/enableXpnHost
      

    Substitua HOST_PROJECT_ID pelo ID do projeto que será um projeto host da VPC compartilhada.

    Para mais informações, consulte o método projects.enableXpnHost.

  2. Confirme se o projeto está listado como host.

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/listXpnHosts
    

    Substitua HOST_PROJECT_ID pelo ID do projeto host da VPC compartilhada.

    Para mais informações, consulte o método projects.listXpnHosts.

Terraform

É possível usar um recurso do Terraform para ativar um projeto host.

resource "google_compute_shared_vpc_host_project" "host" {
  project = var.project # Replace this with your host project ID in quotes
}

Anexar projetos de serviço

É necessário anexar um projeto de serviço a um projeto host antes que os respectivos Administradores de projeto de serviço usem a VPC compartilhada. O Administrador de VPC compartilhada precisa realizar as etapas a seguir para concluir a anexação.

Um projeto de serviço só pode ser anexado a um projeto host, mas um projeto host oferece suporte a vários anexos de projeto de serviço. Para detalhes, veja os limites específicos da VPC compartilhada na página de cotas da VPC.

Console

  1. Faça login no Console do Google Cloud como administrador de VPC compartilhada.
  2. Acesse a página "VPC compartilhada" no Console do Google Cloud.
    Acessar a página "VPC compartilhada"
  3. Clique na guia Projetos anexados.
  4. Na guia Projetos anexados, clique no botão Anexar projetos.
  5. Marque as caixas dos projetos de serviço a serem anexados na seção Nomes de projeto. Observe que anexar projetos de serviço não define nenhum Administrador de projetos de serviço. Essa definição é feita na próxima etapa.
  6. Na seção Permissões de rede VPC, selecione os papéis que já foram concedidos aos principais que receberão o papel compute.networkUser. Os principais do IAM recebem o papel de usuário da rede para todo o projeto host ou para determinadas sub-redes no projeto host, com base no modo de compartilhamento da rede VPC. Esses principais são conhecidos como Administradores de projeto de serviço nos respectivos projetos de serviço.
  7. Na seção Modo de compartilhamento da rede VPC, selecione uma destas opções:
    1. Clique em Compartilhar todas as sub-redes (permissões no nível do projeto) para compartilhar todas as sub-redes atuais e futuras nas redes VPC do projeto host com todos os projetos de serviço e os Administradores de projetos de serviço.
    2. Clique em Sub-redes individuais (permissões no nível da sub-rede) se você precisar compartilhar seletivamente sub-redes das redes VPC do projeto host com projetos de serviço e Administradores do projeto de serviço. Em seguida, selecione Sub-redes a serem compartilhadas.
  8. Clique em Salvar.

gcloud

  1. Se ainda não tiver feito isso, autentique-se em gcloud como Administrador de VPC compartilhada. Substitua SHARED_VPC_ADMIN pelo nome do Administrador de VPC compartilhada:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Anexe um projeto de serviço a um projeto host ativado anteriormente. Substitua SERVICE_PROJECT_ID pelo ID do projeto de serviço e HOST_PROJECT_ID pelo ID do projeto host.

    Se você tiver o papel Administrador de VPC compartilhada no nível da organização

    gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_ID \
        --host-project HOST_PROJECT_ID
    

    Se você tiver o papel de Administrador de VPC compartilhada no nível da pasta

    gcloud beta compute shared-vpc associated-projects add SERVICE_PROJECT_ID \
        --host-project HOST_PROJECT_ID
    
  3. Confirme se o projeto de serviço foi anexado.

    gcloud compute shared-vpc get-host-project SERVICE_PROJECT_ID
    
  4. Opcionalmente, liste os projetos de serviço que estão anexados ao projeto host:

    gcloud compute shared-vpc list-associated-resources HOST_PROJECT_ID
    
  5. Se bastava anexar um projeto de serviço, faça o logout de gcloud para proteger as credenciais da conta de Administrador da VPC compartilhada. Caso contrário, pule esta etapa e defina os Administradores de projetos de serviço para todas as sub-redes ou apenas para algumas sub-redes.

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. Anexe um projeto de serviço ao projeto host da VPC compartilhada.

    • Se você tiver o papel de Administrador de VPC compartilhada no nível da organização, use a API v1:

      POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnResource
      {
      "xpnResource": {
        "id": "SERVICE_PROJECT"
      }
      }
      
    • Se você tiver o papel Administrador de VPC compartilhada na pasta, use a API Beta:

      POST https://compute.googleapis.com/compute/beta/projects/HOST_PROJECT_ID/enableXpnResource
      {
      "xpnResource": {
        "id": "SERVICE_PROJECT"
      }
      }
      

    Substitua os marcadores por valores válidos:

    • HOST_PROJECT_ID é o ID do projeto host da VPC compartilhada.
    • SERVICE_PROJECT é o ID do projeto de serviço a ser anexado.

    Para mais informações, consulte o método projects.enableXpnResource.

  2. Confirme se os projetos de serviço estão anexados ao projeto host.

    GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/getXpnResources
    

    Substitua os marcadores por valores válidos:

    • HOST_PROJECT_ID é o ID do projeto host da VPC compartilhada.

    Para mais informações, consulte o método projects.getXpnResources.

Terraform

Use um recurso do Terraform para anexar um projeto de serviço.

resource "google_compute_shared_vpc_service_project" "service1" {
  host_project    = google_compute_shared_vpc_host_project.host.project
  service_project = var.service_project # Replace this with your service project ID in quotes
}

Administradores de projeto de serviço para todas as sub-redes

O Administrador de VPC compartilhada pode atribuir um principal do IAM de um projeto de serviço como um Administrador do projeto de serviço com acesso a todas as sub-redes no projeto host. Os Administradores de projetos de serviço desse tipo recebem o papel de compute.networkUser para todo o projeto host. Isso significa que eles têm acesso a todas as sub-redes definidas e futuras no projeto host.

Um usuário que tenha o papel compute.networkUser no projeto host poderá ver todas as sub-redes em projetos de serviço anexados.

Console

Para definir um membro do IAM de um projeto de serviço como Administrador do projeto de serviço com acesso a todas as sub-redes em um projeto host usando o Console do Cloud, consulte a seção anexar projetos de serviço.

gcloud

Essas etapas abrangem a definição de um principal do IAM de um projeto de serviço como um Administrador do projeto de serviço com acesso a todas as sub-redes em um projeto host. Antes de realizar essas etapas, ative um projeto host e anexe o projeto de serviço ao projeto host.

  1. Se ainda não tiver feito isso, autentique-se em gcloud como Administrador de VPC compartilhada. Substitua SHARED_VPC_ADMIN pelo nome do Administrador de VPC compartilhada:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Crie uma vinculação de política para tornar o principal do IAM do projeto de serviço um Administrador do projeto de serviço. Substitua HOST_PROJECT_ID pelo ID do projeto host e SERVICE_PROJECT_ADMIN pelo endereço de e-mail do usuário Administrador do projeto de serviço.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member "user:SERVICE_PROJECT_ADMIN" \
    --role "roles/compute.networkUser"
    

    Para especificar diferentes tipos de principais, altere o formato do argumento --member:

    • Use group: para especificar um grupo do Google (por endereço de e-mail) como principal.
    • Use domain: para especificar um domínio do Google como principal.
    • Use serviceAccount: para especificar uma conta de serviço. Para mais informações sobre este caso de uso, veja Contas de serviço como administradores de projeto de serviço.
  3. Repita a etapa anterior para cada Administrador do projeto de serviço que você precisar definir.

  4. Ao concluir a definição dos Administradores de projetos de serviço, saia da gcloud para proteger as credenciais da conta de Administrador de VPC compartilhada.

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. Descreva e registre os detalhes da política de projetos existente. Você precisará da política atual e valor de etag.

    POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
    

    Substitua HOST_PROJECT_ID pelo ID do projeto host em que está a rede VPC compartilhada.

  2. Crie uma vinculação de política para atribuir principais do IAM no projeto de serviço como Administradores de projetos de serviço.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            PRINCIPAL,
            ...additional principals
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    Substitua os marcadores por valores válidos:

    • HOST_PROJECT_ID é o ID do projeto host em que está a rede VPC compartilhada.
    • PRINCIPAL é uma identidade a que o papel está associado, como um usuário, grupo, domínio ou conta de serviço. Para mais informações, consulte o campo members na documentação do Resource Manager.
    • ETAG é um identificador exclusivo que você recebeu quando descreveu a política atual. Isso evita colisões se várias solicitações de atualizações forem enviadas ao mesmo tempo.

    Para mais informações, consulte o método projects.setIamPolicy.

Administradores de projeto de serviço para algumas sub-redes

O Administrador da VPC compartilhada pode atribuir o papel de Administrador de projeto de serviço a um principal do IAM de um projeto de serviço, com acesso apenas a algumas das sub-redes do projeto host. Essa opção fornece um meio mais granular para definir os Administradores de projetos de serviços, concedendo a eles o papel compute.networkUser para apenas algumas sub-redes no projeto host.

Um usuário que tenha o papel compute.networkUser no projeto host poderá ver todas as sub-redes em projetos de serviço anexados.

Console

Para definir um membro do IAM a partir de um projeto de serviço como Administrador do projeto de serviço com acesso a apenas algumas sub-redes em um projeto host usando o Console do Cloud, consulte a seção anexar projetos de serviço.

gcloud

Estas etapas abrangem a definição de principais do IAM de um projeto de serviço como Administradores de projetos de serviços com acesso a apenas algumas sub-redes em um projeto host. Antes de defini-los, ative um projeto host e anexe o projeto de serviço ao projeto host.

  1. Se ainda não tiver feito isso, autentique-se em gcloud como Administrador de VPC compartilhada. Substitua SHARED_VPC_ADMIN pelo nome do Administrador de VPC compartilhada:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Escolha a sub-rede no projeto host a que os Administradores do projeto de serviço têm acesso. A política do IAM atual está em formato JSON. Substitua SUBNET_NAME pelo nome da sub-rede no projeto host e HOST_PROJECT_ID pelo ID do projeto host.

    gcloud beta compute networks subnets get-iam-policy SUBNET_NAME \
        --region SUBNET_REGION \
        --project HOST_PROJECT_ID \
        --format json
    
  3. Copie a saída JSON da etapa anterior e salve-a em um arquivo. Para que as instruções fiquem claras, essas etapas salvam a saída em um arquivo denominado subnet-policy.json.

  4. Modifique o arquivo subnet-policy.json adicionando os principais do IAM que vão se tornar Administradores de projetos de serviço com acesso à sub-rede. Substitua cada SERVICE_PROJECT_ADMIN pelo endereço de e-mail de um usuário do IAM do projeto de serviço.

    {
      "bindings": [
      {
         "members": [
               "user:[SERVICE_PROJECT_ADMIN]",
               "user:[SERVICE_PROJECT_ADMIN]"
            ],
            "role": "roles/compute.networkUser"
      }
      ],
      "etag": "[ETAG_STRING]"
    }
    

    Na política, é possível especificar diferentes tipos de membros do IAM (que não sejam usuários):

    • Alterne user: com group: para especificar um grupo do Google (por endereço de e-mail) como principal.
    • Alterne user: com domain: para especificar um domínio do Google como principal.
    • Use serviceAccount: para especificar uma conta de serviço. Consulte Contas de serviço como Administradores de projetos de serviços para ver mais informações sobre este caso de uso.
  5. Atualize a vinculação da política da sub-rede usando o conteúdo do arquivo subnet-policy.json.

    gcloud beta compute networks subnets set-iam-policy SUBNET_NAME subnet-policy.json \
        --region SUBNET_REGION \
        --project HOST_PROJECT_ID
    
  6. Ao concluir a definição dos Administradores de projetos de serviço, saia da gcloud para proteger as credenciais da conta de Administrador de VPC compartilhada.

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. Descreva e registre os detalhes da sua política de sub-rede existente. Você precisará da política atual e valor de etag.

    GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME/getIamPolicy
    

    Substitua os marcadores por valores válidos:

    • HOST_PROJECT_ID é o ID do projeto host em que está a rede VPC compartilhada.
    • SUBNET_NAME é o nome da sub-rede a ser compartilhada.
    • SUBNET_REGION é a região onde a sub-rede está localizada.
  2. Atualize as políticas de rede para conceder aos Administradores de projetos de serviço acesso às sub-redes no projeto host.

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME/setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            PRINCIPAL,
            ...additional principals
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    Substitua os marcadores por valores válidos:

    • ETAG é um identificador exclusivo que você recebeu quando descreveu a política atual. Isso evita colisões se várias solicitações de atualizações forem enviadas ao mesmo tempo.
    • HOST_PROJECT_ID é o ID do projeto host em que está a rede VPC compartilhada.
    • PRINCIPAL é uma identidade a que o papel está associado, como um usuário, grupo, domínio ou conta de serviço. Para mais informações, consulte o campo members na documentação do Resource Manager.
    • SUBNET_NAME é o nome da sub-rede a ser compartilhada.
    • SUBNET_REGION é a região onde a sub-rede está localizada.

    Para mais informações, consulte o método subnetworks.setIamPolicy.

Contas de serviço como administradores de projeto de serviço

Um Administrador da VPC compartilhada também pode definir contas de serviços a partir de projetos de serviço como Administradores de projetos de serviço. Nesta seção, mostraremos como definir dois tipos diferentes de contas de serviço como Administradores de projetos de serviço:

O papel de Administrador do projeto de serviço (compute.networkUser) pode ser concedido para todas as sub-redes ou apenas algumas sub-redes do projeto host. No entanto, para que as instruções fiquem claras, nesta seção mostraremos apenas como definir cada um dos dois tipos de conta de serviço como Administradores de projetos de serviço para todas as sub-redes do projeto host.

Contas de serviço gerenciadas pelo usuário como administradores de projeto de serviço

Essas instruções descrevem como definir uma conta de serviço gerenciada pelo usuário como um Administrador do projeto de serviço para todas as sub-redes do projeto host da VPC compartilhada.

Console

  1. Faça login no Console do Google Cloud como administrador de VPC compartilhada.
  2. Acesse a página "Configurações" no Console do Google Cloud.
    Acessar a página "Configurações"
  3. Altere o projeto para o projeto de serviço que contém a conta de serviço que precisa ser definida como um Administrador do projeto de serviço.
  4. Copie o ID do projeto de serviço. Para que as instruções fiquem claras, este procedimento refere-se ao ID do projeto de serviço como SERVICE_PROJECT_ID.
  5. Altere o projeto para o host da VPC compartilhada.
  6. Acesse a página "IAM" no Console do Google Cloud.
    Acessar a página "IAM"
  7. Clique em Add.
  8. Adicione SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com ao campo Principais, substituindo SERVICE_ACCOUNT_NAME pelo nome da conta de serviço.
  9. Selecione Compute Engine > Usuário da rede do Compute no menu Papéis.
  10. Clique em Adicionar.

gcloud

  1. Se ainda não tiver feito isso, autentique-se em gcloud como Administrador de VPC compartilhada. Substitua SHARED_VPC_ADMIN pelo nome do Administrador de VPC compartilhada:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Se você não souber o ID do projeto de serviço, liste todos os projetos na organização. Esta lista mostra o código do projeto para cada um.

    gcloud projects list
    
  3. Crie uma vinculação de política para tornar a conta de serviço um Administrador do projeto de serviço. Substitua HOST_PROJECT_ID pelo ID do projeto host, SERVICE_ACCOUNT_NAME pelo nome da conta de serviço e SERVICE_PROJECT_ID pelo ID do projeto de serviço.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member "serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com" \
        --role "roles/compute.networkUser"
    

API

  1. Descreva e registre os detalhes da política de projetos existente. Você precisará da política atual e valor de etag.

    POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
    

    Substitua HOST_PROJECT_ID pelo ID do projeto host em que está a rede VPC compartilhada.

  2. Crie uma vinculação de política para atribuir contas de serviço como Administradores de projetos de serviço.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com",
            ...include additional service accounts
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    Substitua os marcadores por valores válidos:

    • HOST_PROJECT_ID é o ID do projeto host em que está a rede VPC compartilhada.
    • SERVICE_ACCOUNT_NAME é o nome da conta de serviço.
    • SERVICE_PROJECT_ID é o ID do projeto de serviço em que está a conta de serviço.
    • ETAG é um identificador exclusivo que você recebeu quando descreveu a política atual. Isso evita colisões se várias solicitações de atualizações forem enviadas ao mesmo tempo.

    Para mais informações, consulte o método projects.setIamPolicy.

Conta de serviço das APIs do Google como administrador de projeto de serviço

Estas instruções descrevem como definir a conta de serviço das APIs do Google como o Administrador do projeto de serviço para todas as sub-redes do projeto host da VPC compartilhada. Tornar a conta de serviço das APIs do Google um Administrador do projeto de serviço é um requisito para grupos gerenciado de instâncias usados com a VPC compartilhada, porque tarefas como a criação de instâncias são realizadas por esse tipo de conta de serviço. Para mais informações sobre esse relacionamento, consulte Grupos de instâncias gerenciadas e IAM.

Console

  1. Faça login no Console do Google Cloud como administrador de VPC compartilhada.
  2. Acesse a página "Configurações" no Console do Google Cloud.
    Acessar a página "Configurações"
  3. Altere o projeto para o projeto de serviço que contém a conta de serviço que precisa ser definida como um Administrador do projeto de serviço.
  4. Copie o Número do projeto de serviço. Para que as instruções fiquem claras, este procedimento refere-se ao número do projeto de serviço como SERVICE_PROJECT_NUMBER.
  5. Altere o projeto para o host da VPC compartilhada.
  6. Acesse a página "IAM" no Console do Google Cloud.
    Acessar a página "IAM"
  7. Clique em Add.
  8. Adicione SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com ao campo Membros.
  9. Selecione Compute Engine > Usuário da rede do Compute no menu Papéis.
  10. Clique em Adicionar.

gcloud

  1. Se ainda não tiver feito isso, autentique-se em gcloud como Administrador de VPC compartilhada. Substitua SHARED_VPC_ADMIN pelo nome do Administrador de VPC compartilhada:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Determine o número do projeto de serviço. Para que as instruções sejam claras, este procedimento se refere ao número do projeto de serviço como SERVICE_PROJECT_NUMBER. Substitua SERVICE_PROJECT_ID pelo ID do projeto de serviço.

    gcloud projects describe SERVICE_PROJECT_ID --format='get(projectNumber)'
    
    • Se você não souber o ID do projeto de serviço, liste todos os projetos na organização. Esta lista mostra o número do projeto para cada um.

      gcloud projects list
      
  3. Crie uma vinculação de política para tornar a conta de serviço um Administrador do projeto de serviço. Substitua HOST_PROJECT_ID pelo ID do projeto host e SERVICE_PROJECT_NUMBER pelo número do projeto de serviço.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com" \
        --role "roles/compute.networkUser"
    

API

  1. Descreva e registre os detalhes da política de projetos existente. Você precisará da política atual e valor de etag.

    POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
    

    Substitua HOST_PROJECT_ID pelo ID do projeto host em que está a rede VPC compartilhada.

  2. Liste seu projeto para encontrar o número dele.

    GET https://cloudresourcemanager.googleapis.com/v1/projects?filter=projectId="SERVICE_PROJECT_ID"
    

    Substitua SERVICE_PROJECT_ID pelo ID do projeto de serviço em que a conta de serviço está localizada.

  3. Crie uma vinculação de política para atribuir contas de serviço como Administradores de projetos de serviço.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com"
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    Substitua os marcadores por valores válidos:

    • HOST_PROJECT_ID é o ID do projeto host em que está a rede VPC compartilhada.
    • SERVICE_PROJECT_NUMBER é o número do projeto de serviço em que está a conta de serviço.
    • ETAG é um identificador exclusivo que você recebeu quando descreveu a política atual. Isso evita colisões se várias solicitações de atualizações forem enviadas ao mesmo tempo.

    Para mais informações, consulte o método projects.setIamPolicy.

Como usar VPC compartilhada

Depois que um Administrador de VPC compartilhada conclui as tarefas de ativar um projeto host, anexar os projetos de serviço necessários a ele e definir Administradores de projetos de serviço para todas ou algumas sub-redes do projeto host, os Administradores de projetos de serviço podem criar instâncias, modelos e balanceadores de carga internos nos projetos de serviço usando as sub-redes do projeto host.

Todas as tarefas nesta seção são executadas por um administrador de projeto de serviço.

É importante observar que um Administrador de VPC compartilhada concede aos Administradores de projetos de serviço apenas o papel compute.networkUser, para todo o projeto host ou apenas algumas das sub-redes dele. Outros papéis também são necessários aos Administradores de projetos de serviço para que administrem seus respectivos projetos de serviço. Por exemplo, o Administrador de projeto de serviço também pode ser proprietário do projeto ou pelo menos ter o papel compute.instanceAdmin no projeto.

Como listar as sub-redes disponíveis

Os Administradores de projetos de serviço podem listar as sub-redes para as quais receberam permissão seguindo estas etapas.

Console

Acesse a página "VPC compartilhada" no Console do Google Cloud.
Acessar a página "VPC compartilhada"

gcloud

  1. Autentique-se no gcloud como um Administrador de projetos de serviço, se ainda não tiver feito isso. Substitua SERVICE_PROJECT_ADMIN pelo nome do Administrador do projeto de serviço:

    gcloud auth login SERVICE_PROJECT_ADMIN
    
  2. Execute o comando abaixo, substituindo HOST_PROJECT_ID pelo ID do projeto host da VPC compartilhada:

    gcloud compute networks subnets list-usable --project HOST_PROJECT_ID
    

    O exemplo a seguir lista as sub-redes disponíveis no projeto host project-1:

    $ gcloud compute networks subnets list-usable --project project-1
    
    PROJECT    REGION       NETWORK  SUBNET    RANGE          SECONDARY_RANGES
    project-1  us-west1     net-1    subnet-1  10.138.0.0/20
    project-1  us-central1  net-1    subnet-2  10.128.0.0/20  r-1 192.168.2.0/24
                                                              r-2 192.168.3.0/24
    project-1  us-east1     net-1    subnet-3  10.142.0.0/20
    

Para saber mais informações, consulte o comando list-usable na documentação do SDK.

API

Liste as sub-redes disponíveis no projeto host. Faça a solicitação como um Administrador de projeto de serviço.

GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/aggregated/subnetworks/listUsable

Substitua HOST_PROJECT_ID pelo ID do projeto host que contém a rede VPC compartilhada.

Para mais informações, consulte o método subnetworks.listUsable.

Como reservar um endereço IPv4 interno estático

Os Administradores do projeto de serviço podem reservar um endereço IPv4 interno em uma sub-rede de uma rede VPC compartilhada. Observe que o objeto de configuração de endereço IPv4 é criado no projeto de serviço, enquanto seu valor vem do intervalo de endereços disponíveis na sub-rede compartilhada escolhida.

gcloud

  1. Autentique-se no gcloud como um Administrador de projetos de serviço, se ainda não tiver feito isso. Substitua SERVICE_PROJECT_ADMIN pelo nome do Administrador do projeto de serviço:

    gcloud auth login SERVICE_PROJECT_ADMIN
    
  2. Execute o comando abaixo, substituindo HOST_PROJECT_ID pelo ID do projeto host da VPC compartilhada:

    gcloud compute addresses create IP_ADDR_NAME \
    --project SERVICE_PROJECT_ID \
    --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
    --region=REGION
    

Faça estas substituições:

  • IP_ADDR_NAME por um nome para o objeto de endereço IPv4
  • SERVICE_PROJECT_ID pelo ID do projeto de serviço
  • HOST_PROJECT_ID pelo ID do projeto host da VPC compartilhada
  • REGION pela região contendo a sub-rede compartilhada
  • SUBNET pelo nome da sub-rede compartilhada

Outros detalhes sobre a criação de endereços IP estão publicados na documentação do SDK.

API

Reserve um endereço IPv4 interno estático como Administrador de projeto de serviço.

POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/addresses
{
  "name": "ADDRESS_NAME",
  "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
  "addressType": "INTERNAL"
}

Substitua os marcadores por valores válidos:

  • ADDRESS_NAME é um nome para o endereço IP interno reservado.
  • HOST_PROJECT_ID é o ID do projeto em que está a rede VPC compartilhada.
  • REGION é a região onde o endereço IPv4 reservado será localizado e onde a sub-rede compartilhada está localizada.
  • SERVICE_PROJECT_ID é o ID do projeto de serviço em que você está reservando o endereço IPv4.
  • SUBNET_NAME é o nome da sub-rede compartilhada.

Para mais informações, consulte o método addresses.insert.

Terraform

É possível usar um bloco de dados do Terraform para especificar as informações da sub-rede do host. Em seguida, use um recurso do Terraform para reservar um endereço IPv4 interno estático. Se você omitir o argumento address opcional, um endereço IPv4 disponível será selecionado e reservado.

Especifique a sub-rede do host:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

Reserve um endereço IPv4 da sub-rede do projeto host para usar no projeto de serviço:

resource "google_compute_address" "internal" {
  project      = var.service_project
  region       = "us-central1"
  name         = "int-ip"
  address_type = "INTERNAL"
  address      = "10.0.0.8"
  subnetwork   = data.google_compute_subnetwork.subnet.self_link
}

Criar uma instância

Considere isto ao criar uma instância usando a VPC compartilhada:

  • O processo padrão de criação de uma instância envolve a seleção de uma zona, uma rede e uma sub-rede. A sub-rede e a zona selecionadas precisam estar na mesma região. Quando o Administrador de projeto de serviço cria uma instância usando uma sub-rede de uma rede VPC compartilhada, a zona selecionada para essa instância precisa estar na mesma região da sub-rede selecionada.

    • Ao criar uma instância com um endereço IPv4 interno estático reservado, a sub-rede (e a região) já estavam selecionadas quando o endereço IPv4 estático foi criado. Um exemplo do gcloud para criar uma instância com um endereço IPv4 interno estático é fornecido nesta seção.
  • Os Administradores do projeto de serviço só podem criar instâncias usando sub-redes para as quais receberam permissão. Consulte como listar sub-redes disponíveis para determinar quais sub-redes estão disponíveis.

  • Quando o Google Cloud recebe uma solicitação para criar uma instância em uma sub-rede de uma rede VPC compartilhada, ele verifica se o principal do IAM que fez a solicitação tem permissão para usar essa sub-rede compartilhada. Se a verificação falhar, a instância não será criada, e o Google Cloud retornará um erro de permissões. Entre em contato com o Administrador da VPC compartilhada para receber ajuda.

  • É possível criar uma instância de pilha dupla se você criá-la em uma sub-rede de pilha dupla. As sub-redes de pilha dupla são compatíveis apenas com redes VPC de modo personalizado. O tipo de acesso IPv6 da sub-rede determina se o endereço IPv6 atribuído à VM é um endereço IPv6 interno ou externo.

    Para criar instâncias de pilha dupla em uma sub-rede compartilhada, use a CLI do Google Cloud ou a API. Não é possível criar uma instância de pilha dupla em uma sub-rede compartilhada com o Console do Cloud.

Console

  1. Acesse a página Instâncias de VM no Console do Google Cloud.
    Acessar a página "Instâncias de VM"
  2. Clique em Criar.
  3. Especifique um Nome para a instância.
  4. Clique em Gerenciamento, segurança, discos, rede, locatário único.
  5. Clique em Rede.
  6. Em Interfaces de rede, clique na rede default.
  7. Clique no botão de opção Redes compartilhadas comigo.
  8. Selecione a Sub-rede compartilhada na qual você quer criar a instância.
  9. Especifique todos os outros parâmetros necessários para a instância.
  10. Clique em Criar.

gcloud

  • Para criar uma instância com um endereço IPv4 interno temporário em uma sub-rede compartilhada de uma rede VPC compartilhada:

    gcloud compute instances create INSTANCE_NAME \
    --project SERVICE_PROJECT_ID
    --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
    --zone ZONE
    

    Faça estas substituições:

    • INSTANCE_NAME pelo nome da instância
    • SERVICE_PROJECT_ID pelo ID do projeto de serviço.
    • HOST_PROJECT_ID pelo ID do projeto host da VPC compartilhada.
    • REGION pela região contendo a sub-rede compartilhada
    • SUBNET pelo nome da sub-rede compartilhada
    • ZONE por uma zona na região especificada
  • Para criar uma instância com um endereço IPv4 interno estático reservado em uma rede VPC compartilhada:

    1. Reserve um endereço IPv4 interno estático no projeto host.
    2. Crie a instância:

      gcloud compute instances create INSTANCE_NAME \
      --project SERVICE_PROJECT_ID \
      --private-network-ip IP_ADDR_NAME \
      --zone ZONE
      --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
      

      Faça estas substituições:

      • INSTANCE_NAME pelo nome da instância
      • SERVICE_PROJECT_ID pelo ID do projeto de serviço.
      • HOST_PROJECT_ID pelo ID do projeto host da VPC compartilhada.
      • IP_ADDR_NAME pelo nome do endereço IP estático.
      • ZONE por uma zona na mesma região que IP_ADDR_NAME
      • SUBNET pelo nome da sub-rede compartilhada associada ao endereço IPv4 interno estático.
  • Para criar uma instância com um endereço IPv4 interno temporário e um endereço IPv6 temporário:

    gcloud compute instances create INSTANCE_NAME \
    --project SERVICE_PROJECT_ID \
    --stack-type IPV4_IPV6 \
    --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
    --zone ZONE
    

    Faça estas substituições:

    • INSTANCE_NAME pelo nome da instância
    • SERVICE_PROJECT_ID pelo ID do projeto de serviço.
    • HOST_PROJECT_ID pelo ID do projeto host da VPC compartilhada.
    • REGION pela região contendo a sub-rede compartilhada
    • SUBNET pelo nome da sub-rede compartilhada
    • ZONE por uma zona na região especificada

API

  • Para criar uma instância com um endereço IPv4 interno temporário, especifique apenas a sub-rede.

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
    {
      "machineType": "MACHINE_TYPE",
      "name": "INSTANCE_NAME",
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"
        }
      ],
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "SOURCE_IMAGE"
          }
        }
      ]
    }
    

    Substitua os marcadores por valores válidos:

    • INSTANCE_NAME é um nome para a instância.
    • HOST_PROJECT_ID é o ID do projeto em que está a rede VPC compartilhada.
    • MACHINE_TYPE é um tipo de máquina para a instância.
    • REGION é a região que contém a sub-rede compartilhada.
    • SERVICE_PROJECT_ID é o ID do projeto de serviço.
    • SOURCE_IMAGE é uma imagem para a instância.
    • SUBNET é o nome da sub-rede compartilhada.
    • ZONE é uma zona na região especificada.

    Para mais informações, consulte o método instances.insert.

  • Para criar uma instância com um endereço IPv4 interno reservado, especifique a sub-rede e o nome do endereço IPv4 reservado.

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
    {
      "machineType": "MACHINE_TYPE",
      "name": "INSTANCE_NAME",
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
          "networkIP": "projects/SERVICE_PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME"
        }
      ],
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "SOURCE_IMAGE"
          }
        }
      ]
    }
    

    Substitua os marcadores por valores válidos:

    • ADDRESS_NAME é o nome do endereço IPv4 interno reservado.
    • INSTANCE_NAME é um nome para a instância.
    • HOST_PROJECT_ID é o ID do projeto em que está a rede VPC compartilhada.
    • MACHINE_TYPE é um tipo de máquina para a instância.
    • REGION é a região que contém a sub-rede compartilhada.
    • SERVICE_PROJECT_ID é o ID do projeto de serviço.
    • SOURCE_IMAGE é uma imagem para a instância.
    • SUBNET é o nome da sub-rede compartilhada.
    • ZONE é uma zona na região especificada.

    Para mais informações, consulte o método instances.insert.

  • Para criar uma instância com um endereço IPv4 interno temporário e um endereço IPv6 temporário, especifique a sub-rede e o tipo de pilha:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
    {
      "machineType": "MACHINE_TYPE",
      "name": "INSTANCE_NAME",
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
          "stackType": "IPv4_IPv6"
        }
      ],
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "SOURCE_IMAGE"
          }
        }
      ]
    }
    

    Substitua os marcadores por valores válidos:

    • INSTANCE_NAME é um nome para a instância.
    • HOST_PROJECT_ID é o ID do projeto em que está a rede VPC compartilhada.
    • MACHINE_TYPE é um tipo de máquina para a instância.
    • REGION é a região que contém a sub-rede compartilhada.
    • SERVICE_PROJECT_ID é o ID do projeto de serviço.
    • SOURCE_IMAGE é uma imagem para a instância.
    • SUBNET é o nome da sub-rede compartilhada.
    • ZONE é uma zona na região especificada.

    Para mais informações, consulte o método instances.insert.

Terraform

É possível usar um bloco de dados do Terraform para especificar as informações da sub-rede do host. Em seguida, use um recurso do Terraform para criar uma instância de VM em um projeto de serviço.

Especifique a sub-rede do host:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

Crie uma instância de VM em um projeto de serviço com um endereço IPv4 temporário da sub-rede compartilhada do projeto host:

resource "google_compute_instance" "ephemeral_ip" {
  project      = var.service_project
  zone         = "us-central1-a"
  name         = "my-vm"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
  }
}

Crie uma instância de VM em um projeto de serviço com um endereço IPv4 estático reservado da sub-rede compartilhada do projeto host:

resource "google_compute_instance" "reserved_ip" {
  project      = var.service_project
  zone         = "us-central1-a"
  name         = google_compute_address.internal.self_link
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
    network_ip = "int-ip"
  }
}

Criar um modelo de instância

Pense nisto ao criar um modelo de instância usando a VPC compartilhada:

  • O processo para criar um modelo de instância envolve selecionar uma rede e uma sub-rede.

    • Os modelos criados para uso em uma rede VPC compartilhada em modo personalizado precisam especificar a rede e uma sub-rede.

    • Os modelos criados para uso em uma rede VPC compartilhada em modo automático podem opcionalmente adiar a seleção de uma sub-rede. Nesses casos, uma sub-rede será selecionada na mesma região de qualquer grupo gerenciado de instâncias que use o modelo. Por definição, as redes de modo automático têm uma sub-rede em cada região.

  • Quando o principal do IAM cria um modelo de instância, o Google Cloud não realiza uma verificação de permissões para ver se o principal pode usar a sub-rede especificada. Essa verificação de permissões é sempre adiada quando é solicitado um grupo gerenciado de instâncias que usa o modelo.

  • É possível criar um modelo de instância de pilha dupla se criar o modelo em uma sub-rede de pilha dupla. As sub-redes de pilha dupla são compatíveis apenas com redes VPC de modo personalizado. O tipo de acesso IPv6 da sub-rede determina se o endereço IPv6 atribuído à VM é um endereço IPv6 interno ou externo.

    Para criar um modelo de instância de pilha dupla em uma sub-rede compartilhada, use a CLI do Google Cloud ou a API. Não é possível criar um modelo de instância de pilha dupla em uma sub-rede compartilhada com o Console do Cloud.

Console

  1. Acesse a página "Modelos de instância" no Console do Google Cloud.
    Acessar a página "Modelos de instância"
  2. Clique em Criar modelo de instância.
  3. Especifique um Nome para o modelo de instância.
  4. Clique em Gerenciamento, segurança, discos, rede, locatário único.
  5. Clique em Rede.
  6. Em Interfaces de rede, clique na rede default.
  7. Clique no botão de opção Redes compartilhadas comigo.
  8. Selecione a Sub-rede compartilhada na qual você quer criar o modelo de instância.
  9. Especifique todos os outros parâmetros necessários para o modelo de instância.
  10. Clique em Criar.

gcloud

  • Para criar um modelo de instância somente IPv4 para uso em qualquer sub-rede criada automaticamente de uma rede VPC compartilhada em modo automático:

    gcloud compute instance-templates create TEMPLATE_NAME \
    --project SERVICE_PROJECT_ID \
    --network projects/HOST_PROJECT_ID/global/networks/NETWORK
    

    Faça estas substituições:

    • TEMPLATE_NAME pelo nome do modelo.
    • SERVICE_PROJECT_ID pelo ID do projeto de serviço.
    • HOST_PROJECT_ID pelo ID do projeto host da VPC compartilhada.
    • NETWORK pelo nome da rede VPC compartilhada.
  • Para criar um modelo de instância somente IPv4 para uma sub-rede criada manualmente em uma rede VPC compartilhada (em modo automático ou personalizado):

    gcloud compute instance-templates create TEMPLATE_NAME \
    --project SERVICE_PROJECT_ID \
    --region REGION \
    --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
    

    Faça estas substituições:

    • TEMPLATE_NAME pelo nome do modelo.
    • SERVICE_PROJECT_ID pelo ID do projeto de serviço.
    • HOST_PROJECT_ID pelo ID do projeto host da VPC compartilhada.
    • REGION pela região contendo a sub-rede compartilhada
    • SUBNET pelo nome da sub-rede compartilhada
  • Para criar um modelo de instância de pilha dupla que usa uma sub-rede em uma rede VPC compartilhada em modo personalizado:

    gcloud compute instance-templates create TEMPLATE_NAME \
    --project SERVICE_PROJECT_ID \
    --stack-type IPV4_IPV6 \
    --region REGION \
    --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
    

    Faça estas substituições:

    • TEMPLATE_NAME pelo nome do modelo.
    • SERVICE_PROJECT_ID pelo ID do projeto de serviço.
    • HOST_PROJECT_ID pelo ID do projeto host da VPC compartilhada.
    • REGION pela região contendo a sub-rede compartilhada
    • SUBNET pelo nome da sub-rede compartilhada

API

  • Para criar um modelo de instância somente IPv4 que use qualquer sub-rede criada automaticamente de uma rede VPC compartilhada de modo automático, especifique a rede VPC.

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
    {
    "properties": {
      "networkInterfaces": [
        {
          "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK"
        }
      ]
    ...
    }
    

    Substitua os marcadores por valores válidos:

    • HOST_PROJECT_ID é o ID do projeto em que está a rede VPC compartilhada.
    • SERVICE_PROJECT_ID é o ID do projeto de serviço.
    • NETWORK é o nome da rede VPC compartilhada.

    Para mais informações, consulte o método instanceTemplates.insert.

  • Para criar um modelo de instância somente IPv4 que use uma sub-rede criada manualmente em uma rede VPC compartilhada (modo automático ou personalizado), especifique a sub-rede.

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
    {
    "properties": {
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"
        }
      ]
    ...
    }
    

    Substitua os marcadores por valores válidos:

    • HOST_PROJECT_ID é o ID do projeto em que está a rede VPC compartilhada.
    • REGION é a região que contém a sub-rede compartilhada.
    • SERVICE_PROJECT_ID é o ID do projeto de serviço.
    • SUBNET_NAME é o nome da sub-rede compartilhada.

    Para mais informações, consulte o método instanceTemplates.insert.

  • Para criar um modelo de instância de pilha dupla que use uma sub-rede em uma rede VPC compartilhada em modo personalizado, especifique a sub-rede e o tipo de pilha.

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
    {
    "properties": {
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
          "stackType": "IPV4_IPV6"
        }
      ]
    ...
    }
    

    Substitua os marcadores por valores válidos:

    • HOST_PROJECT_ID é o ID do projeto em que está a rede VPC compartilhada.
    • REGION é a região que contém a sub-rede compartilhada.
    • SERVICE_PROJECT_ID é o ID do projeto de serviço.
    • SUBNET_NAME é o nome da sub-rede compartilhada.

    Para mais informações, consulte o método instanceTemplates.insert.

Terraform

É possível usar um bloco de dados do Terraform para especificar as informações da sub-rede do host. Em seguida, use um recurso do Terraform para criar um modelo de instância de VM. Os endereços IPv4 das VMs vêm da sub-rede compartilhada do projeto host.

A sub-rede precisa estar na mesma região em que as instâncias de VM serão criadas.

Especifique a sub-rede do host:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

Crie um modelo de instância de VM no projeto de serviço:

resource "google_compute_instance_template" "default" {
  project      = var.service_project
  name         = "appserver-template"
  description  = "This template is used to create app server instances."
  machine_type = "n1-standard-1"
  disk {
    source_image = "debian-cloud/debian-9"
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
  }
}

Como criar um grupo de instâncias gerenciadas

Considere isto ao criar um grupo de instâncias gerenciadas usando a VPC compartilhada:

  • Os grupos de instâncias gerenciadas usados com a VPC compartilhada exigem que a conta de serviço das APIs do Google seja um Administrador do projeto de serviço, uma vez que tarefas como a criação automática de instâncias via escalonamento automático são realizadas por essa conta de serviço.

  • O processo padrão de criação de um grupo de instâncias gerenciadas envolve a seleção de uma zona ou região, dependendo do tipo de grupo e de um modelo de instância. Os detalhes de rede e sub-rede estão vinculados ao modelo de instância. Os modelos de instância qualificados são restritos àqueles que fazem referência a sub-redes na mesma região usada pelo grupo de instâncias gerenciadas.

  • Os Administradores do projeto de serviço só podem criar grupos de instâncias gerenciadas com instâncias de membro que usam sub-redes para as quais receberam permissão. Como os detalhes da rede e da sub-rede estão vinculados ao modelo da instância, os Administradores do projeto de serviço só podem usar modelos que se referem às sub-redes que estão autorizados a usar.

  • Quando o Google Cloud recebe uma solicitação para criar um grupo gerenciado de instâncias, ele verifica se o principal do IAM que fez a solicitação tem permissão para usar a sub-rede (na mesma região que o grupo) especificada no modelo. Se a verificação falhar, o grupo gerenciado de instâncias não será criado, e o Google Cloud retornará um erro: Required 'compute.subnetworks.use' permission for 'projects/SUBNET_NAME.

    Liste as sub-redes disponíveis para determinar quais podem ser usadas. Entre em contato com o Administrador da VPC compartilhada se a conta de serviço precisar de acesso adicional. Saiba mais em Contas de serviço como Administradores de projetos de serviço.

Para mais informações, consulte a seção Como criar grupos de instâncias gerenciadas na documentação do Compute Engine.

Como criar um balanceador de carga HTTP(S)

Há duas maneiras de configurar o balanceamento de carga HTTP(S) em uma rede VPC compartilhada. Independentemente do tipo de implantação, todos os componentes do balanceador de carga precisam estar na mesma organização e na mesma rede VPC compartilhada.

Para saber mais sobre arquiteturas de VPC compartilhada compatíveis, consulte:

Como criar um balanceador de carga TCP/UDP interno

O exemplo a seguir ilustra o que você precisa considerar ao criar um balanceador de carga TCP/UDP interno em uma rede VPC compartilhada. Os Administradores de projetos de serviço podem criar um balanceador de carga TCP/UDP interno que use uma sub-rede (no projeto host) a que tenham acesso. A regra de encaminhamento interno do balanceador de carga é definida no projeto de serviço, mas a respectiva referência de sub-rede aponta para uma sub-rede em uma rede VPC compartilhada do projeto host.

Antes de criar um balanceador de carga TCP/UDP interno em um ambiente de VPC compartilhada, consulte Arquitetura de VPC compartilhada.

Console

  1. Acesse a página Balanceamento de carga no Console do Google Cloud.
    Acessar a página "Balanceamento de carga"

  2. Crie seu balanceador de carga TCP/UDP interno, fazendo o seguinte ajuste: na seção Configurar serviços de front-end, selecione a sub-rede da VPC compartilhada da seção Redes compartilhadas por outros projetos do menu Sub-rede.

  3. Conclua a criação do balanceador de carga.

gcloud

Ao criar a regra de encaminhamento interno, especifique uma sub-rede no projeto host com a sinalização --subnet:

gcloud compute forwarding-rules create FR_NAME \
    --project SERVICE_PROJECT_ID \
    --load-balancing-scheme internal \
    --region REGION \
    --ip-protocol IP_PROTOCOL \
    --ports PORT,PORT,... \
    --backend-service BACKEND_SERVICE_NAME \
    --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
    --address INTERNAL_IP

Faça estas substituições:

  • FR_NAME pelo nome da regra de encaminhamento
  • SERVICE_PROJECT_ID pelo ID do projeto de serviço
  • REGION pela região contendo a sub-rede compartilhada
  • IP_PROTOCOL por TCP ou UDP, correspondendo ao protocolo do serviço de back-end do balanceador de carga
  • PORT pela porta numérica ou lista de portas para o balanceador de carga
  • BACKEND_SERVICE_NAME pelo nome do serviço de back-end, criado como parte do procedimento geral para criar um balanceador de carga TCP/UDP interno
  • HOST_PROJECT_ID pelo ID do projeto host da VPC compartilhada
  • SUBNET pelo nome da sub-rede compartilhada
  • INTERNAL_IP pelo endereço IP interno na sub-rede compartilhada. Se não for especificado, será selecionado um que esteja disponível

Consulte esta página para ver mais opções para usar com gcloud compute forwarding-rules create.

API

Crie a regra de encaminhamento interno e especifique uma sub-rede no projeto host.

POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/forwardingRules
{
  "name": "FR_NAME",
  "IPAddress": "IP_ADDRESS",
  "IPProtocol": "PROTOCOL",
  "ports": [ "PORT", ... ],
  "loadBalancingScheme": "INTERNAL",
  "subnetwork": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET",
  "network": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME",
  "backendService": "https://www.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/us-west1/backendServices/BE_NAME",
  "networkTier": "PREMIUM"
}

Substitua os marcadores por valores válidos:

  • BE_NAME é o nome do serviço de back-end, já criado como parte do procedimento geral para criar um balanceador de carga TCP/UDP interno.
  • FR_NAME é um nome para a regra de encaminhamento.
  • HOST_PROJECT_ID é o ID do projeto host da VPC compartilhada.
  • IP_ADDRESS é um endereço IP interno na sub-rede compartilhada.
  • IP_PROTOCOL é TCP ou UDP, correspondentes ao protocolo do serviço de back-end do balanceador de carga.
  • PORT é a porta numérica ou a lista de portas do balanceador de carga.
  • REGION é a região que contém a sub-rede compartilhada.
  • SERVICE_PROJECT_ID é o ID do projeto de serviço.
  • SUBNET é o nome da sub-rede compartilhada.

Para mais informações, consulte o método forwardingRules.insert.

Terraform

É possível usar um bloco de dados do Terraform para especificar a sub-rede do host e a rede do host. Em seguida, use um recurso do Terraform para criar a regra de encaminhamento.

Especifique a rede do host:

data "google_compute_network" "network" {
  name    = "my-network-123"
  project = var.project
}

Especifique a sub-rede do host:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

No projeto de serviço, crie uma regra de encaminhamento na rede e na sub-rede do projeto do host:

resource "google_compute_forwarding_rule" "default" {
  project               = var.service_project
  name                  = "l4-ilb-forwarding-rule"
  backend_service       = google_compute_region_backend_service.default.id
  region                = "europe-west1"
  ip_protocol           = "TCP"
  load_balancing_scheme = "INTERNAL"
  all_ports             = true
  allow_global_access   = true
  network               = data.google_compute_network.network.self_link
  subnetwork            = data.google_compute_subnetwork.subnet.self_link
}

A seguir