如何通过Golang获取Azure Key Vault的密钥、机密与证书列表
解决方案
方案1:沿用当前使用的管理平面SDK实现
你当前调用的keyvault.NewKeysClient属于Azure Go SDK管理平面的Key Vault模块,同模块下已经提供了专门用于获取机密列表的SecretsClient,使用逻辑和你现有获取密钥列表的逻辑完全一致:
- 确认导入的包正确,确保导入管理平面Key Vault包:
import "github.com/Azure/azure-sdk-for-go/services/keyvault/mgmt/2016-10-01/keyvault" // 版本号可以根据你实际使用的SDK版本调整,所有≥2016-10-01的版本都包含SecretsClient,找不到的话升级对应SDK版本即可
- 实现获取机密列表的方法,代码逻辑和你现有
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
相关产品推荐
相关产品推荐

