使用CSI驱动从Vault获取密钥返回permission denied问题求助
Kubernetes Vault CSI 驱动权限拒绝问题排查方案
根因定位与解决方法
- 配置类错误(占90%以上场景,优先排查)
你报错日志中URL出现%!!(MISSING)类乱码,说明存在路径转义错误,首先检查你未提供的SecretProviderClass(名为vault-secret)配置的正确性:- 确认
role字段和你测试用的teste-role完全一致,大小写、拼写无错误 - 确认
vaultAddress配置无多余转义符、特殊字符,和你curl测试用的Vault地址一致 - 确认KVv2引擎的密钥路径填写为
secret/data/k8s-secret,不要漏写/data前缀,也不要多写引号、转义符 - 若你未开启Vault命名空间,不要在配置中加
namespace字段,避免路径拼接错误
- 确认
- Vault 角色绑定不匹配
你本地curl测试时使用的是自行获取的JWT,而CSI驱动实际调用时使用的是测试Pod对应的app-saServiceAccount身份,需要确认Vault端teste-role的绑定规则正确:
执行vault read auth/kubernetes/role/teste-role检查以下参数:bound_service_account_names必须包含app-sabound_service_account_namespaces必须包含Pod所在的app命名空间policies必须包含有密钥读取权限的策略
- Vault 策略权限配置错误
确认teste-role绑定的策略包含KVv2引擎对应的读权限,正确配置示例:path "secret/data/k8s-secret" { capabilities = ["read"] } - CSI 驱动功能未开启
确认Secret Store CSI驱动开启了ServiceAccount token传递功能,可通过以下命令更新配置:
如需进一步定位,可拉取Vault CSI Provider的日志查看详细报错:helm upgrade csi secrets-store-csi-driver/secrets-store-csi-driver -n csi \ --set syncSecret.enabled=true \ --set tokenRequests[0].audience=apikubectl logs -n csi <vault-csi-provider对应的Pod名称>
内容的提问来源于stack exchange,提问作者Milena Uehara
相关产品推荐
相关产品推荐

