Azure AKS 与 ACR 集成中的身份验证策略问题解析
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
问题背景
在 Azure Kubernetes 服务 (AKS) 与 Azure 容器注册表 (ACR) 的集成场景中,当 ACR 的身份验证策略 AADAuthenticationAsArmPolicy
被设置为 disabled
时,AKS 集群无法正常从该注册表中拉取容器镜像。这是一个典型的身份验证机制兼容性问题,涉及 Azure 资源间的安全交互。
技术原理分析
Azure 容器注册表提供了两种主要的身份验证方式:
-
ARM 身份验证模式:这是传统的身份验证方式,使用 Azure 资源管理器 (ARM) 的令牌进行认证。在这种模式下,ACR 接受来自 ARM 的身份验证令牌。
-
ACR 专用身份验证模式:当
AADAuthenticationAsArmPolicy
被禁用时,ACR 只接受特定为容器注册表服务 (https://containerregistry.azure.net
) 颁发的令牌,不再接受 ARM 令牌。
AKS 集群默认使用 ARM 身份验证模式与 ACR 交互。当注册表管理员禁用了 ARM 身份验证策略后,这种传统的交互方式就会失败,导致集群无法拉取镜像。
问题表现
当出现此问题时,管理员会观察到以下典型症状:
- 执行
az aks check-acr
命令验证 AKS 与 ACR 的连接性时,会收到 401 未授权错误 - 错误信息中明确提示:"arm aad token disallowed: registry has AADAuthenticationAsArmPolicy disabled"
- 集群中的工作负载无法从目标 ACR 拉取镜像,导致 Pod 创建失败
解决方案
微软 Azure 团队已经意识到这个问题,并正在从两个层面进行修复:
-
AKS 服务端修复:通过修改 Kubernetes 的 Azure 云提供商组件,使其能够生成并使用 ACR 专用范围的令牌,而不再依赖 ARM 令牌。这项变更将通过标准 AKS 升级流程推送到生产环境。
-
Azure CLI 工具修复:同步更新
az aks check-acr
命令的实现,使其在验证 ACR 访问权限时也使用 ACR 专用令牌,与服务端变更保持一致。
临时解决方案
在官方修复全面推出之前,受影响的用户可以采取以下临时措施:
- 将 ACR 的
AADAuthenticationAsArmPolicy
策略重新启用 - 或者为 AKS 集群配置传统的 ACR 附加权限,绕过令牌交换机制
最佳实践建议
- 在启用 ACR 的条件访问策略前,应先验证 AKS 集群的兼容性
- 计划性的 AKS 升级可以确保及时获取此类关键修复
- 对于安全敏感的环境,建议在测试集群中先行验证变更
此问题的修复将显著提升 Azure 容器生态系统的安全性和灵活性,使企业能够更好地实施细粒度的访问控制策略。
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考