I am unable to import keys into Azure Key Vault using the Azure SDK for Go (https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/services/keyvault/v7.0/keyvault#BaseClient.ImportKey). I can't seem to get the format of the JSON Web Key right. If I retrieve a key from Key Vault using https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/services/keyvault/v7.0/keyvault#BaseClient.GetKey then try to use that same key which I got from the SDK as they key I'm importing, I get the following error:
Failure responding to request: StatusCode=400 -- Original Error: autorest/azure: Service returned an error. Status=400 Code="BadParameter" Message="RSA key is not valid - cannot instantiate crypto service"
Here is a simplified version of the code I have:
package main
import (
"context"
"fmt"
"github.com/Azure/azure-sdk-for-go/services/keyvault/2016-10-01/keyvault"
azauth "github.com/Azure/go-autorest/autorest/azure/auth"
)
func main() {
vaultUrl := "https://vaultname.vault.azure.net/"
getKeyName := "keyname1"
importKeyName := "keyname2"
keyVersion := "key1version1"
client := keyvault.New()
settings, err := azauth.GetSettingsFromFile()
if err != nil {
panic(err)
}
auth, err := settings.ClientCredentialsAuthorizerWithResource("https://vault.azure.net")
if err != nil {
panic(err)
}
client.Authorizer = auth
ctx := context.TODO()
oldKey, err := client.GetKey(ctx, vaultUrl, getKeyName, keyVersion)
importParams := keyvault.KeyImportParameters{
Key: oldKey.Key,
}
result, err := client.ImportKey(ctx, vaultUrl, importKeyName, importParams)
if err != nil {
panic(err)
}
fmt.Printf("%+v \n", result)
}
