Verschlüsseln / Entschlüsseln von Daten aus Golang mit Azure KeyVault

Einführung

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.

Lass es uns versuchen

Dinge notwendig

KeyVault-Verschlüsselungs- / Entschlüsselungscode

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)
}

Ausführungsbeispiel

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

Verschlüsseln / Entschlüsseln von Daten aus Golang mit Azure KeyVault
Holen Sie sich Daten von Twitter mit Tweepy
Senden Sie Daten von Raspberry Pi mit AWS IOT
Versuchen Sie, die offenen Daten von COVID-19 aus Yokohama / Tokio / Osaka zu verwenden
Visualisieren Sie Netzwerkdaten aus IPython Notebook mit Cytoscape Part 1
Daten auf jupyter verschlüsseln und speichern und bei Bedarf entschlüsseln
Ich habe versucht, Daten aus einer Datei mit Node.js zu lesen.