Uygulamalar, API Anahtarları ve Azure Key Vault gizli dizileri
Azure Key Vault şifreleme anahtarlarını, gizli dizileri ve sertifikaları koruyan bir Azure hizmetidir. API anahtarları gibi hassas bilgiler için merkezi, güvenli ve yüksek oranda kullanılabilir bir depo sağlar. API anahtarlarını doğrudan uygulamanızın kaynak koduna eklemenin güvenli olmayan uygulamasından kaçınmanın bir yöntemi, uygulamanızı Azure Key Vault'ta depolanan API anahtarlarıyla güvenli bir şekilde etkileşim kuracak şekilde yapılandırmaktır.
Bu makalede Key Vault örneği oluşturmayı, bu anahtar kasasına bir API anahtarını gizli dizi olarak eklemeyi ve ardından en iyi yöntemleri kullanarak anahtar kasasını yapılandırmayı öğreneceksiniz. Bu en iyi yöntemler rol tabanlı erişim denetimi (RBAC) kullanarak erişimi kısıtlamayı, izlemeyi etkinleştirmeyi ve ağ erişimini kısıtlamayı içerir.
Azure Key Vault örneği oluşturma ve güvenliğini sağlama
Azure Key Vault şifreleme anahtarlarını, gizli dizileri ve sertifikaları güvenli bir şekilde depolamanıza olanak tanır. Farklı ortamlar (geliştirme, hazırlama, üretim) ve uygulamalar için ayrı anahtar kasaları dağıtmanız gerekir.
Kaynak grubu ve anahtar kasası örneği oluşturma
Anahtar kasası örneği oluşturmak için Azure CLI veya Azure Cloud Shell'den aşağıdaki komutu kullanabilirsiniz:
az group create
Kaynak grubu oluşturmak için komutunu kullanın:az group create --name myResourceGroup --location eastus
İsterseniz "eastus" değerini size daha yakın bir konuma değiştirebilirsiniz.
Anahtar kasasını oluşturmak için kullanın
az keyvault create
:az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
değerini tüm Azure'da benzersiz bir adla değiştirin
<your-unique-keyvault-name>
. Genellikle kişisel veya şirket adınızı diğer numaralar ve tanımlayıcılarla birlikte kullanırsınız.
Azure Key Vault'a gizli dizi olarak API anahtarı ekleme
Azure Key Vault örneğini oluşturduktan sonra, bu Azure Key Vault örneğine bir API anahtarını gizli dizi olarak ekleyebilirsiniz.
Aşağıda, keyvault'a MyApiKey adlı bir gizli dizi eklemek için Azure CLI az keyvault secret set komutu kullanılır ve gizli dizi 180 gün sonra sona erecek şekilde ayarlanır:
az keyvault secret set \
--vault-name "<YourKeyVaultName>" \
--name "MyApiKey" \
--value "<YourSecretValue>"
--expires "$(date -u -d '+180 days' +'%Y-%m-%dT%H:%M:%SZ')"
API anahtarlarınızı düzenli aralıklarla döndürmeyi hedeflemeniz gerekir. Kuruluşunuzun güvenlik gereksinimlerine bağlı olarak, anahtarları 180 günde bir veya daha az sıklıkta döndürmeyi seçebilirsiniz. Süresi dolan API anahtar gizli dizileri hakkında bildirim alma yöntemi olarak "SecretNearExpiry" olayı için event Grid aboneliği yapılandırabilirsiniz.
RBAC kullanarak Key Vault'a erişimi kısıtlama
Azure Key Vault örneğine erişimi yalnızca uygulamanın kimliğinin Azure Key Vault'a erişimi olacak şekilde kısıtlayabilirsiniz.
Bunu yapmak için Azure CLI az role assignment create komutunu kullanarak Rol Tabanlı Erişim Denetimi (RBAC) rolünü yapılandırın:
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 günlüğünü ve uyarılarını etkinleştirme
Şüpheli olabilecek etkinlikleri algılama yöntemi olarak Key Vault örneğinizde günlüğe kaydetmeyi ve uyarıları etkinleştirmeniz gerekir.
Azure Key Vault Günlüğünü ve Uyarılarını etkinleştirmek için Azure CLI az monitor diagnostic-settings create komutunu kullanın:
az monitor diagnostic-settings create \
--name myDiagnosticSettings \
--resource {key-vault-resource-id} \
--logs '[{"category": "AuditEvent","enabled": true}]' \
--workspace {log-analytics-workspace-id}
Bu komut adlı myDiagnosticSettings
bir tanılama ayarı oluşturur, bunu belirtilen Azure Key Vault için yapılandırır, güvenlik ve erişimle ilgili olayları izleyen ve günlükleri izleme, analiz ve uyarı için belirtilen Log Analytics çalışma alanına gönderen günlük kategorisini etkinleştirir AuditEvent
. Bu, erişim düzenlerini izlemenize, yetkisiz erişim girişimlerini algılamanıza ve kritik güvenlik olayları için uyarılar yapılandırmanıza olanak tanır (örneğin, birisi doğru izinler olmadan gizli diziye erişmeye çalışır).
Azure Key Vault gizli dizilerine yetkisiz erişim girişimleri için belirtilen Log Analytics çalışma alanında günlükleri izlemek ve eşleşen yetkisiz erişim girişimi algılanırsa bir uyarı tetiklemek için Azure CLI az monitor scheduled-query create komutunu çalıştırabilirsiniz:
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'"
Key Vault'a ağ erişimini kısıtlama
Kasanın yalnızca bilinen ağ konumlarından gelen istekleri kabul etmesi için Azure Key Vault'a ağ erişimini kısıtlamanız gerekir. Bunu yapmak için kullanabileceğiniz iki genel yöntem vardır:
- Azure Özel Bağlantı. Bu, sanal ağınızda özel bir uç nokta oluşturarak uygulamanızın genel İnternet'ten geçmeden Azure Key Vault'a bağlanmasına olanak tanır. Trafik ağınızda kaldığından bu seçenek en güvenli seçenektir, ancak özel bir uç nokta oluşturma ve DNS'yi yapılandırmayı gerektirir.
- Güvenlik Duvarı Kuralları. Ağlar altında bulunan Azure Key Vault güvenlik duvarı ayarlarını izin verilen IP aralıklarının listesiyle yapılandırabilirsiniz. Mevcut sanal ağlara erişime izin vermek için de bu yöntemi kullanabilirsiniz, ancak bunun için seçilen alt ağda Microsoft.KeyVault için bir hizmet uç noktasını etkinleştirmeniz gerekir.
Azure CLI az network private-endpoint create komutunu kullanarak özel uç nokta oluşturabilirsiniz :
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 tüm iletişimler için HTTPS uygular. Bu, API anahtarlarınızın ve diğer hassas verilerinizin aktarım sırasında şifrelenmesini sağlayarak dinleme ve ortadaki adam saldırılarına karşı koruma sağlar.
Python kullanarak Azure Key Vault ile etkileşim kurma
Python kullanarak Azure Key Vault ile etkileşim kurmak için Microsoft Entra Id için Azure kimlik kitaplığını ve Azure Key Vault gizli dizi kitaplığını yükleyin:
pip install azure-identity
pip install azure-keyvault-secrets
Gizli dizileri program aracılığıyla yönetmek için Azure Identity ve Azure Key Vault Gizli Dizileri istemci kitaplığını kullanabilirsiniz:
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}")
Bu örnek kodda:
- DefaultAzureCredential: Bu sınıf çeşitli yöntemler (ortam değişkenleri, yönetilen kimlikler vb.) kullanarak kimlik doğrulamayı dener ve bunu farklı Azure ortamları için uygun hale getirir.
- SecretClient: Bu sınıf, Key Vault'taki gizli dizilerle etkileşime geçmek için yöntemler sağlar.
- get_secret(): Key Vault'tan gizli diziyi alır.