Apps, API-sleutels en Azure Key Vault-geheimen
Azure Key Vault is een Azure-service waarmee cryptografische sleutels, geheimen en certificaten worden beschermd. Het biedt een gecentraliseerde, beveiligde en maximaal beschikbare opslagplaats voor gevoelige informatie, zoals API-sleutels. Een methode voor het voorkomen van onveilige procedures voor het rechtstreeks insluiten van API-sleutels in de broncode van uw toepassing is het configureren van uw app om veilig te communiceren met API-sleutels die zijn opgeslagen in Azure Key Vault.
In dit artikel leert u hoe u een Key Vault-exemplaar maakt, een API-sleutel als geheim aan deze sleutelkluis toevoegt en vervolgens de sleutelkluis configureert met aanbevolen procedures. Deze aanbevolen procedures omvatten het beperken van de toegang met op rollen gebaseerd toegangsbeheer (RBAC), het inschakelen van bewaking en het beperken van netwerktoegang.
Een Azure Key Vault-exemplaar maken en beveiligen
Met Azure Key Vault kunt u veilig cryptografische sleutels, geheimen en certificaten opslaan. U moet afzonderlijke sleutelkluizen implementeren voor verschillende omgevingen (ontwikkeling, fasering, productie) en toepassingen.
Een resourcegroep en sleutelkluisexemplaren maken
Als u een sleutelkluisexemplementatie wilt maken, kunt u de volgende opdracht uit Azure CLI of Azure Cloud Shell gebruiken:
Gebruik de opdracht
az group create
om een resourcegroep te maken:az group create --name myResourceGroup --location eastus
Als u liever de 'eastus' wijzigt in een locatie die dichterbij ligt, kan dat ook.
Gebruik
az keyvault create
om de sleutelkluis te maken:az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
Vervang
<your-unique-keyvault-name>
door een naam die in de volledige Azure-omgeving uniek is. Normaal gesproken gebruikt u uw persoonlijke of bedrijfsnaam samen met andere getallen en id's.
Een API-sleutel toevoegen aan Azure Key Vault als geheim
Zodra u het Azure Key Vault-exemplaar hebt gemaakt, kunt u een API-sleutel als geheim toevoegen aan dit Azure Key Vault-exemplaar.
Hieronder wordt de azure CLI az keyvault secret set command gebruikt om een geheim met de naam MyApiKey toe te voegen aan de sleutelkluis en stelt het geheim in op verlopen na 180 dagen:
az keyvault secret set \
--vault-name "<YourKeyVaultName>" \
--name "MyApiKey" \
--value "<YourSecretValue>"
--expires "$(date -u -d '+180 days' +'%Y-%m-%dT%H:%M:%SZ')"
U moet uw API-sleutels regelmatig draaien. Afhankelijk van de beveiligingsbehoeften van uw organisatie, kunt u ervoor kiezen om sleutels vaker dan elke 180 dagen te draaien. U kunt een Event Grid-abonnement configureren voor de gebeurtenis SecretNearExpiry als een methode voor het ontvangen van meldingen over verlopende API-sleutelgeheimen.
Toegang tot key vault beperken met RBAC
U kunt de toegang tot het Azure Key Vault-exemplaar beperken, zodat alleen de identiteit van de toepassing toegang heeft tot Azure Key Vault.
Hiervoor configureert u een RBAC-rol (Role Based Access Control) met behulp van de azure CLI az role assignment create command:
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>
Key Vault-logboekregistratie en -waarschuwingen inschakelen
U moet logboekregistratie en waarschuwingen voor uw Key Vault-exemplaar inschakelen als methode voor het detecteren van mogelijk verdachte activiteiten.
Als u Logboekregistratie en waarschuwingen van Azure Key Vault wilt inschakelen, gebruikt u de opdracht az monitor diagnostic-settings create :
az monitor diagnostic-settings create \
--name myDiagnosticSettings \
--resource {key-vault-resource-id} \
--logs '[{"category": "AuditEvent","enabled": true}]' \
--workspace {log-analytics-workspace-id}
Met deze opdracht maakt u een diagnostische instelling met de naam myDiagnosticSettings
, configureert deze voor de opgegeven Azure Key Vault, schakelt u de AuditEvent
logboekcategorie in, waarmee beveiligings- en toegangsgerelateerde gebeurtenissen worden bijgehouden en de logboeken worden verzonden naar de opgegeven Log Analytics-werkruimte voor bewaking, analyse en waarschuwingen. Hiermee kunt u toegangspatronen bewaken, onbevoegde toegangspogingen detecteren en waarschuwingen configureren voor kritieke beveiligingsgebeurtenissen (bijvoorbeeld iemand probeert toegang te krijgen tot een geheim zonder de juiste machtigingen).
U kunt de Azure CLI az monitor scheduled-query create-opdracht uitvoeren om logboeken in de opgegeven Log Analytics-werkruimte te bewaken voor pogingen om onbevoegde toegang tot Azure Key Vault-geheimen te openen en een waarschuwing te activeren als er een overeenkomende poging tot onbevoegde toegang wordt gedetecteerd:
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'"
Netwerktoegang tot Key Vault beperken
U moet netwerktoegang tot Azure Key Vault beperken, zodat de kluis alleen aanvragen van bekende netwerklocaties accepteert. Er zijn twee algemene methoden die u kunt gebruiken om dit te doen:
- Azure Private Link. Hiermee maakt u een privé-eindpunt in uw virtuele netwerk, zodat uw toepassing verbinding kan maken met Azure Key Vault zonder het openbare internet te doorlopen. Deze optie is het veiligst omdat verkeer binnen uw netwerk blijft, maar vereist het maken van een privé-eindpunt en het configureren van DNS.
- Firewallregels. U kunt de firewallinstellingen van Azure Key Vault configureren, die zich onder Netwerken bevinden, met een lijst met toegestane IP-bereiken. U kunt deze methode ook gebruiken om toegang tot bestaande virtuele netwerken toe te staan, maar hiervoor moet u een service-eindpunt inschakelen voor Microsoft.KeyVault op het geselecteerde subnet.
U kunt een privé-eindpunt maken met behulp van de azure CLI az network private-endpoint create command:
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 dwingt HTTPS af voor alle communicatie. Dit zorgt ervoor dat uw API-sleutels en andere gevoelige gegevens tijdens overdracht worden versleuteld, waardoor ze worden beschermd tegen afluisteren en man-in-the-middle-aanvallen.
Interactie met Azure Key Vault met behulp van Python
Als u wilt communiceren met Azure Key Vault met behulp van Python, installeert u de Azure-identiteitsbibliotheek voor Microsoft Entra-id en de Azure Key Vault-geheimenbibliotheek:
pip install azure-identity
pip install azure-keyvault-secrets
U kunt de clientbibliotheek Azure Identity en Azure Key Vault Secrets gebruiken om geheimen programmatisch te beheren:
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}")
In deze voorbeeldcode:
- DefaultAzureCredential: deze klasse probeert te verifiëren met behulp van verschillende methoden (omgevingsvariabelen, beheerde identiteiten, enzovoort), waardoor deze geschikt is voor verschillende Azure-omgevingen.
- SecretClient: deze klasse biedt methoden voor interactie met geheimen in Key Vault.
- get_secret(): haalt het geheim op uit Key Vault.