Microsoft Azure Key Vault support
This commit is contained in:
51
azure.go
Normal file
51
azure.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package secret
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
|
||||
"github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets"
|
||||
)
|
||||
|
||||
type azureKeyVaultProvider struct {
|
||||
options *providerOptions
|
||||
vaultURL string
|
||||
client *azsecrets.Client
|
||||
}
|
||||
|
||||
func AzureKeyVault(tenant, name string, opts ...Option) (Provider, error) {
|
||||
var options = newProviderOptions(opts...)
|
||||
|
||||
p := &azureKeyVaultProvider{
|
||||
options: options,
|
||||
vaultURL: fmt.Sprintf("https://%s.vault.azure.net", name),
|
||||
}
|
||||
|
||||
creds, err := azidentity.NewDefaultAzureCredential(nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if p.client, err = azsecrets.NewClient(p.vaultURL, creds, nil); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return p, nil
|
||||
}
|
||||
|
||||
func (p *azureKeyVaultProvider) GetSecret(key string) (value []byte, err error) {
|
||||
ctx := context.Background()
|
||||
if p.options.timeout > 0 {
|
||||
var cancel func()
|
||||
ctx, cancel = context.WithTimeout(ctx, p.options.timeout)
|
||||
defer cancel()
|
||||
}
|
||||
|
||||
var secret azsecrets.GetSecretResponse
|
||||
if secret, err = p.client.GetSecret(ctx, key, "", nil); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return []byte(*secret.Value), nil
|
||||
}
|
Reference in New Issue
Block a user