Azure Functions'ta Environment Variable ve Secret Yönetimi
Azure Functions'ta API anahtarları, veritabanı şifreleri ve diğer hassas veriler doğrudan koda yazılırsa güvenlik riski oluşur. Bu bilgileri environment variable ve Azure Key Vault üzerinden yönetmek gerekir.
Local.settings.json ile Geliştirme Ortamı
Lokal geliştirmede `local.settings.json` dosyasında değişkenleri tanımlarsın. Bu dosya git'e eklenmez.
1{2"IsEncrypted": false,3"Values": {4"AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=...",5"FUNCTIONS_WORKER_RUNTIME": "python",6"API_KEY": "your-api-key-here",7"DB_CONNECTION": "Server=localhost;...",8"ENVIRONMENT": "development"9}10}Python fonksiyonunda bu değişkenleri `os.environ` ile oku:
1import azure.functions as func2import os34def main(req: func.HttpRequest) -> func.HttpResponse:5api_key = os.environ.get("API_KEY")6db_conn = os.environ.get("DB_CONNECTION")78if not api_key:9return func.HttpResponse("API_KEY not found", status_code=500)1011return func.HttpResponse(f"Connected with key: {api_key[:5]}...")Azure Key Vault Entegrasyonu
Üretim ortamında Key Vault kullan. Önce bir Key Vault oluştur, sonra Function App'e erişim izni ver. Function App'in Managed Identity'sini Key Vault'ta Secret Reader olarak ayarla.
Fonksiyon kodunda Key Vault'tan gizli bilgi çek:
[cod]
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
vault_url = "https://your-vault.vault.azure.net/"
credential = DefaultAzureCredential()
client = SecretClient(vault_url=vault_url, credential=credential)
try:
api_key = client.get_secret("api-key").value
db_pass = client.get_secret("db-password").value
return func.HttpResponse(f"Secrets retrieved successfully")
except Exception as e:
return func.HttpResponse(f"Error: {str(e)}", status_code=500)
[/kod]
Azure Portal üzerinden Uygulama Ayarları
Function App > Configuration > Application settings bölümünde değişkenleri ekle. Bu değerler otomatik olarak `os.environ`'dan erişilebilir. Gizli bilgiler için Key Vault reference kullan: `@Microsoft.KeyVault(SecretUri=https://vault.vault.azure.net/secrets/secret-name/)`
Sık Yapılan Hatalar
- `local.settings.json`'u git'e ekleme; `.gitignore`'a ekle.
- Key Vault anahtarı yanlış yazılırsa `DefaultAzureCredential` başarısız olur; Managed Identity izinlerini kontrol et.
- Üretim ortamında hardcoded değerleri silmeyi unutma.
Bu yöntemle hassas veriler koddan ayrı tutulur, erişim kontrol edilir ve audit trail oluşturulur.
0 yorum