使用托管身份持久挂载AKS File Share 密钥轮换后出现权限问题
问题根因
- 当前使用的Storage Class默认仅在PVC首次创建时拉取一次存储账户密钥做本地缓存,不会自动同步更新,存储账户密钥轮换后旧密钥已失效,就会返回
mount error(13): Permission denied错误 - 若UAMI权限在密钥轮换后被意外修改、回收,也会触发相同报错
修复步骤
1. 验证UAMI权限有效性
- 进入对应存储账户的「访问控制(IAM)」页面,确认集群绑定的UAMI在存储账户范围同时持有
Reader和Storage Account Key Operator Service Role两个角色,无拒绝分配规则覆盖、无权限继承异常 - 若AKS使用kubenet网络模式,额外确认节点池kubelet身份也持有上述两个角色权限
2. 调整Storage Class配置开启密钥自动更新
如果你当前使用的是Azure File CSI驱动(AKS 1.21及以上版本默认使用),在Storage Class配置中添加storageAccountKeyRotateInterval参数开启自动拉取新密钥,参考配置如下:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azurefile-csi-custom provisioner: file.csi.azure.com parameters: skuName: Standard_LRS # 替换为实际存储账户SKU storageAccount: 你的存储账户名称 # 固定使用指定存储账户时填写,不填则由驱动自动创建匹配SKU的存储账户 storageAccountKeyRotateInterval: "12h" # 每12小时自动拉取一次最新存储账户密钥,可根据业务需求调整间隔 reclaimPolicy: Delete volumeBindingMode: Immediate mountOptions: - file_mode=0777 - dir_mode=0777 - vers=3.0 - actimeo=30 - mfsymlinks
3. 重建资源验证生效
- 删除原有故障的PVC、旧版本Storage Class
- 应用上述修改后的新Storage Class配置
- 重新创建PVC、业务部署
- 验证Pod可以正常启动,Azure File Share挂载、读写功能正常
注意事项
- 若当前使用的是旧的in-tree类型
kubernetes.io/azure-file存储类,建议直接迁移到CSI驱动版本,in-tree驱动已停止维护,不支持密钥自动轮换功能 - 若不想开启自动密钥轮换,可在每次存储账户密钥轮换后手动删除PVC关联的存储密钥Secret,集群会自动触发UAMI重新拉取最新密钥完成更新
内容的提问来源于stack exchange,提问作者Kalirajan
相关产品推荐
相关产品推荐

