如何通过GCP工作负载身份联邦从AWS Fargate EKS Pod访问GCP资源?
解决EKS Fargate Pod里GCP工作负载身份联邦无法访问AWS IMDS的问题
EKS Fargate Pod确实没法访问AWS的IMDS(169.254.169.254),你得换个方式获取身份凭证,直接用Fargate注入的Pod IAM角色凭证就行,具体操作如下:
1. 修改GCP客户端凭证文件的credential_source配置
把原来依赖IMDS的配置替换成从环境变量或挂载文件读取凭证的格式,两种方式选一个就行:
方式一:从环境变量读凭证
Fargate会自动把Pod关联IAM角色的临时凭证注入到容器的三个环境变量里:AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN。修改后的配置如下:
"credential_source": { "environment_id": "aws1", "credentials": { "access_key_id_env_var": "AWS_ACCESS_KEY_ID", "secret_access_key_env_var": "AWS_SECRET_ACCESS_KEY", "session_token_env_var": "AWS_SESSION_TOKEN" }, "regional_cred_verification_url": "https://sts.{region}.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15" }
方式二:从挂载文件读凭证(适合用IRSA的场景)
如果你的EKS用了IAM Roles for Service Accounts(IRSA),Fargate会把凭证挂载到/var/run/secrets/eks.amazonaws.com/serviceaccount/路径下,对应的文件分别是aws_access_key_id、aws_secret_access_key、aws_session_token。配置改成这样:
"credential_source": { "environment_id": "aws1", "credentials": { "access_key_id_file": "/var/run/secrets/eks.amazonaws.com/serviceaccount/aws_access_key_id", "secret_access_key_file": "/var/run/secrets/eks.amazonaws.com/serviceaccount/aws_secret_access_key", "session_token_file": "/var/run/secrets/eks.amazonaws.com/serviceaccount/aws_session_token" }, "regional_cred_verification_url": "https://sts.{region}.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15" }
2. 确认Pod的IAM角色配置正确
- 不管用IRSA还是直接给Fargate Pod分配IAM角色,都得确保这个IAM角色被GCP工作负载身份池信任(也就是在GCP的身份池里添加了这个角色ARN作为身份提供者)。
- 同时,这个IAM角色得有
sts:GetCallerIdentity权限,因为GCP要通过这个API验证你的身份合法性。
3. 测试配置是否生效
在Pod里跑个GCP CLI命令验证,比如:
# 用修改后的凭证登录 gcloud auth login --cred-file=/path/to/your-modified-cred-file.json # 设置GCP项目 gcloud config set project your-gcp-project-id # 测试访问GCP资源,比如列存储桶 gcloud storage ls gs://your-test-bucket
内容的提问来源于stack exchange,提问作者Nimish Agrawal
相关产品推荐
相关产品推荐

