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

AKS Pod基于Workload Identity生成IMDS访问令牌问题及权限隔离需求

问题解决:AKS Workload Identity Pod中令牌使用与权限隔离

一、为什么直接使用azure-identity-token无法调用Azure API?

你挂载的/var/run/secrets/azure/tokens/azure-identity-token令牌受众(audience)为api://AzureADTokenExchange,这个令牌仅用于向Azure AD交换目标资源的访问令牌,不能直接用于调用Azure Management API或其他Azure服务API。

正确的令牌交换方法

在Pod内部,使用以下命令将挂载的令牌交换为目标资源(比如Azure管理API)的访问令牌:

# 读取挂载的联邦令牌
FED_TOKEN=$(cat /var/run/secrets/azure/tokens/azure-identity-token)
# 向Azure AD请求目标资源的访问令牌
ACCESS_TOKEN=$(curl -X POST "https://login.microsoftonline.com/${AZURE_TENANT_ID}/oauth2/v2.0/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "client_id=${AZURE_CLIENT_ID}" \
  -d "grant_type=client_credentials" \
  -d "client_assertion=${FED_TOKEN}" \
  -d "client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer" \
  -d "scope=https://management.azure.com/.default" | grep -Po '"access_token": *\K"[^"]*"' | sed 's/"//g')
# 使用令牌调用API
curl https://management.azure.com/subscriptions/${SUBSCRIPTION}/resourcegroups?api-version=2023-07-01 -H "Authorization: Bearer ${ACCESS_TOKEN}"

说明:

  • ${AZURE_TENANT_ID}和${AZURE_CLIENT_ID}会自动注入到Pod环境变量中,无需手动配置
  • 将scope参数替换为你需要访问的Azure服务对应范围(比如Blob Storage用https://storage.azure.com/.default)

二、如何阻止Pod使用Agentpool Managed Identity,实现权限隔离?

要彻底隔离Pod与Agentpool身份的权限,从以下两个层面入手:

1. 禁用Pod对IMDS的访问

AKS节点的IMDS服务(http://169.254.169.254)默认允许所有Pod访问,这会导致Pod获取Agentpool身份的令牌。通过Network Policy禁止普通Pod访问IMDS地址:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: block-imds-access
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 169.254.169.254/32
    ports:
    - protocol: TCP
      port: 80
    - protocol: TCP
      port: 443

应用该策略后,所有Pod将无法访问IMDS,只能通过Workload Identity挂载的令牌获取权限。

2. 最小化Agentpool身份的权限

确保Agentpool的Managed Identity仅拥有AKS集群运行所需的最小权限(如节点管理、日志收集等),不要授予额外的订阅级权限(如Contributor),从根源上避免Pod误用Agentpool身份。

3. 验证权限隔离效果

在Pod内尝试访问IMDS,若返回Connection refused或超时则说明隔离生效:

curl http://169.254.169.254/metadata/identity/oauth2/token?api-version=2023-07-01&resource=https%3A%2F%2Fmanagement.azure.com -H Metadata:true

总结

  • 不要直接使用azure-identity-token调用API,必须通过Azure AD令牌交换获取目标资源的访问令牌
  • 通过Network Policy阻止Pod访问IMDS,结合最小化Agentpool权限,实现Pod与节点身份的完全权限隔离

内容的提问来源于stack exchange,提问作者Ga-M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:25:58