You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Fargate对接GCP工作负载身份联合遇权限拒绝问题求助

AWS Fargate通过GCP工作负载身份联合认证时的权限拒绝问题

目标

  • 让绑定指定IAM角色的AWS Fargate任务,模拟Google Cloud服务账号获取OAuth 2.0访问令牌,从而调用GCP APIs(如Storage、Vertex AI等)

环境配置

AWS侧

  • 运行Python 3.13容器的Fargate任务,绑定IAM角色:arn:aws:iam::YOUR_AWS_ACCOUNT_ID:role/FargateVideoTaskRole

GCP侧

  • 项目:fargate-video-processing
  • 服务账号:fargate-video-processor@fargate-video-processing.iam.gserviceaccount.com
  • 工作负载身份池:aws-fargate-pool-01
  • WIF池提供商:aws-provider

Python认证代码片段

脚本动态生成google-auth库所需的JSON配置文件,简化版本如下:

# 简化版代码
import os

info = {
    "type": "external_account",
    "audience": f"//iam.googleapis.com/projects/-/serviceAccounts/YOUR_SA_EMAIL",
    "subject_token_type": "urn:ietf:params:aws:token-type:aws4_request",
    "token_url": "https://sts.googleapis.com/v1/token",
    "service_account_impersonation_url": f"https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/YOUR_SA_EMAIL:generateAccessToken",
    "credential_source": {
        "environment_id": "aws1",
        "region_url": f"https://sts.YOUR_AWS_REGION.amazonaws.com",
        "url": "http://169.254.170.2" + os.environ.get("AWS_CONTAINER_CREDENTIALS_RELATIVE_URI")
    }
}
# 将info写入JSON文件,并设置GOOGLE_APPLICATION_CREDENTIALS环境变量

代码在执行google.auth.load_credentials_from_file(...)时失败

错误信息

脚本抛出如下回溯:

google.auth.exceptions.RefreshError: ('Unable to acquire impersonated credentials', '{
 "error": {
 "code": 403,
 "message": "Permission 'iam.serviceAccounts.getAccessToken' denied on resource (or it may not exist).",
 "status": "PERMISSION_DENIED",
 "details": [
 {
 "@type": "type.googleapis.com/google.rpc.ErrorInfo",
 "reason": "IAM_PERMISSION_DENIED",
 "domain": "iam.googleapis.com",
 "metadata": {
 "permission": "iam.serviceAccounts.getAccessToken"
 }
 }
 ]
 }
}
')

已完成的排查与修正

  • 初始权限配置:为AWS主体授予GCP服务账号的roles/iam.workloadIdentityUser角色,问题未解决
  • 添加令牌创建权限:同时为同一主体授予roles/iam.serviceAccountTokenCreator角色,问题仍存在
  • 修正WIF提供商映射:更新attributeMapping规则,将AWS ARN正确映射到google.subject和自定义属性attribute.aws_role:
attributeMapping:
  attribute.aws_role: assertion.arn
  google.subject: assertion.arn
  • 简化IAM绑定:移除基于自定义属性的IAM绑定,替换为直接基于主体的绑定,服务账号当前IAM策略如下:
bindings:
- members:
  - principal://iam.googleapis.com/projects/YOUR_GCP_PROJECT_NUMBER/locations/global/workloadIdentityPools/aws-fargate-pool-01/subject/arn:aws:iam::YOUR_AWS_ACCOUNT_ID:role/FargateVideoTaskRole
  role: roles/iam.serviceAccountTokenCreator
- members:
  - principal://iam.googleapis.com/projects/YOUR_GCP_PROJECT_NUMBER/locations/global/workloadIdentityPools/aws-fargate-pool-01/subject/arn:aws:iam::YOUR_AWS_ACCOUNT_ID:role/FargateVideoTaskRole
  role: roles/iam.workloadIdentityUser
  • 排除策略传播延迟:配置变更后等待10分钟以上再运行容器,排除IAM策略未生效的可能性

诊断受阻情况

怀疑存在组织级IAM拒绝策略或VPC服务控制边界覆盖权限,但作为已确认的组织管理员,使用Policy Troubleshooter工具时遭遇cloudasset.assets.searchAllResources的PERMISSION_DENIED错误,无法进一步自行诊断

问题

  1. 既然直接IAM策略和WIF提供商配置看似无误,为何仍持续出现iam.serviceAccounts.getAccessToken权限拒绝错误?
  2. 是否存在其他安全机制或已知问题,导致组织管理员也无法排查权限问题的矛盾状态?

内容的提问来源于stack exchange,提问作者CentralNest Admin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:20:57