Permitir o acesso multinuvem a recursos protegidos de um endpoint particular fora de um perímetro do VPC Service Controls

Arquitetura de referência

Na arquitetura de referência a seguir, uma VPC compartilhada é implantada com um modelo do Gemini no projeto de serviço, ph-fm-svc-project (projeto de serviço do modelo de base) com os atributos da política de serviço que permitem acesso particular à API Vertex AI da AWS:

  • Um único perímetro do VPC Service Controls
  • Identidade do usuário definida pelo projeto

Diagrama arquitetônico do uso do VPC Service Controls para criar um perímetro de serviço.

Opcional: crie o nível de acesso

Se os usuários finais precisarem de acesso à Vertex AI pelo console Google Cloud , siga as instruções desta seção para criar um nível de acesso do VPC Service Controls. No entanto, se o acesso programático às APIs for de fontes particulares (como no local com o Acesso privado do Google ou Cloud Workstations), o nível de acesso não será necessário.

Nesta arquitetura de referência, usamos um intervalo CIDR corporativo, corp-public-block, para permitir que o tráfego de funcionários da empresa acesse o console Google Cloud .

Com o Access Context Manager, os administradores da organização Google Cloud podem definir um controle de acesso refinado e baseado em atributos para projetos e recursos noGoogle Cloud.

Os níveis de acesso descrevem os requisitos para que as solicitações sejam atendidas. Exemplos incluem:

  • Tipo de dispositivo e sistema operacional (requer uma licença do Chrome Enterprise Premium)
  • Endereço IP
  • Identidade do usuário

Se esta for a primeira vez que a organização usa o Access Context Manager, os administradores precisarão definir uma política de acesso, que é um contêiner para níveis de acesso e perímetros de serviço.

  1. No seletor de projetos na parte de cima do console do Google Cloud , clique na guia Todos e selecione sua organização.

  2. Crie um nível de acesso básico seguindo as instruções na página Criar um nível de acesso básico. Especifique as seguintes opções:

    1. Em Criar condições em, escolha Modo básico.
    2. No campo Título do nível de acesso, insira corp-public-block.
    3. Na seção Condições, para a opção Se a condição for atendida, retorne, escolha VERDADEIRO.
    4. Em Sub-redes de IP, escolha IP público.
    5. Para o intervalo de endereços IP, especifique o intervalo CIDR externo que precisa de acesso ao perímetro do VPC Service Controls.

Criar o perímetro de serviço do VPC Service Controls

Ao criar um perímetro de serviço, você permite o acesso a serviços protegidos de fora do perímetro especificando os projetos protegidos. Ao usar o VPC Service Controls com a VPC compartilhada, você cria um perímetro grande que inclui os projetos host e de serviço. Se você selecionar apenas o projeto de serviço no perímetro, os endpoints de rede pertencentes a projetos de serviço vão parecer estar fora do perímetro, porque as sub-redes estão associadas apenas ao projeto host.

Selecione o tipo de configuração do novo perímetro

Nesta seção, você cria um perímetro de serviço do VPC Service Controls no modo de teste. No modo de teste, o perímetro registra violações como se os perímetros fossem aplicados, mas não impede o acesso a serviços restritos. É recomendável usar modo de teste antes de mudar para o modo obrigatório como prática recomendada.

  1. No menu de navegação do console do Google Cloud , clique em Segurança e depois em VPC Service Controls.

    Acessar a página do VPC Service Controls

  2. Na página VPC Service Controls, clique em Modo de teste.

  3. Clique em Novo perímetro.

  4. Na guia Novo perímetro de serviço da VPC, digite um nome para o perímetro na caixa Nome do perímetro. Caso contrário, aceite os valores padrão.

    O nome do perímetro pode ter no máximo 50 caracteres, precisa começar com uma letra e pode conter apenas letras latinas ASCII (a-z, A-Z), números (0-9) ou sublinhados (_). O nome do perímetro diferencia maiúsculas de minúsculas e precisa ser exclusivo em uma política de acesso.

Selecione os recursos a serem protegidos

  1. Clique em Recursos a serem protegidos.

  2. Para adicionar projetos ou redes VPC que você quer proteger no perímetro, faça o seguinte:

    1. Clique em Adicionar recursos.

    2. Para adicionar projetos ao perímetro, no painel Adicionar recursos, clique em Adicionar projeto.

      1. Para selecionar um projeto, marque a caixa de seleção dele na caixa de diálogo Adicionar projetos. Nesta arquitetura de referência, selecionamos os seguintes projetos:

        • infra-host-project
        • aiml-host-project
        • ph-fm-svc-project
      2. Clique em Adicionar recursos selecionados. Os projetos adicionados aparecem na seção Projetos.

Selecione os serviços restritos

Nesta arquitetura de referência, o escopo das APIs restritas é limitado, permitindo apenas as APIs necessárias para o Gemini. No entanto, como prática recomendada, recomendamos que você restrinja todos os serviços ao criar um perímetro para reduzir o risco de exfiltração de dados dos serviços doGoogle Cloud .

Para selecionar os serviços que você quer proteger no perímetro, faça o seguinte:

  1. Clique em Serviços restritos.

  2. No painel Serviços restritos, clique em Adicionar serviços.

  3. Na caixa de diálogo Especificar serviços a serem restringidos, selecione API Vertex AI.

  4. Clique em Adicionar API Vertex AI.

Opcional: selecione os serviços acessíveis da VPC

A configuração Serviços acessíveis pela VPC limita o conjunto de serviços acessíveis de endpoints de rede dentro do perímetro de serviço. Nesta arquitetura de referência, vamos manter a configuração padrão de Todos os serviços.

Opcional: selecione o nível de acesso

Se você criou um nível de acesso CIDR corporativo em uma seção anterior, faça o seguinte para permitir o acesso a recursos protegidos de fora do perímetro:

  1. Clique em Níveis de acesso.

  2. Clique na caixa Escolher nível de acesso.

    Também é possível adicionar níveis de acesso depois de criar um perímetro.

  3. Marque a caixa de seleção correspondente ao nível de acesso. Nesta arquitetura de referência, é corp-public-block.

Políticas de entrada e saída

Nesta arquitetura de referência, não é necessário especificar nenhuma configuração nos painéis Política de entrada ou Política de saída.

Criar o perímetro

Depois de concluir as etapas de configuração anteriores, crie o perímetro clicando em Criar perímetro.

Configurar a conectividade de rede entre a AWS e as APIs do Google

Configurar o Private Service Connect para APIs do Google

O Private Service Connect para acessar APIs do Google é uma alternativa ao uso do Acesso privado do Google ou dos nomes de domínio público para APIs do Google. Nesse caso, o produtor é o Google.

Com o Private Service Connect, é possível fazer o seguinte:

  • Criar um ou mais endereços IP internos para acessar as APIs do Google em diferentes casos de uso.
  • Direcionar o tráfego local para regiões e endereços IP específicos ao acessar as APIs do Google.
  • Crie um nome DNS de endpoint personalizado usado para resolver as APIs do Google.

Na arquitetura de referência, um endpoint de API do Google do Private Service Connect chamado restricted, com o endereço IP 10.10.10.3,, é implantado com o VPC-SC de destino, usado como um IP virtual (VIP) para acessar serviços restritos configurados no perímetro do VPC-SC. Não é possível segmentar serviços não restritos com o VIP. Para mais informações, consulte Sobre o acesso à API Vertex AI | Google Cloud.

Configurar a rede VPC da AWS

A conectividade de rede entre a Amazon Web Services (AWS) e Google Cloud é estabelecida usando túneis de rede privada virtual de alta disponibilidade (VPN de alta disponibilidade). Essa conexão segura facilita a comunicação particular entre os dois ambientes de nuvem. No entanto, para permitir o roteamento e a comunicação perfeitos entre os recursos na AWS e no Google Cloud, é usado o protocolo de gateway de borda (BGP).

No ambiente Google Cloud , é necessária uma divulgação de rota personalizada. Essa rota personalizada anuncia especificamente o endereço IP da API do Google do Private Service Connect para a rede da AWS. Ao anunciar esse endereço IP, a AWS pode estabelecer uma rota direta para a API do Google, ignorando a Internet pública e melhorando o desempenho.

Na arquitetura de referência, uma instância do SageMaker é implantada com uma associação à VPC da AWS em que a VPN é estabelecida com Google Cloud. O Border Gateway Protocol (BGP) é usado para anunciar rotas na VPN de alta disponibilidade entre a AWS e a rede Google Cloud . Como resultado, o Google Cloud e a AWS podem rotear o tráfego bidirecional por VPN. Para mais informações sobre como configurar conexões VPN de alta disponibilidade, consulte Criar conexões VPN de alta disponibilidade entre Google Cloud e AWS.

Configurar atualizações do Route 53

Crie uma zona hospedada particular chamada p.googleapis.com no AWS Route 53 e adicione o nome de domínio totalmente qualificado REGION-aiplatform-restricted.p.googleapis.com com o endereço IP 10.10.10.3 (IP do Googleapis do Private Service Connect) como o registro A do DNS. Quando o SDK do Jupyter Notebook realiza uma busca DNS para a API Vertex AI para acessar o Gemini, o Route 53 retorna o endereço IP do Private Service Connect para APIs do Google. O Jupyter Notebook usa o endereço IP obtido do Route 53 para estabelecer uma conexão com o endpoint das APIs do Google do Private Service Connect roteado pela VPN de alta disponibilidade para Google Cloud.

Configurar atualizações do SageMaker

Essa arquitetura de referência usa instâncias de notebook do Amazon SageMaker para acessar a API Vertex AI. No entanto, é possível fazer a mesma configuração com outros serviços de computação que oferecem suporte à VPC, como o Amazon EC2 ou o AWS Lambda.

Para autenticar suas solicitações, use uma chave de conta de serviço Google Cloud ou a federação de identidade da carga de trabalho. Para informações sobre como configurar a federação de identidade da carga de trabalho, consulte No local ou outro provedor de nuvem.

A instância do Jupyter Notebook invoca uma chamada de API para o modelo do Gemini hospedado em Google Cloud realizando uma resolução de DNS para o nome de domínio totalmente qualificado REGION-aiplatform-restricted.p.googleapis.com das APIs do Google do Private Service Connect personalizadas, substituindo o nome de domínio totalmente qualificado padrão (REGION-aiplatform.googleapis.com).

A API Vertex AI pode ser chamada usando Rest, gRPC ou SDK. Para usar o nome de domínio totalmente qualificado do cliente do Private Service Connect, atualize o API_ENDPOINT no Jupyter Notebook com o seguinte:

Instruções para usar o SDK da Vertex AI para Python

  1. Instale o SDK:

    pip install --upgrade google-genai
    
  2. Importe as dependências:

    from google.cloud import genai
    from google.genai.types import (
       GenerateContentConfig,
       HarmBlockThreshold,
       HarmCategory,
       Part,
       SafetySetting
    )
    
  3. Inicialize as seguintes variáveis de ambiente:

    PROJECT_ID="ph-fm-svc-projects" # Google Cloud Project ID
    LOCATION_ID="us-central1" # Enter Vertex AI Gemini region such as us-central1
    API_ENDPOINT="https://us-central1-aiplatform-restricted.p.googleapis.com" # PSC Endpoint
    MODEL_ID="gemini-2.0-flash-001" # Gemini Model ID
    
  4. Inicialize o SDK da Vertex AI para Python:

    from google import genai
    client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT})
    
  5. Faça a seguinte solicitação para a API Gemini da Vertex AI:

    prompt = "which weighs more, 1kg feathers or 1kg stones"
    
    safety_settings = [
        SafetySetting(
            category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
            threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
        ),
        SafetySetting(
            category=HarmCategory.HARM_CATEGORY_HARASSMENT,
            threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
        ),
        SafetySetting(
            category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
            threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
        ),
        SafetySetting(
            category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
            threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
        ),
    ]
    
    response = client.models.generate_content(
        model=MODEL_ID,
        contents=prompt,
        config=GenerateContentConfig(
            safety_settings=safety_settings,
        ),
    )
    
    # Response will be `None` if it is blocked.
    print(response.text)
    

    Neste ponto, você pode fazer uma chamada de API para o Gemini no notebook Jupyter para acessar o Gemini hospedado em Google Cloud. Se a chamada for bem-sucedida, a saída será assim:

    They weigh the same. Both weigh 1 kilogram.
    

Instruções para usar a API REST da Vertex AI

Nesta seção, você vai configurar algumas variáveis importantes usadas em todo o processo. Essas variáveis armazenam informações sobre seu projeto, a localização dos recursos, o modelo específico do Gemini e o endpoint do PSC que você quer usar. Abra uma janela de terminal em um notebook do JupyterLab para executar os comandos a seguir:

  1. Abra uma janela de terminal em um notebook do Jupyter.

  2. Inicialize as seguintes variáveis de ambiente:

    export PROJECT_ID="ph-fm-svc-projects"
    export LOCATION_ID="us-central1"
    export API_ENDPOINT="us-central1-aiplatform-restricted.p.googleapis.com" export MODEL_ID="gemini-1.5-flash-002"
    
  3. Use um editor de texto, como vim ou nano, para criar um novo arquivo chamado request.json que contenha a seguinte solicitação formatada para a API Gemini da Vertex AI:

    {
        "contents": [
            {
                "role": "user",
                "parts": [
                    {
                        "text": "which weighs more, 1kg feathers or 1kg stones"
                   }
               ]
            }
        ],
            "generationConfig": {
            "temperature": 1,
            "maxOutputTokens": 8192,
            "topP": 0.95,
            "seed": 0
        },
        "safetySettings": [
            {
                "category": "HARM_CATEGORY_HATE_SPEECH",
                "threshold": "OFF"
            },
            {
                "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
                "threshold": "OFF"
            },
            {
                "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
                "threshold": "OFF"
            },
            {
                "category": "HARM_CATEGORY_HARASSMENT",
                "threshold": "OFF"
            }
        ]
    }
    
  4. Faça a seguinte solicitação curl para a API Gemini da Vertex AI:

    curl -v \
    -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://$API_ENDPOINT/v1/projects/$PROJECT_ID/locations/$LOCATION_ID/publishers/google/models/$MODEL_ID:streamGenerateContent" -d '@request.json'
    

Validar o perímetro no modo de teste

Nesta arquitetura de referência, o perímetro de serviço é configurado no modo de teste, permitindo testar o efeito da política de acesso sem aplicação. Isso significa que você pode ver como suas políticas afetariam o ambiente se estivessem ativas, mas sem o risco de interromper o tráfego legítimo.

Depois de validar o perímetro no modo de teste, mude para o modo de aplicação.

A seguir