如何通过AWS命令获取EKS Pod角色而非Worker Node角色
解决EKS Pod获取专属IAM角色而非Worker Node角色的问题
要在EKS Pod中获取专属IAM角色(而非Worker Node角色)并用于Google外部账户凭证配置,需要通过**IRSA(IAM Roles for Service Accounts)**实现,以下是具体步骤:
1. 确认Pod已配置IRSA
EKS中Pod要使用专属IAM角色,必须通过IRSA绑定ServiceAccount和IAM角色:
- 查看Pod使用的ServiceAccount:
kubectl describe pod <你的Pod名称> | grep ServiceAccount - 检查该ServiceAccount是否关联了IAM角色:
若输出中包含kubectl describe sa <ServiceAccount名称>eks.amazonaws.com/role-arn: arn:aws:iam::<账号ID>:role/<Pod角色名称>,说明已配置IRSA;若未配置,需先创建信任策略允许EKS OIDC提供商扮演目标IAM角色,再给ServiceAccount添加该注释。
2. 获取Pod专属IAM角色信息
IRSA会自动在Pod内注入环境变量和token文件:
- 获取Pod角色ARN:直接读取环境变量
echo $AWS_ROLE_ARN - Pod的Web Identity Token路径:默认挂载在
/var/run/secrets/eks.amazonaws.com/serviceaccount/token,对应环境变量$AWS_WEB_IDENTITY_TOKEN_FILE
3. 调整Google外部账户凭证配置
你当前的配置指向EC2元数据服务,会拿到Worker Node角色,需修改为适配IRSA的配置:
{ "type": "external_account", "audience": "~~~~~~~~", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "credential_source": { "file": "/var/run/secrets/eks.amazonaws.com/serviceaccount/token", "environment_id": "aws1", "region_url": "http://169.254.169.254/latest/meta-data/placement/availability-zone", "regional_cred_verification_url": "https://sts.{region}.amazonaws.com/?Action=GetCallerIdentity&Version=2011-06-15" }, "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/!@#$!@#$!@#$.iam.gserviceaccount.com:generateAccessToken" }
关键修改:
- 移除原
url字段,添加file字段指向IRSA的token文件路径 - 将
subject_token_type设置为urn:ietf:params:oauth:token-type:jwt(IRSA token为JWT格式)
4. 验证配置
设置GOOGLE_APPLICATION_CREDENTIALS环境变量指向修改后的配置文件,运行Google SDK或相关代码,验证是否能正确获取Google访问令牌。
内容的提问来源于stack exchange,提问作者jelly
相关产品推荐
相关产品推荐

