本页介绍在 Google Cloud 上运行 Claude apps gateway 的一种方式。该配置是客户管理基础设施的工作示例,而不是受支持的生产部署;使用它来了解各个部分如何组合在一起,然后再根据您自己的环境进行调整。有关平台无关的要求,请参阅部署指南。
oidc 块会改变。有关每个 IdP 的详细信息,请参阅身份提供商设置。
您将构建的内容
- Cloud Run 服务或 GKE Deployment 运行网关容器
- Artifact Registry 存储库用于网关镜像
- Cloud SQL for PostgreSQL 实例,仅限私有 IP,用于网关的存储
- Secret Manager 机密用于
gateway.yaml、JWT 签名密钥、OIDC 客户端机密和 Postgres URL - 服务账户,具有
roles/aiplatform.user,直接附加到 Cloud Run 或通过 Workload Identity 绑定到 GKE - HTTPS 前端,由您提供:Cloud Run 前面的内部应用负载均衡器,本演练为网关配置但不创建,或 GKE 上类别为
gce-internal的内部 GKE Ingress
前置条件
- 启用了计费的 GCP 项目,以及创建上述资源的权限
gcloudCLI,使用gcloud auth login进行身份验证,并在本地安装了 Docker- 对于 GKE 路径:
kubectl和在下面演练中创建的 VPC 上的 GKE 集群 - 在 Model Garden 中访问您需要的 Claude 模型,在发布这些模型的区域中
- Google Workspace OAuth 2.0 网络应用程序客户端,重定向 URI 为
https://<gateway-host>/oauth/callback;请参阅身份提供商设置 - 网关的 TLS 主机名,通常是指向负载均衡器的内部 DNS 名称
部署网关
以下步骤使用gcloud 命令配置完整部署。
1
启用 API
启用演练使用的服务 API:所需的 API 取决于部署路径:
compute和servicenetworking:私有 IP Cloud SQL 路径所需run:仅限 Cloud Runcontainer:仅限 GKE
2
创建服务账户并授予 IAM
网关作为专用服务账户运行,有权调用 Google Cloud 的 Agent Platform。它通过 VPC 使用密码用户访问 Cloud SQL,因此不需要 Cloud SQL IAM 角色:然后在 Model Garden 中为项目启用 Claude 模型;模型发布到特定区域,因此请检查每个模型卡。
3
构建镜像并将其推送到 Artifact Registry
根据容器镜像要求构建镜像,使用
linux-x64 glibc 二进制文件,然后推送:4
为 PostgreSQL 配置 Cloud SQL
通过私有服务访问在 VPC 上创建实例,使其没有公共 IP;这也满足强制执行 Cloud Run 或 GKE 运行时必须在此 VPC 上或路由到此 VPC。
constraints/sql.restrictPublicIp 的项目:5
编写 gateway.yaml
upstreams 块使用 auth: {} 指向 Google Cloud 的 Agent Platform,因此网关通过运行时服务账户的应用默认凭证进行身份验证。有关每个字段,请参阅配置参考。两个 listen 字段描述网关的前端:public_url:外部https://源,对于任何非环回绑定都是必需的;请参阅listen参考。网关仅从此值构建 IdPredirect_uri和其发现文档,从不从X-Forwarded-*标头构建。trusted_proxies:前端的源范围。网关仅在 TCP 对等体在此列表中时才遵守X-Forwarded-For,然后遍历链越过受信任的跳跃,因此按 IP 登录速率限制和审计事件记录开发者 IP 而不是负载均衡器的 IP。
trusted_proxies 以匹配您的前端。类 gce 的外部 GKE Ingress 未列出:它配置一个公共转发规则地址,/login 私有网络检查拒绝该地址。下面的示例使用内部负载均衡器前置 Cloud Run 的值。
gateway.yaml
Google id_tokens 不包含
groups 声明。要在 managed.policies 中使用基于组的策略,以 Google Workspace 作为 IdP,请配置 oidc.google_groups,它使用具有域范围委派的服务账户通过 Admin SDK Directory API 查找每个用户的组。没有它,改为匹配 email_domain。6
在 Secret Manager 中存储密钥
创建四个密钥并向
claude-gateway 服务账户授予 roles/secretmanager.secretAccessor:密钥到达容器的方式因路径而异:
- 在 GKE 上,它们通过 Secret Manager CSI 驱动程序作为文件挂载,
gateway.yaml引用${file:/secrets/...}。 - 在 Cloud Run 上,它无法将多个密钥挂载到一个目录中,
gateway.yaml作为文件挂载,其他三个作为环境变量注入,因此gateway.yaml改为引用${GATEWAY_JWT_SECRET}、${OIDC_CLIENT_SECRET}和${GATEWAY_POSTGRES_URL}。
7
部署
- Cloud Run
- GKE
下面的命令在内部负载均衡器后面部署用于生产。直接 VPC 出口,通过
--network、--subnet 和 --vpc-egress=private-ranges-only,让服务直接到达 Cloud SQL 私有 IP。每个实例最多持有 store.max_connections 个 Postgres 连接,默认为 5 个,因此保持最大实例数 × store.max_connections 低于您的 Cloud SQL 层的连接限制;参考资产为 db-g1-small 层将实例上限设为 8 是出于这个原因。到 Google Cloud 的 Agent Platform 端点和 accounts.google.com 的公共出口直接进入互联网,而不是通过 VPC,因此不需要 Cloud NAT。调用者 IAM 检查必须打开或禁用。网关运行自己的 OIDC,其客户端不携带 GCP 令牌,因此 Cloud Run 的调用者检查必须允许未经身份验证的请求。网关的 OIDC 登录在请求到达容器后对其进行身份验证,allowed_email_domains 限制哪些域可以登录。两个标志允许未经身份验证的请求:--no-invoker-iam-check:禁用检查,无需管理allUsers绑定,并在域受限共享下工作--allow-unauthenticated:向allUsers授予run.invoker角色;如果您的组织不允许--no-invoker-iam-check,请使用它
--ingress 的入口限制是与调用者检查分离的独立层;保持设置以将服务限制在您的公司网络。默认情况下,Cloud Run *.run.app URL 解析为公共地址,/login 私有网络检查拒绝该地址。两种拓扑为开发者提供私有可解析的主机名,Cloud Run 都不为您配置:- 内部应用负载均衡器,此页面的
gateway.yaml假设的拓扑:在服务前面配置一个内部应用负载均衡器,具有内部 DNS 名称和证书,并将listen.public_url设置为该主机名。internal入口设置已允许来自内部应用负载均衡器的流量;internal-and-cloud-load-balancing还允许外部应用负载均衡器,其公共地址/login私有网络检查拒绝,因此此页面上的任何拓扑都不需要它。 - 仅内部入口,无负载均衡器:保持部署命令不变,将
listen.public_url保留为*.run.appURL,下面参考资产中的默认值。为了让*.run.app私有解析,您的网络团队必须已经运行 Google API 的私有服务连接端点、将*.run.app解析到它的 Cloud DNS 私有区域,以及到该端点的本地路由。
<public_url>/oauth/callback。更改 public_url 后重新部署,因为网关仅从该设置构建其公共源,忽略 X-Forwarded-Host 和 X-Forwarded-Proto。仅当设置 listen.trusted_proxies 时,才会为客户端 IP 遵守 X-Forwarded-For。8
将网关 URL 推送到开发者机器
网关现在正在运行,但开发者在网关 URL 在其机器上之前无法从
/login 到达它。通过 MDM 将完整的托管设置片段部署到每个设备,具有 forceLoginMethod、forceLoginGatewayUrl 和 parentSettingsBehavior: "merge" 选择加入。登录选择器中没有网关选项供开发者手动选择。Terraform 参考
参考部署资产自动化本页的 Cloud Run 路径;配置和镜像资产适用于两条路径:setup.sh:一个幂等的gcloud配置程序,遍历完整的 Cloud Run 路径,从启用 API 到第一次部署terraform/:相同的部署作为基础设施即代码,用于绿地部署:创建 Artifact Registry 存储库的目标应用,然后构建和推送镜像,然后完整应用gateway.yaml.example和用于 distroless 运行时镜像的Dockerfile
internal,与本页的部署命令相匹配;该设置适用于服务前面有或没有内部应用负载均衡器的情况,工件也不创建负载均衡器。工件还默认调用者层为 allUsers run.invoker 授予而不是 --no-invoker-iam-check,与本页演练相反;两者都有效,选择取决于您的组织的策略约束。
资产作为工作示例提供,而不是受支持的生产工件;查看并根据您的环境调整它们。
故障排除
有关网关启动和登录错误,请参阅平台无关的故障排除表。下面的条目特定于 Google Cloud。后续步骤
- 配置参考:每个
gateway.yaml选项,包括managed.policies和telemetry - 部署和操作:IdP 设置、健康检查、JWT 密钥轮换、升级和安全模型
- Claude apps gateway 概述:快速入门和连接开发人员