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错误,无法进一步自行诊断
问题
- 既然直接IAM策略和WIF提供商配置看似无误,为何仍持续出现
iam.serviceAccounts.getAccessToken权限拒绝错误? - 是否存在其他安全机制或已知问题,导致组织管理员也无法排查权限问题的矛盾状态?
内容的提问来源于stack exchange,提问作者CentralNest Admin
相关产品推荐
相关产品推荐

