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 Gemini no projeto de serviço, ph-fm-svc-project (projeto de serviço de modelo de base) com os atributos de política de serviço que permitem acesso privado à 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: criar o nível de acesso

Se os usuários finais precisarem de acesso à Vertex AI pelo console do 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 em estações de trabalho do Cloud, 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 corporativos acesse o console do Google Cloud.

O Access Context Manager permite que Google Cloud os administradores da organização definam um controle de acesso refinado e baseado em atributos para projetos e recursos no Google 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 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 All 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 Quando a condição for atendida, retorne, selecione 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 exige 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 grande perímetro 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 simulação. No modo de simulação, o perímetro registra violações como se os perímetros fossem aplicados, mas não impedem o acesso a serviços restritos. O uso do modo de simulação antes de mudar para o modo obrigatório é uma 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 VPC Service Controls

  2. Na página VPC Service Controls, clique em Modo de simulação.

  3. Clique em Novo perímetro.

  4. Na guia Novo perímetro de serviço da VPC, na caixa Nome do perímetro, digite um nome para o 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.

Selecionar 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 Projects.

Selecione os serviços restritos

Nesta arquitetura de referência, o escopo das APIs restritas é limitado, permitindo apenas as APIs necessárias para a 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çosGoogle 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 restritos, selecione a API Vertex AI.

  4. Clique em Adicionar a API Vertex AI.

Opcional: selecione os serviços acessíveis pela 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 após a criação de 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 particular 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, você pode fazer o seguinte:

  • Crie 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 de DNS de endpoint personalizado usado para resolver as APIs do Google.

Na arquitetura de referência, um endpoint da API do Google do Private Service Connect chamado restricted, com o endereço IP 10.10.10.3,, é implantado com a VPC-SC de destino, usada como um IP virtual (VIP) para acessar serviços restritos configurados no perímetro da 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 AWS VPC

A conectividade de rede entre a Amazon Web Services (AWS) e o Google Cloud é estabelecida usando túneis de rede privada virtual de alta disponibilidade (HA VPN). 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 perfeita entre os recursos na AWS e na Google Cloud, o protocolo de gateway de borda (BGP) é usado.

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 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 HA entre a AWS e a rede Google Cloud . Como resultado, Google Cloud e a AWS podem rotear o tráfego bidirecional pela VPN. Para mais informações sobre como configurar conexões de VPN de alta disponibilidade, consulte Criar conexões de 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 pesquisa DNS para a API Vertex AI para acessar o Gemini, o Route 53 retorna o endereço IP das APIs do Google do Private Service Connect. O Jupyter Notebook usa o endereço IP recebido do Route 53 para estabelecer uma conexão com o endpoint das APIs do Google do Private Service Connect roteado pela VPN HA para Google Cloud.

Configurar atualizações do Sagemaker

Esta arquitetura de referência usa instâncias do Amazon SageMaker Notebook para acessar a API Vertex AI. No entanto, você pode fazer a mesma configuração com outros serviços de computação que oferecem suporte à VPC, como Amazon EC2 ou 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 em outro provedor de nuvem.

A instância do Jupyter Notebook invoca uma chamada de API para o modelo 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 da Vertex AI pode ser chamada usando o REST, o gRPC ou o 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-cloud-aiplatform
    
  2. Importe as dependências:

    from google.cloud import aiplatform
    from vertexai.generative_models import GenerativeModel, Part, SafetySetting
    import vertexai
    import base64
    
  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 a s us-central1
    API_ENDPOINT="us-central1-aiplatform-restricted.p.googleapis.com" # PSC Endpoint
    MODEL_ID="gemini-1.5-flash-002" # Gemini Model ID
    
  4. Inicializar o SDK da Vertex AI para Python:

    vertexai.init(project=PROJECT_ID,api_endpoint=API_ENDPOINT, api_transport="rest")
    
  5. Faça a seguinte solicitação à API Vertex AI Gemini:

    import base64
    from vertexai.generative_models import GenerativeModel, Part, SafetySetting
    
    def generate(model_id, prompt):
        model = GenerativeModel(
            model_id,
        )
        responses = model.generate_content(
            [prompt],
            generation_config=generation_config,
            safety_settings=safety_settings,
            stream=True,
        )
    
        for response in responses:
            print(response.text, end="")
    
    generation_config = {
        "max_output_tokens": 8192,
        "temperature": 1,
        "top_p": 0.95,
    }
    
    safety_settings = [
        SafetySetting(
            category=SafetySetting.HarmCategory.HARM_CATEGORY_HATE_SPEECH,
            threshold=SafetySetting.HarmBlockThreshold.OFF
        ),
        SafetySetting(
            category=SafetySetting.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
            threshold=SafetySetting.HarmBlockThreshold.OFF
        ),
        SafetySetting(
            category=SafetySetting.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
            threshold=SafetySetting.HarmBlockThreshold.OFF
        ),
        SafetySetting(
            category=SafetySetting.HarmCategory.HARM_CATEGORY_HARASSMENT,
            threshold=SafetySetting.HarmBlockThreshold.OFF
        ),
    ]
    
    prompt = "which weighs more: 1kg feathers or 1kg stones"
    generate(MODEL_ID,prompt)
    

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

    They weigh the same. Both weigh 1 kilogram.
    

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

Nesta seção, você configura algumas variáveis importantes que serão usadas ao longo do processo. Essas variáveis armazenam informações sobre seu projeto, como a localização dos recursos, o modelo específico do Gemini e o endpoint do Private Service Connect que você quer usar.

  1. Abra uma janela do 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 Vertex AI Gemini:

    {
       "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 seu perímetro no modo de simulação

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

Depois de validar o perímetro no modo de simulação, mude para o modo obrigatório.

A seguir