Udostępnij za pośrednictwem


Szybki start: biblioteka klienta sekretów usługi Azure Key Vault w języku Python

Rozpocznij pracę z biblioteką klienta do obsługi tajnych zasobów usługi Azure Key Vault w języku Python. Wykonaj następujące kroki, aby zainstalować pakiet i wypróbować przykładowy kod dla podstawowych zadań. Korzystając z usługi Key Vault do przechowywania wpisów tajnych, unikasz przechowywania wpisów tajnych w kodzie, co zwiększa bezpieczeństwo aplikacji.

Dokumentacja referencyjna API | Kod źródłowy biblioteki | Pakiet (Python Package Index)

Wymagania wstępne

W tym przewodniku Szybki start założono, że używasz interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell w oknie terminalu systemu Linux.

Konfigurowanie środowiska lokalnego

Ten szybki start używa biblioteki Azure Identity z Azure CLI lub Azure PowerShell do uwierzytelniania użytkownika w usługach Azure. Deweloperzy mogą również używać programu Visual Studio lub Visual Studio Code do uwierzytelniania wywołań, aby uzyskać więcej informacji, zobacz Uwierzytelnianie klienta za pomocą biblioteki Azure Identity.

Logowanie się do platformy Azure

  1. Uruchom az login.

    az login
    

    Jeśli interfejs wiersza polecenia może otworzyć domyślną przeglądarkę, zrobi to i załaduje stronę logowania platformy Azure.

    W przeciwnym razie otwórz stronę przeglądarki pod https://aka.ms/devicelogin adresem i wprowadź kod autoryzacji wyświetlany w terminalu.

  2. Zaloguj się w przeglądarce przy użyciu danych konta.

Instalowanie pakietów

  1. W terminalu lub wierszu polecenia utwórz odpowiedni folder projektu, a następnie utwórz i aktywuj środowisko wirtualne Pythona zgodnie z opisem w części Używaj środowisk wirtualnych Pythona.

  2. Zainstaluj bibliotekę tożsamości Microsoft Entra:

    pip install azure-identity
    
  3. Zainstaluj bibliotekę tajemnic usługi Key Vault:

    pip install azure-keyvault-secrets
    

Utwórz grupę zasobów i magazyn kluczy

  1. Użyj polecenia az group create, aby utworzyć grupę zasobów.

    az group create --name myResourceGroup --location eastus
    

    Jeśli wolisz, możesz zmienić "eastus" na lokalizację bliżej siebie.

  2. Użyj az keyvault create polecenia, aby utworzyć magazyn kluczy:

    az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
    

    Zastąp <your-unique-keyvault-name> nazwą unikatową na całej platformie Azure. Zazwyczaj używasz swojej osobistej lub firmowej nazwy wraz z innymi numerami i identyfikatorami.

Ustawianie zmiennej środowiskowej KEY_VAULT_NAME

Nasz skrypt użyje wartości przypisanej do zmiennej środowiskowej KEY_VAULT_NAME jako nazwy sejfu na klucze. W związku z tym należy ustawić tę wartość przy użyciu następującego polecenia:

export KEY_VAULT_NAME=<your-unique-keyvault-name>

Udzielanie dostępu do magazynu kluczy

Aby uzyskać uprawnienia do magazynu kluczy za pomocą kontroli dostępu opartej na rolach (RBAC), przypisz rolę do nazwy głównej użytkownika (Nazwa główna użytkownika) używając polecenia az role assignment create w Azure CLI.

az role assignment create --role "Key Vault Secrets Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"

Zastąp <upn>, <subscription-id>, <resource-group-name> i <your-unique-keyvault-name> swoimi rzeczywistymi wartościami. Nazwa UPN będzie zwykle mieć format adresu e-mail (np. username@domain.com).

Tworzenie przykładowego kodu

Klient biblioteki tajemnic Azure Key Vault dla języka Python umożliwia zarządzanie tajemnicami. Poniższy przykładowy kod przedstawia sposób tworzenia klienta, ustawiania wpisu tajnego, pobierania wpisu tajnego i usuwania wpisu tajnego.

Utwórz plik o nazwie *kv_secrets.py* zawierający ten kod.

import os
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential

keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = f"https://{keyVaultName}.vault.azure.net"

credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)

secretName = input("Input a name for your secret > ")
secretValue = input("Input a value for your secret > ")

print(f"Creating a secret in {keyVaultName} called '{secretName}' with the value '{secretValue}' ...")

client.set_secret(secretName, secretValue)

print(" done.")

print(f"Retrieving your secret from {keyVaultName}.")

retrieved_secret = client.get_secret(secretName)

print(f"Your secret is '{retrieved_secret.value}'.")
print(f"Deleting your secret from {keyVaultName} ...")

poller = client.begin_delete_secret(secretName)
deleted_secret = poller.result()

print(" done.")

Uruchamianie kodu

Upewnij się, że kod w poprzedniej sekcji znajduje się w pliku o nazwie kv_secrets.py. Następnie uruchom kod za pomocą następującego polecenia:

python kv_secrets.py
  • Jeśli wystąpią błędy uprawnień, upewnij się, że uruchomiono az keyvault set-policy lub Set-AzKeyVaultAccessPolicy polecenie.
  • Ponowne uruchomienie tego samego kodu z tą samą nazwą tajemnicy może spowodować wyświetlenie błędu „(Konflikt) Nazwa tajemnicy jest obecnie w stanie usuniętym, ale możliwym do odzyskania.” Użyj innej nazwy tajemnicy.

Szczegóły kodu

Uwierzytelnianie i tworzenie klienta

Żądania aplikacji do większości usług platformy Azure muszą być autoryzowane. Użycie klasy DefaultAzureCredential udostępnionej przez bibliotekę klienta Azure Identity jest zalecanym podejściem do implementacji połączeń bez hasła z usługami Azure w Twoim kodzie. obsługuje wiele metod uwierzytelniania i określa, która metoda powinna być używana w czasie wykonywania. Takie podejście umożliwia aplikacji używanie różnych metod uwierzytelniania w różnych środowiskach (lokalnych i produkcyjnych) bez implementowania kodu specyficznego dla środowiska.

W tym krótkim przewodniku, DefaultAzureCredential uwierzytelnia się w magazynie kluczy przy użyciu poświadczeń lokalnego użytkownika dewelopera zalogowanego do interfejsu wiersza polecenia Azure. Po wdrożeniu aplikacji na platformie Azure ten sam DefaultAzureCredential kod może automatycznie wykrywać i używać tożsamości zarządzanej przypisanej do usługi App Service, maszyny wirtualnej lub innych usług. Aby uzyskać więcej informacji, zobacz Omówienie Tożsamości Zarządzanej.

W przykładowym kodzie nazwa magazynu kluczy jest rozwiązana, wykorzystując wartość KVUri zmiennej w formacie "https://<your-key-vault-name>.vault.azure.net".

credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)

Zapisz tajemnicę

Po uzyskaniu obiektu klienta dla magazynu kluczy można przechowywać sekret za pomocą metody set_secret.

client.set_secret(secretName, secretValue)

Wywołanie set_secret powoduje wywołanie interfejsu API REST platformy Azure dla magazynu kluczy.

Gdy platforma Azure obsługuje żądanie, uwierzytelnia tożsamość obiektu wywołującego (jednostkę usługi) przy użyciu obiektu poświadczeń podanego klientowi.

Odbierz tajemnicę

Aby odczytać tajny klucz z usługi Key Vault, użyj metody get_secret :

retrieved_secret = client.get_secret(secretName)

Tajna wartość jest zawarta w retrieved_secret.value.

Możesz również pobrać tajny klucz za pomocą polecenia Azure CLI az keyvault secret show lub cmdlet Azure PowerShell Get-AzKeyVaultSecret.

Usuń sekret

Aby usunąć tajemnicę, użyj metody begin_delete_secret:

poller = client.begin_delete_secret(secretName)
deleted_secret = poller.result()

Metoda begin_delete_secret jest asynchroniczna i zwraca obiekt poller. Wywołanie metody pollera result czeka na jej zakończenie.

Możesz sprawdzić, czy sekret został usunięty za pomocą polecenia Azure CLI az keyvault secret show lub polecenia cmdlet programu Azure PowerShell Get-AzKeyVaultSecret.

Po usunięciu wpis tajny pozostaje w stanie usuniętym, ale można go odzyskać przez pewien czas. Jeśli ponownie uruchomisz kod, użyj innej tajnej nazwy.

Czyszczenie zasobów

Jeśli chcesz również eksperymentować z certyfikatami i kluczami, możesz ponownie użyć usługi Key Vault utworzonej w tym artykule.

W przeciwnym razie po zakończeniu pracy z zasobami utworzonymi w tym artykule użyj następującego polecenia, aby usunąć grupę zasobów i wszystkie zawarte w niej zasoby:

az group delete --resource-group myResourceGroup

Następne kroki