如何通过 golang 从 Azure 保险库中找到机密列表和证书列表?
how can find list of secrets and certificate list from Azure vault via golang?
我正在尝试使用 Golang 集成 azure vault。我使用以下代码获取密钥列表:
func (rcv Resources) KeyList(cred Credentials, subscriptionID, resourceGp, vaultName string) ([]string, error) {
var (
res []string
err error
)
logger.Info("create client for connecting to the azure as vault client for getting key list.")
cli := keyvault.NewKeysClient(subscriptionID)
if cli.Authorizer, err = azureAD.Authorizer(cred.TenantID, cred.ClientID, cred.ClientSecret); err != nil {
logger.Error("can not get authorizer for resources, err : ", err.Error())
return nil, err
}
keyList, err := cli.List(context.Background(), resourceGp, "key-vault-zap-auth-scan2")
if err != nil {
logger.Error("can not get resources list , error : ", err.Error())
return nil, err
}
for _, key := range keyList.Values() {
res = append(res, *key.Name)
}
return res, nil
}
如您所知,我们有不同的对象要存储在 azure key-vault 中,例如:密钥、机密和证书
我无法使用 SDK 获取机密列表,因为它没有机密客户端。
我该如何解决这个问题?
对于秘密,有一个名为 azure-keyvault-secrets
的单独包。
要列出机密,您要调用的方法是 ListSecrets
。这是取自 here
:
的相同示例
cred, err := azidentity.NewDefaultAzureCredential(nil)
client, err := azsecrets.NewClient("https://my-key-vault.vault.azure.net/", cred, nil)
pager := client.ListSecrets(nil)
for pager.NextPage(context.Background()) {
resp := pager.PageResponse()
for _, secret := range resp.Secrets {
fmt.Printf("Secret ID: %s", *secret.ID)
}
}
Gaurav 提供的答案工作得很好..但前提是你使用的包达到版本 v0.5.0
。
https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets?tab=versions
从版本 v0.6.0
开始,方法 pager.NextPage()
returns 2 个值 (ListSecretsPageResponse, error)
因此不能在 for
循环中使用——你会命中类似于 The non-bool value 'pager.NextPage(context.TODO())' (type (ListSecretsPageResponse, error)) used as a condition
.
的错误
相反,您应该使用方法 pager.More()
循环浏览秘密页面。
大致如下:
pager := client.ListSecrets(nil)
for pager.More() {
page, err := pager.NextPage(context.TODO())
if err != nil {
panic(err)
}
for _, v := range page.Secrets {
fmt.Printf("Secret Name: %s\n", *v.ID)
}
}
希望这对您有所帮助。干杯
我正在尝试使用 Golang 集成 azure vault。我使用以下代码获取密钥列表:
func (rcv Resources) KeyList(cred Credentials, subscriptionID, resourceGp, vaultName string) ([]string, error) {
var (
res []string
err error
)
logger.Info("create client for connecting to the azure as vault client for getting key list.")
cli := keyvault.NewKeysClient(subscriptionID)
if cli.Authorizer, err = azureAD.Authorizer(cred.TenantID, cred.ClientID, cred.ClientSecret); err != nil {
logger.Error("can not get authorizer for resources, err : ", err.Error())
return nil, err
}
keyList, err := cli.List(context.Background(), resourceGp, "key-vault-zap-auth-scan2")
if err != nil {
logger.Error("can not get resources list , error : ", err.Error())
return nil, err
}
for _, key := range keyList.Values() {
res = append(res, *key.Name)
}
return res, nil
}
如您所知,我们有不同的对象要存储在 azure key-vault 中,例如:密钥、机密和证书
我无法使用 SDK 获取机密列表,因为它没有机密客户端。
我该如何解决这个问题?
对于秘密,有一个名为 azure-keyvault-secrets
的单独包。
要列出机密,您要调用的方法是 ListSecrets
。这是取自 here
:
cred, err := azidentity.NewDefaultAzureCredential(nil)
client, err := azsecrets.NewClient("https://my-key-vault.vault.azure.net/", cred, nil)
pager := client.ListSecrets(nil)
for pager.NextPage(context.Background()) {
resp := pager.PageResponse()
for _, secret := range resp.Secrets {
fmt.Printf("Secret ID: %s", *secret.ID)
}
}
Gaurav 提供的答案工作得很好..但前提是你使用的包达到版本 v0.5.0
。
https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets?tab=versions
从版本 v0.6.0
开始,方法 pager.NextPage()
returns 2 个值 (ListSecretsPageResponse, error)
因此不能在 for
循环中使用——你会命中类似于 The non-bool value 'pager.NextPage(context.TODO())' (type (ListSecretsPageResponse, error)) used as a condition
.
相反,您应该使用方法 pager.More()
循环浏览秘密页面。
大致如下:
pager := client.ListSecrets(nil)
for pager.More() {
page, err := pager.NextPage(context.TODO())
if err != nil {
panic(err)
}
for _, v := range page.Secrets {
fmt.Printf("Secret Name: %s\n", *v.ID)
}
}
希望这对您有所帮助。干杯