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

如何通过Golang获取Azure Key Vault的密钥、机密与证书列表

解决方案

方案1:沿用当前使用的管理平面SDK实现

你当前调用的keyvault.NewKeysClient属于Azure Go SDK管理平面的Key Vault模块,同模块下已经提供了专门用于获取机密列表的SecretsClient,使用逻辑和你现有获取密钥列表的逻辑完全一致:

  1. 确认导入的包正确,确保导入管理平面Key Vault包:
import "github.com/Azure/azure-sdk-for-go/services/keyvault/mgmt/2016-10-01/keyvault"
// 版本号可以根据你实际使用的SDK版本调整,所有≥2016-10-01的版本都包含SecretsClient,找不到的话升级对应SDK版本即可
  1. 实现获取机密列表的方法,代码逻辑和你现有KeyList方法对齐即可,示例如下:
func (rcv Resources) SecretList(cred Credentials, subscriptionID, resourceGp, vaultName string) ([]string, error) {
    var (
        res []string
        err error
    )
    logger.Info("create vault secret client for getting secret list.")
    // 初始化SecretsClient而非KeysClient
    cli := keyvault.NewSecretsClient(subscriptionID)

    if cli.Authorizer, err = azureAD.Authorizer(cred.TenantID, cred.ClientID, cred.ClientSecret); err != nil {
        logger.Error("can not get authorizer for secret client, err : ", err.Error())
        return nil, err
    }
    // 原有代码硬编码了vault名称,这里替换为传入的vaultName参数即可
    secretList, err := cli.List(context.Background(), resourceGp, vaultName, nil)
    if err != nil {
        logger.Error("can not get secret list , error : ", err.Error())
        return nil, err
    }
    for _, secret := range secretList.Values() {
        res = append(res, *secret.Name)
    }
    return res, nil
}

注意事项

  • 你使用的服务主体需要被分配对应Key Vault的Microsoft.KeyVault/vaults/secrets/read权限才能正常调用该接口
  • 如果后续需要获取机密的明文值,需要调用数据平面的Key Vault SDK接口,对应客户端为github.com/Azure/azure-sdk-for-go/services/keyvault/v7.1/keyvault包下的BaseClient,调用时传入vault的URI即可操作机密内容。

内容的提问来源于stack exchange,提问作者Mehrad Rostami

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:36:04