Appar, API-nycklar och Azure Key Vault-hemligheter
Azure Key Vault är en Azure-tjänst som skyddar kryptografiska nycklar, hemligheter och certifikat. Den tillhandahåller en centraliserad, säker och högtillgänglig lagringsplats för känslig information som API-nycklar. En metod för att undvika den osäkra metoden att bädda in API-nycklar direkt i programmets källkod är att konfigurera appen så att den interagerar säkert med API-nycklar som lagras i Azure Key Vault.
I den här artikeln får du lära dig hur du skapar en Key Vault-instans, lägger till en API-nyckel som en hemlighet i det här nyckelvalvet och konfigurerar sedan nyckelvalvet med metodtips. Dessa metodtips omfattar att begränsa åtkomsten med hjälp av rollbaserad åtkomstkontroll (RBAC), aktivera övervakning och begränsa nätverksåtkomst.
Skapa och skydda en Azure Key Vault-instans
Med Azure Key Vault kan du lagra kryptografiska nycklar, hemligheter och certifikat på ett säkert sätt. Du bör distribuera separata nyckelvalv för olika miljöer (utveckling, mellanlagring, produktion) och program.
Skapa en resursgrupp och key vault-instans
Om du vill skapa en key vault-instans kan du använda följande kommando från Azure CLI eller Azure Cloud Shell:
az group create
Använd kommandot för att skapa en resursgrupp:az group create --name myResourceGroup --location eastus
Du kan ändra "eastus" till en plats närmare dig, om du vill.
Använd
az keyvault create
för att skapa nyckelvalvet:az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
Ersätt
<your-unique-keyvault-name>
med ett namn som är unikt i hela Azure. Du använder vanligtvis ditt personliga namn eller företagsnamn tillsammans med andra nummer och identifierare.
Lägga till en API-nyckel i Azure Key Vault som en hemlighet
När du har skapat Azure Key Vault-instansen kan du lägga till en API-nyckel som en hemlighet i den här Azure Key Vault-instansen.
Följande använder kommandot Azure CLI az keyvault secret set för att lägga till en hemlighet med namnet MyApiKey i keyvault och anger att hemligheten upphör att gälla efter 180 dagar:
az keyvault secret set \
--vault-name "<YourKeyVaultName>" \
--name "MyApiKey" \
--value "<YourSecretValue>"
--expires "$(date -u -d '+180 days' +'%Y-%m-%dT%H:%M:%SZ')"
Du bör sträva efter att rotera DINA API-nycklar med jämna mellanrum. Beroende på organisationens säkerhetsbehov kan du välja att rotera nycklar mer eller mindre ofta än var 180:e dag. Du kan konfigurera en Event Grid-prenumeration för händelsen "SecretNearExpiry" som en metod för att ta emot meddelanden om att API-nyckelhemligheter upphör att gälla.
Begränsa åtkomsten till Key Vault med hjälp av RBAC
Du kan begränsa åtkomsten till Azure Key Vault-instansen så att endast programmets identitet har åtkomst till Azure Key Vault.
Så här konfigurerar du en rollbaserad åtkomstkontroll (RBAC) med hjälp av kommandot Azure CLI az role assignment create :
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>
Aktivera Key Vault-loggning och aviseringar
Du bör aktivera loggning och aviseringar på din Key Vault-instans som en metod för att identifiera potentiellt misstänkt aktivitet.
Om du vill aktivera Loggning och aviseringar för Azure Key Vault använder du kommandot Azure CLI 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}
Det här kommandot skapar en diagnostikinställning med namnet myDiagnosticSettings
, konfigurerar den för det angivna Azure Key Vault, aktiverar AuditEvent
loggkategorin, som spårar säkerhets- och åtkomstrelaterade händelser och skickar loggarna till den angivna Log Analytics-arbetsytan för övervakning, analys och aviseringar. På så sätt kan du övervaka åtkomstmönster, identifiera obehöriga åtkomstförsök och konfigurera aviseringar för kritiska säkerhetshändelser (till exempel försöker någon komma åt en hemlighet utan rätt behörighet).
Du kan köra kommandot Azure CLI az monitor scheduled-query create för att övervaka loggar på den angivna Log Analytics-arbetsytan för obehöriga åtkomstförsök till Azure Key Vault-hemligheter och utlösa en avisering om ett matchande obehörigt åtkomstförsök upptäcks:
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'"
Begränsa nätverksåtkomsten till Key Vault
Du bör begränsa nätverksåtkomsten till Azure Key Vault så att valvet endast accepterar begäranden från kända nätverksplatser. Det finns två allmänna metoder som du kan använda för att göra detta:
- Azure Private Link. Detta skapar en privat slutpunkt i ditt virtuella nätverk, vilket gör att programmet kan ansluta till Azure Key Vault utan att passera det offentliga Internet. Det här alternativet är det säkraste eftersom trafiken finns kvar i nätverket, men kräver att du skapar en privat slutpunkt och konfigurerar DNS.
- Brandväggsregler. Du kan konfigurera Azure Key Vault-brandväggsinställningarna, som finns under Nätverk, med en lista över tillåtna IP-intervall. Du kan också använda den här metoden för att tillåta åtkomst till befintliga virtuella nätverk, men detta kräver att du aktiverar en tjänstslutpunkt för Microsoft.KeyVault i det valda undernätet.
Du kan skapa en privat slutpunkt med hjälp av kommandot Azure CLI az network private-endpoint create :
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 tillämpar HTTPS för all kommunikation. Detta säkerställer att dina API-nycklar och andra känsliga data krypteras under överföring, vilket skyddar dem från avlyssning och man-in-the-middle-attacker.
Interagera med Azure Key Vault med Python
Om du vill interagera med Azure Key Vault med Python installerar du Azure-identitetsbiblioteket för Microsoft Entra-ID och azure key vault-hemlighetsbiblioteket:
pip install azure-identity
pip install azure-keyvault-secrets
Du kan använda Azure Identity- och Azure Key Vault Secrets-klientbiblioteket för att hantera hemligheter programmatiskt:
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}")
I den här exempelkoden:
- DefaultAzureCredential: Den här klassen försöker autentisera med hjälp av olika metoder (miljövariabler, hanterade identiteter osv.), vilket gör den lämplig för olika Azure-miljöer.
- SecretClient: Den här klassen innehåller metoder för att interagera med hemligheter i Key Vault.
- get_secret(): Hämtar hemligheten från Key Vault.