Freigeben über


Apps, API-Schlüssel und Azure Key Vault-Geheimnisse

Azure Key Vault ist ein Azure-Dienst, der kryptografische Schlüssel, Geheimnisse und Zertifikate schützt. Die Lösung stellt ein zentrales, sicheres und hochverfügbares Repository für vertrauliche Informationen wie API-Schlüssel bereit. Um das unsichere Einbetten von API-Schlüsseln direkt im Quellcode Ihrer Anwendung zu vermeiden, können Sie Ihre App so konfigurieren, dass sie sicher mit API-Schlüsseln interagiert, die in Azure Key Vault gespeichert sind.

In diesem Artikel erfahren Sie, wie Sie eine Key Vault-Instanz erstellen, einen API-Schlüssel als Geheimnis zu einem Schlüsseltresor hinzufügen und dann den Schlüsseltresor mithilfe bewährter Methoden konfigurieren. Diese bewährten Methoden umfassen das Einschränken des Zugriffs mithilfe der rollenbasierten Zugriffssteuerung (RBAC), das Aktivieren der Überwachung und das Einschränken des Netzwerkzugriffs.

Erstellen und Sichern einer Azure Key Vault-Instanz

Mit Azure Key Vault können Sie kryptografische Schlüssel, Geheimnisse und Zertifikate sicher speichern. Sie sollten separate Schlüsseltresore für verschiedene Umgebungen (Entwicklung, Staging, Produktion) und Anwendungen bereitstellen.

Erstellen einer Ressourcengruppe und einer Key Vault-Instanz

Um eine Key Vault-Instanz zu erstellen, können Sie den folgenden Befehl über Azure CLI oder Azure Cloud Shell verwenden:

  1. Verwenden Sie den Befehl az group create, um eine Ressourcengruppe zu erstellen:

    az group create --name myResourceGroup --location eastus
    

    Falls gewünscht, können Sie „eastus“ in eine Region ändern, die näher an Ihrem Standort liegt.

  2. Verwenden Sie az keyvault create, um den Schlüsseltresor zu erstellen:

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

    Ersetzen Sie <your-unique-keyvault-name> durch einen Namen, der innerhalb von Azure eindeutig ist. In der Regel verwenden Sie Ihren persönlichen oder Firmennamen zusammen mit Ziffern und anderen Bezeichnern.

Hinzufügen eines API-Schlüssels zu Azure Key Vault als Geheimnis

Nachdem Sie die Azure Key Vault-Instanz erstellt haben, können Sie dieser Azure Key Vault-Instanz einen API-Schlüssel als Geheimnis hinzufügen.

Im Folgenden wird der Befehl az keyvault secret set über Azure CLI verwendet, um ein Geheimnis namens MyApiKey zum Schlüsseltresor hinzuzufügen. Das Geheimnis läuft nach 180 Tagen ab:

az keyvault secret set \
    --vault-name "<YourKeyVaultName>" \
    --name "MyApiKey" \
    --value "<YourSecretValue>"
    --expires "$(date -u -d '+180 days' +'%Y-%m-%dT%H:%M:%SZ')"

Sie sollten Ihre API-Schlüssel regelmäßig drehen. Abhängig von den Sicherheitsanforderungen Ihrer Organisation können Sie die Schlüssel häufiger oder seltener als alle 180 Tage drehen. Sie können ein Event Grid-Abonnement für das Ereignis „SecretNearExpiry“ konfigurieren, um Benachrichtigungen über ablaufende API-Geheimnisse zu empfangen.

Einschränken des Zugriffs auf Azure Key Vault mithilfe der RBAC

Sie können den Zugriff auf die Azure Key Vault-Instanz einschränken, sodass nur die Identität der Anwendung Zugriff auf Azure Key Vault hat.

Konfigurieren Sie dazu die rollenbasierte Zugriffssteuerung (RBAC) mithilfe des Befehls az role assignment create über Azure CLI:

az role assignment create --role "Key Vault Secrets User" \
  --assignee <object-id-of-app-or-user> \
  --scope /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<key-vault-name>

Aktivieren der Protokollierung und von Benachrichtigungen in Azure Key Vault

Sie sollten die Protokollierung und Benachrichtigungen in Ihrer Key Vault-Instanz aktivieren, um potenziell verdächtige Aktivitäten zu erkennen.

Um die Protokollierung und Benachrichtigungen in Azure Key Vault zu aktivieren, verwenden Sie den Befehl az monitor diagnostic-settings create über Azure CLI:

az monitor diagnostic-settings create \
    --name myDiagnosticSettings \
    --resource {key-vault-resource-id} \
    --logs '[{"category": "AuditEvent","enabled": true}]' \
    --workspace {log-analytics-workspace-id}

Dieser Befehl erstellt eine Diagnoseeinstellung namens myDiagnosticSettings, konfiguriert diese für den angegebenen Azure Key Vault und aktiviert die Protokollkategorie AuditEvent, die Sicherheits- und Zugriffsereignisse verfolgt und die Protokolle an den angegebenen Log Analytics-Arbeitsbereich zur Überwachung, Analyse und Warnung sendet. So können Sie Zugriffsmuster überwachen, nicht autorisierte Zugriffsversuche erkennen und Benachrichtigungen für kritische Sicherheitsereignisse konfigurieren (z. B. wenn jemand versucht, ohne die entsprechenden Berechtigungen auf ein Geheimnis zuzugreifen).

Sie können den Befehl az monitor scheduled-query create über Azure CLI ausführen, um Protokolle im angegebenen Log Analytics-Arbeitsbereich hinsichtlich nicht autorisierter Zugriffsversuche auf Azure Key Vault-Geheimnisse zu überwachen und eine Benachrichtigen auszulösen, wenn nicht autorisierte Zugriffsversuche erkannt werden:

az monitor scheduled-query create \
    --name "Suspicious Access Alert" \
    --resource-group myResourceGroup \
    --scopes {log-analytics-workspace-resource-id} \
    --condition "AzureDiagnostics | where ResourceType == 'VAULTS' | where OperationName == 'SecretGet' | where ResultSignature == 'Unauthorized'"

Einschränken des Netzwerkzugriffs auf Key Vault

Sie sollten den Netzwerkzugriff auf Azure Key Vault einschränken, sodass der Tresor nur Anforderungen von bekannten Netzwerken akzeptiert. Hierfür stehen zwei Methoden zur Verfügung:

  • Azure Private Link: Dadurch wird ein privater Endpunkt innerhalb Ihres virtuellen Netzwerks erstellt, sodass Ihre Anwendung eine Verbindung mit Azure Key Vault herstellen kann, ohne das öffentliche Internet zu verwenden. Diese Option ist die sicherste, da der Datenverkehr in Ihrem Netzwerk verbleibt. Sie erfordert jedoch das Erstellen eines privaten Endpunkts und das Konfigurieren von DNS.
  • Firewallregeln. Sie können die Firewalleinstellungen von Azure Key Vault unter „Netzwerke“ mit einer Liste zulässiger IP-Bereiche konfigurieren. Sie können diese Methode auch verwenden, um den Zugriff auf vorhandene virtuelle Netzwerke zuzulassen. Dies erfordert jedoch, dass Sie einen Dienstendpunkt für Microsoft.KeyVault im ausgewählten Subnetz aktivieren.

Sie können einen privaten Endpunkt mithilfe des Befehls az network private-endpoint erstellen, um über Azure CLI erstellen:

az network private-endpoint create \
    --name myPrivateEndpoint \
    --resource-group myResourceGroup \
    --vnet-name myVNet \
    --subnet mySubnet \
    --private-connection-resource-id /subscriptions/{subscription}/resourceGroups/{rg}/providers/Microsoft.KeyVault/vaults/{key-vault-name} \
    --group-id vault \
    --connection-name myConnection

You can create firewall rules on the Azure Key Vault instance using the Azure CLI [az keyvault network-rule add](/cli/azure/keyvault/network-rule#az-keyvault-network-rule-add) command, substituting the appropriate key vault names, resource groups, subnet, and subnet mask information:

```azurecli
az keyvault network-rule add \
    --name {key-vault-name} \
    --resource-group myResourceGroup \
    --ip-address {trusted-ip-address}/32

Azure Key Vault erzwingt HTTPS für jede Kommunikation. Dadurch wird sichergestellt, dass Ihre API-Schlüssel und andere vertrauliche Daten während der Übertragung verschlüsselt werden und sie vor Lauschangriffen und Man-in-the-Middle-Angriffen geschützt werden.

Interagieren mit Azure Key Vault über Python

Um mit Azure Key Vault über Python zu interagieren, installieren Sie die Azure-Identitätsbibliothek für Microsoft Entra ID und die Azure Key Vault-Bibliothek:

pip install azure-identity
pip install azure-keyvault-secrets

Sie können die Clientbibliothek „Azure Identity“ und „Azure Key Vault“ verwenden, um Geheimnisse programmgesteuert zu verwalten:

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

key_vault_name = "<your-key-vault-name>"
KVUri = f"https://{key_vault_name}.vault.azure.net"
secret_name = "<your-secret-name>"

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

retrieved_secret = client.get_secret(secret_name)

# Now you can use the API key:

api_key = retrieved_secret.value
print(f"The API key is: {api_key}")

Siehe dieser Beispielcode:

  • DefaultAzureCredential: Diese Klasse versucht, sich mit verschiedenen Methoden (Umgebungsvariablen, verwaltete Identitäten usw.) zu authentifizieren, sodass sie für verschiedene Azure-Umgebungen geeignet ist.
  • SecretClient: Diese Klasse stellt Methoden für die Interaktion mit Geheimnissen in Azure Key Vault bereit.
  • get_secret(): Ruft den geheimen Schlüssel aus Azure Key Vault ab.

Nächste Schritte