最新n1n v2.0.1 正式上线!企业级大模型接口聚合平台 (LLM API Gateway),为您接入 500+ AI Models,价格低至 1 折, 立即尝试

使用工作负载身份联合从AWS调用Vertex AI

作者
  • avatar
    姓名
    Nino
    职业
    Senior Tech Editor

工作负载身份联合是谷歌云IAM的一项核心功能,它允许在谷歌云外部运行的工作负载将其自身的身份(例如AWS IAM角色)交换为短期的谷歌凭据,从而彻底告别传统的服务账号密钥文件。当通过像 n1n.ai 这样的企业级聚合网关路由AI请求时,消除长期静态密钥能够显著提升整体安全水位。

传统的服务账号密钥文件是一个长期存在的敏感机密:只要掌握这个JSON文件,任何人都可以获得该账号的全部权限,直到有人手动轮换或删除它。而工作负载身份联合则直接去掉了这个文件。谷歌云选择信任外部身份提供商,外部工作负载向谷歌安全令牌服务出示其身份证明,随后系统会返回一个短期有效的访问令牌。

对于AWS而言,身份证明是一个经过签名的 GetCallerIdentity 请求。工作负载使用其AWS凭据对请求进行签名,但并不将其发送给AWS;谷歌负责验证签名并从中读取调用者的ARN。诸如 n1n.ai 这样的平台正是依赖这种现代架构,在不牺牲合规性的前提下简化了多云集成流程。

认证方式对比分析

特性服务账号密钥工作负载身份联合
AWS端存储的机密保存在机密存储或Pod中的JSON密钥文件无
凭据生命周期直到被轮换或删除短期令牌,自动刷新
轮换机制手动,按密钥进行不需要
适用对象任何持有该文件的人仅限拥有受信任AWS角色的工作负载
审计身份服务账号AWS角色,或记录了角色作为委托人的服务账号

对于一个通过 n1n.ai 管理多提供商大模型调用的网关而言,移除哪怕一个长期机密也至关重要。凭据蔓延在AI技术栈中依然是一个常见风险,而妥善管理此类机器身份能够有效保护企业的基础设施。

谷歌云侧配置步骤

请在将要为Vertex AI付费的谷歌云项目中运行以下命令。首先,启用必需的API。sts.googleapis.com 负责执行令牌交换,而 iamcredentials.googleapis.com 仅在需要模拟服务账号时使用:

gcloud services enable aiplatform.googleapis.com sts.googleapis.com iamcredentials.googleapis.com \
  --project=PROJECT_ID

接下来,创建一个工作负载身份池和一个信任您AWS账号的AWS提供商:

gcloud iam workload-identity-pools create POOL_ID \
  --project=PROJECT_ID \
  --location=global \
  --display-name="Gateway on AWS"

gcloud iam workload-identity-pools providers create-aws PROVIDER_ID \
  --project=PROJECT_ID \
  --location=global \
  --workload-identity-pool=POOL_ID \
  --account-id=AWS_ACCOUNT_ID \
  --attribute-mapping="google.subject=assertion.arn,attribute.aws_role=assertion.arn.extract('assumed-role/{role}/')" \
  --attribute-condition="attribute.aws_role == 'BIFROST_ROLE_NAME'"

打印提供商的完整名称,该名称将用作配置中的audience(受众):

gcloud iam workload-identity-pools providers describe PROVIDER_ID \
  --project=PROJECT_ID --location=global --workload-identity-pool=POOL_ID \
  --format="value(name)"

AWS集成与网关配置

此流程中的IAM角色不需要任何特殊的AWS权限,因为 sts:GetCallerIdentity 始终是被允许的。在EKS上,可以使用IRSA或EKS Pod Identity。通过IRSA,为Kubernetes服务账号添加注解:

kubectl annotate serviceaccount KSA_NAME \
  --namespace NAMESPACE \
  eks.amazonaws.com/role-arn=arn:aws:iam::AWS_ACCOUNT_ID:role/BIFROST_ROLE_NAME

在 n1n.ai 上配置网关时,请在Vertex AI配置中使用 aws_workload_identity 块来无缝处理令牌交换:

{
  "providers": {
    "vertex": {
      "keys": [
        {
          "name": "vertex-eks-key",
          "value": "",
          "models": ["*"],
          "weight": 1.0,
          "vertex_key_config": {
            "project_id": "env.VERTEX_PROJECT_ID",
            "region": "us-central1",
            "aws_workload_identity": {
              "audience": "//iam.googleapis.com/projects/123456789012/locations/global/workloadIdentityPools/eks-pool/providers/aws"
            }
          }
        }
      ]
    }
  }
}

故障排除与验证

若要从Pod内部确认AWS侧工作正常,请执行:

kubectl exec -n NAMESPACE POD_NAME -- aws sts get-caller-identity

如果返回的ARN显示的是IAM用户或节点角色,而不是您期望的角色,请在调用模型端点之前修复该配置。配合高性能聚合器使用时,延迟可以轻松控制在 < 50ms 以内。

Get a free API key at n1n.ai