Früher habe ich Azure KeyValut von golang verwendet, um Daten zu verschlüsseln, aber ich hatte nicht die Ressourcen, deshalb habe ich es kurz zusammengefasst.
Der erste ist der Code für die Azure-Authentifizierung. Die folgenden Umgebungsvariablen sind für die Authentifizierung mit NewAuthorizerFromEnvironment () erforderlich.
Umgebungsvariable | Erläuterung |
---|---|
AZURE_TENANT_ID | Azure-Mandanten-ID |
AZURE_CLIENT_ID | Azure-Client-ID |
AZURE_CERTIFICATE_PATH | Zertifikatpfad zur Authentifizierung |
AZURE_CERTIFICATE_PASSWORD | Entschlüsselungskennwort für Authentifizierungszertifikat |
azure.go (Azure-Authentifizierungscode)
package auth
import (
"log"
ka "github.com/Azure/azure-sdk-for-go/services/keyvault/auth"
"github.com/Azure/go-autorest/autorest"
)
var (
AzureAuthorizer autorest.Authorizer
)
func init() {
var err error
AzureAuthorizer, err = ka.NewAuthorizerFromEnvironment()
if err != nil {
log.Fatal(err)
}
}
Als nächstes folgt die Implementierung der Verschlüsselungs- / Entschlüsselungsverarbeitung. Sie müssen lediglich die von Azure bereitgestellte Methode ausführen. Die folgenden Umgebungsvariablen sind erforderlich.
Umgebungsvariable | Erläuterung |
---|---|
AZURE_VAULT_BASE_URL | Azure KeyVault-Basis-URL(xxx.vault.azure.net) |
AZURE_VAULT_GENERAL_KEY_NAME | Standardschlüsselname für nicht angegebenen Schlüsselnamen |
key.go Verschlüsselungs- / Entschlüsselungsverarbeitung
package vault
import (
"context"
"log"
"os"
kv "github.com/Azure/azure-sdk-for-go/services/keyvault/v7.0/keyvault"
"./auth"
)
var (
VaultBaseURL string
GeneralKeyName string
)
func init() {
VaultBaseURL = os.Getenv("AZURE_VAULT_BASE_URL")
if len(VaultBaseURL) == 0 {
log.Fatal("Please set environment variable \"AZURE_VAULT_BASE_URL\"")
}
GeneralKeyName = os.Getenv("AZURE_VAULT_GENERAL_KEY_NAME")
if len(GeneralKeyName) == 0 {
log.Fatal("Please set environment variable \"AZURE_VAULT_GENERAL_KEY_NAME\"")
}
}
// keyVersion = "" -> use current key version
func Encrypt(keyName string, keyVersion string, plain *string) (kv.KeyOperationResult, error) {
params := kv.KeyOperationsParameters{
Algorithm: kv.RSAOAEP256,
Value: plain,
}
c := kv.New()
c.Authorizer = auth.AzureAuthorizer
return c.Encrypt(context.Background(), VaultBaseURL, keyName, keyVersion, params)
}
// keyVersion = "" -> use current key version
func GeneralEncrypt(plain *string) (kv.KeyOperationResult, error) {
return Encrypt(GeneralKeyName, "", plain)
}
// keyVersion = "" -> use current key version
func Decrypt(keyName string, keyVersion string, encrypted *string) (kv.KeyOperationResult, error) {
params := kv.KeyOperationsParameters{
Algorithm: kv.RSAOAEP256,
Value: encrypted,
}
c := kv.New()
c.Authorizer = auth.AzureAuthorizer
return c.Decrypt(context.Background(), VaultBaseURL, keyName, keyVersion, params)
}
// keyVersion = "" -> use current key version
func GeneralDecrypt(keyVersion string, encrypted *string) (kv.KeyOperationResult, error) {
return Decrypt(GeneralKeyName, keyVersion, encrypted)
}
main.go
plain := hex.EncodeToString([]byte("plain text"))
enc, _ := vault.GeneralEncrypt(&plain)
encrypted := *enc.Result
keyName := vault.GeneralKeyName
keyVersion := path.Base(*enc.Kid)
dec, _ := vault.Decrypt(keyName, keyVersion, &encrypted)
str, _ := hex.DecodeString(*dec.Result)
Recommended Posts