Esta página apresenta uma forma de executar o gateway de aplicativos Claude no Google Cloud. A configuração é um exemplo funcional para infraestrutura gerenciada pelo cliente em vez de uma implantação de produção suportada; use-a para ver como as peças se encaixam antes de adaptá-la ao seu próprio ambiente. Para os requisitos independentes de plataforma, consulte o guia de implantação.
oidc muda. Consulte Configuração do provedor de identidade para detalhes específicos por IdP.
O que você construirá
- Serviço Cloud Run ou GKE Deployment executando o contêiner do gateway
- Repositório Artifact Registry para a imagem do gateway
- Instância Cloud SQL para PostgreSQL, apenas IP privado, para o store do gateway
- Segredos Secret Manager para
gateway.yaml, a chave de assinatura JWT, o segredo do cliente OIDC e a URL do Postgres - Conta de serviço com
roles/aiplatform.user, anexada diretamente no Cloud Run ou vinculada via Workload Identity no GKE - Internal Application Load Balancer no Cloud Run, ou um GKE Ingress interno de classe
gce-internalno GKE, para HTTPS
Pré-requisitos
- Um projeto GCP com faturamento habilitado e permissão para criar os recursos acima
- A CLI
gcloud, autenticada comgcloud auth login, e Docker instalado localmente - Para o caminho GKE:
kubectle um cluster GKE no VPC criado no passo a passo abaixo - Acesso aos modelos Claude que você precisa no Model Garden, em uma região que os publica
- Um cliente de aplicação web OAuth 2.0 do Google Workspace com URI de redirecionamento
https://<gateway-host>/oauth/callback; consulte Configuração do provedor de identidade - Um nome de host TLS para o gateway, normalmente um nome DNS interno apontando para o balanceador de carga
Implantar o gateway
Os passos abaixo provisionam a implantação completa com comandosgcloud.
Habilitar APIs
Habilite as APIs de serviço que o passo a passo usa:As APIs que você precisa dependem do caminho de implantação:
computeeservicenetworking: necessárias para o caminho Cloud SQL com IP privadorun: apenas Cloud Runcontainer: apenas GKE
Criar a conta de serviço e conceder IAM
O gateway é executado como uma conta de serviço dedicada com permissão para chamar Agent Platform. Ele alcança Cloud SQL sobre o VPC com um usuário de senha, portanto nenhuma função IAM do Cloud SQL é necessária:Em seguida, habilite os modelos Claude para o projeto no Model Garden; os modelos são publicados em regiões específicas, portanto verifique cada cartão de modelo.
Construir e enviar a imagem para Artifact Registry
Construa a imagem de acordo com os requisitos de imagem de contêiner, usando o binário glibc
linux-x64, e envie-a:Provisionar Cloud SQL para PostgreSQL
Crie a instância em um VPC via Private Services Access para que ela não tenha IP público; isso também satisfaz projetos onde O runtime Cloud Run ou GKE deve estar neste VPC ou roteado para ele.
constraints/sql.restrictPublicIp é aplicado:Escrever gateway.yaml
O bloco
O exemplo abaixo usa os valores do balanceador de carga interno na frente do Cloud Run.
upstreams aponta para Agent Platform com auth: {}, portanto o gateway autentica via Application Default Credentials da conta de serviço do runtime. Consulte a referência de configuração para cada campo.Dois campos listen dependem do que está na frente do gateway:public_url: necessário atrás de Cloud Run ou um GKE Ingress. O gateway constrói oredirect_urido IdP e seu documento de descoberta apenas a partir deste valor, nunca a partir de cabeçalhosX-Forwarded-*.trusted_proxies: os intervalos de origem do front-end. O gateway honraX-Forwarded-Forapenas quando o par TCP está nesta lista, depois percorre a cadeia passando hops confiáveis, portanto os limites de taxa de login por IP e eventos de auditoria registram IPs de desenvolvedores em vez do balanceador de carga.
trusted_proxies para corresponder ao seu front-end. Um GKE Ingress externo de classe gce não está listado: ele provisiona um endereço de regra de encaminhamento público, que a verificação rede privada do /login rejeita.| Front-end | trusted_proxies |
|---|---|
| Cloud Run alcançado diretamente, sem balanceador de carga | [169.254.0.0/16] |
| Internal Application Load Balancer na frente do Cloud Run | 169.254.0.0/16 mais CIDR da sua sub-rede somente proxy |
GKE internal Ingress, classe gce-internal | CIDR da sua sub-rede somente proxy |
gateway.yaml
Os id_tokens do Google não carregam nenhuma reivindicação
groups. Para usar políticas baseadas em grupos em managed.policies com Google Workspace como IdP, configure oidc.google_groups, que procura os grupos de cada usuário através da API Admin SDK Directory usando uma conta de serviço com delegação em todo o domínio. Sem isso, corresponda em email_domain em vez disso.Armazenar segredos no Secret Manager
Crie quatro segredos e conceda
Como os segredos chegam ao contêiner difere por caminho:
roles/secretmanager.secretAccessor à conta de serviço claude-gateway:| Segredo | Fonte |
|---|---|
gateway-jwt-secret | openssl rand -base64 32 |
gateway-oidc-client-secret | Google Cloud Console → cliente OAuth |
gateway-postgres-url | $GATEWAY_POSTGRES_URL do passo Cloud SQL |
gateway-config | o gateway.yaml completo do passo anterior |
- No GKE eles são montados como arquivos via o driver CSI do Secret Manager, e
gateway.yamlreferencia${file:/secrets/...}. - No Cloud Run, que não pode montar múltiplos segredos em um diretório,
gateway.yamlé montado como arquivo e os outros três são injetados como variáveis de ambiente, portantogateway.yamlreferencia${GATEWAY_JWT_SECRET},${OIDC_CLIENT_SECRET}e${GATEWAY_POSTGRES_URL}em vez disso.
Implantar
- Cloud Run
- GKE
O comando abaixo implanta para produção atrás de um balanceador de carga interno.Egresso VPC direto, via
--network, --subnet e --vpc-egress=private-ranges-only, permite que o serviço alcance o IP privado do Cloud SQL diretamente. Egresso público para os endpoints do Agent Platform e accounts.google.com vai diretamente para a internet em vez de através do VPC, portanto nenhum Cloud NAT é necessário.A verificação de IAM do invoker deve estar aberta ou desabilitada. O gateway executa seu próprio OIDC e seus clientes não carregam nenhum token GCP, portanto a verificação de invoker do Cloud Run tem que admitir solicitações não autenticadas. A autenticação OIDC do gateway autentica a solicitação uma vez que ela alcança o contêiner, com allowed_email_domains controlando quais domínios podem fazer login.Dois sinalizadores admitem solicitações não autenticadas:--no-invoker-iam-check: desabilita a verificação sem nenhuma vinculaçãoallUserspara gerenciar, e funciona sob Domain Restricted Sharing--allow-unauthenticated: concede aoallUsersa funçãorun.invoker; use-o se sua organização não permitir--no-invoker-iam-check
--ingress é uma camada separada e independente da verificação de invoker; mantenha-a definida para limitar o serviço à sua rede corporativa.Por padrão, a URL *.run.app do Cloud Run resolve para um endereço público, que a verificação rede privada do /login rejeita. Duas topologias fornecem aos desenvolvedores um nome de host resolvível privadamente, e o Cloud Run não provisiona nenhuma para você:- Internal Application Load Balancer, a topologia que o comando de implantação acima assume: implante com
--ingress=internal-and-cloud-load-balancing, provisione um Internal Application Load Balancer na frente do serviço com um nome DNS interno e certificado, e definalisten.public_urlpara esse nome de host. - Ingresso somente interno sem balanceador de carga: implante com
--ingress=internale deixelisten.public_urlcomo a URL*.run.app, o padrão nos ativos de referência abaixo. Para*.run.appresolver privadamente, sua equipe de rede deve já operar um endpoint Private Service Connect para APIs do Google, uma zona privada Cloud DNS resolvendo*.run.apppara ele, e roteamento no local para esse endpoint.
<public_url>/oauth/callback antes do primeiro login. Reimplante após alterar public_url, porque o gateway constrói sua origem pública apenas a partir dessa configuração e ignora X-Forwarded-Host e X-Forwarded-Proto. X-Forwarded-For é honrado para IPs de cliente apenas quando listen.trusted_proxies está definido.Enviar a URL do gateway para máquinas de desenvolvedores
O gateway agora está em execução, mas os desenvolvedores não podem alcançá-lo a partir de
/login até que a URL do gateway esteja em suas máquinas. Defina forceLoginMethod e forceLoginGatewayUrl no arquivo de configurações gerenciadas que você implanta em cada dispositivo via MDM. Não há opção de gateway no seletor de login para um desenvolvedor selecionar manualmente.Referência Terraform
Os ativos de implantação de referência automatizam o caminho Cloud Run nesta página; os ativos de configuração e imagem se aplicam a ambos os caminhos:setup.sh: um provisionadorgcloudidempotente que percorre o caminho completo do Cloud Run, desde a habilitação de APIs até a primeira implantaçãoterraform/: a mesma implantação como infraestrutura como código, para uma implantação greenfield: uma aplicação direcionada para criar o repositório Artifact Registry, depois construir e enviar a imagem, depois uma aplicação completagateway.yaml.examplee umDockerfilepara a imagem de runtime distroless
internal, portanto nenhum balanceador de carga é necessário. Para corresponder à implantação de produção atrás de um ALB desta página, execute setup.sh com INGRESS=internal-and-cloud-load-balancing, ou defina a variável Terraform ingress para INGRESS_TRAFFIC_INTERNAL_LOAD_BALANCER. Os artefatos também padrão da camada de invoker para uma concessão allUsers run.invoker em vez de --no-invoker-iam-check, o inverso do passo a passo desta página; ambos funcionam, e a escolha depende das restrições de política da sua organização.
Os ativos são fornecidos como exemplos funcionais, não como um artefato de produção suportado; revise e adapte-os ao seu ambiente.
Troubleshooting
Para erros de inicialização e login do gateway, consulte a tabela de troubleshooting independente de plataforma. As entradas abaixo são específicas do Google Cloud.| Sintoma | Causa | Correção |
|---|---|---|
Cloud Run retorna 403 Forbidden antes de alcançar o contêiner | A verificação de IAM do invoker ainda está habilitada | Implante com --no-invoker-iam-check, ou conceda ao allUsers a função run.invoker com --allow-unauthenticated |
--no-invoker-iam-check rejeitado com invoker_iam_disabled is not currently available | Bloqueado por constraints/run.managed.requireInvokerIam | Use --allow-unauthenticated. Se Domain Restricted Sharing via constraints/iam.allowedPolicyMemberDomains também bloquear isso, use o caminho GKE, que expõe o gateway na camada de rede sem nenhuma vinculação allUsers. |
Container manifest type … must support amd64/linux na implantação | A imagem foi construída em um host não-amd64, ou buildx emitiu um índice de imagem OCI | Construa com --platform=linux/amd64 --provenance=false |
| A inicialização do gateway sai com um erro de tempo limite de conexão Postgres no Cloud Run | O serviço não está anexado ao VPC, ou Cloud SQL não tem IP privado nesse VPC; o store para de esperar após 5 segundos | Implante com --network e --subnet para egresso VPC direto, e crie a instância Cloud SQL com --no-assign-ip e --network apontando para o mesmo VPC |
Solicitações do Agent Platform retornam 403 PERMISSION_DENIED | O runtime não está usando a conta de serviço claude-gateway, ou o modelo não está habilitado no Model Garden para o projeto | Defina --service-account no Cloud Run ou vincule Workload Identity no GKE, e habilite cada modelo Claude no Model Garden para a região de destino |
| Respostas de streaming são cortadas após uma duração fixa | Tempo limite de solicitação do front-end: o serviço backend do balanceador de carga atrás do GKE Ingress padrão para 30 segundos e Cloud Run para 300 segundos | Anexe um BackendConfig com um timeoutSec elevado no GKE, ou implante com --timeout=3600 no Cloud Run |
Próximos passos
- Referência de configuração: cada opção
gateway.yaml, incluindomanaged.policiesetelemetry - Implantação e operações: configuração de IdP, verificações de saúde, rotação de segredo JWT, upgrades e o modelo de segurança
- Visão geral do gateway de aplicativos Claude: quickstart e conectando desenvolvedores