AKS中通过SecretProviderClass从KeyVault获取并挂载带私钥的PFX证书的配置方法
AKS中通过SecretProviderClass从KeyVault获取并挂载带私钥的PFX证书的配置方法
我明白你现在遇到的问题了——之前用objectType: cert配置SecretProviderClass时,只能拿到不含私钥的证书部分,没法获取到完整的带私钥PFX对吧?这是因为当指定objectType: cert时,Azure Key Vault Secret Provider Class默认只会导出证书的公钥内容,而包含私钥的完整PFX其实在Key Vault里是以同名Secret的形式存在的(当你导入PFX到Key Vault证书库时,系统会自动生成这个对应Secret)。
下面给你调整后的正确配置,帮你获取到带私钥的完整PFX:
调整后的SecretProviderClass配置
spec: provider: azure parameters: usePodIdentity: "false" useVMManagedIdentity: "true" userAssignedIdentityID: {{ .Values.managedIdentityClientId }} keyvaultName: {{ .Values.keyVaultName }} objects: | array: - | objectName: my-cert-name objectType: secret # 关键修改:从cert改成secret tenantId: {{ .Values.tenantId }} secretObjects: - secretName: {{ template "api.fullname" . }}-certs data: - key: my-cert-name.pfx objectName: my-cert-name type: Opaque
关键修改点说明
objectType从cert改为secret:这是核心调整,因为Key Vault中导入的PFX证书对应的完整带私钥内容,是存储在同名的Secret资源里的,用secret类型才能拉取到完整的PFX。- 权限检查:别忘了确保你配置的托管身份(userAssignedIdentityID对应的身份),在Key Vault的访问策略中拥有
Secrets > Get权限(之前如果只给了Certificates > Get权限,需要补充这个Secret权限)。 - 确认Key Vault中的Secret存在:当你把PFX导入Key Vault证书库时,系统会自动创建一个和证书同名的Secret,你可以在Key Vault的"机密"页面里找到它,确认它的存在。
调整完配置后,重新部署SecretProviderClass,再重启对应的Pod,就能在Pod里挂载到包含私钥的完整PFX证书了,这样你的应用就能正常使用带私钥的证书完成加密、签名等操作啦。
备注:内容来源于stack exchange,提问作者Leszek
相关产品推荐
相关产品推荐

