🚀 چرا Connection String رو مستقیم تو appsettings.json نگذاریم؟
آشنایی کامل با Azure Key Vault
🔐 وقتی توی یک پروژه ASP.NET Core داری کار میکنی، معمولاً Connection String و Credentialهای حساس رو توی appsettings.json میزاری.
❌ اما این کار چند تا مشکل اساسی داره:
📂 فایل پیکربندی معمولاً داخل سورس کنترل (Git) هست → پس هرکسی به مخزن دسترسی داشته باشه، به دادههای حساس هم دسترسی پیدا میکنه.
🛠 حتی اگه تو gitignore. بگذاری، باز هم روی سرور یا محیطهای مشترک ممکنه نشت کنه.
🔓 توی Production، این اطلاعات ممکنه لاگ بشه یا با خطاها لو بره.
✅ راهحل امن و استاندارد: استفاده از Azure Key Vault
🔍 حالا Azure Key Vault چیه؟
یک سرویس ابری از Azure برای ذخیرهسازی امن:
🔑 Secrets (مثل Connection String، API Keys، Tokenها)
🗝 Keys (کلیدهای رمزنگاری)
📜 Certificates (گواهیها)
💯مزیتها:
• مدیریت مرکزی و امن دادههای حساس.
• کنترل سطح دسترسی به کمک Microsoft Entra ID.
• پشتیبانی از Hardware Security Module (HSM).
📦 پکیجهای لازم
dotnet add package Azure.Extensions.AspNetCore.Configuration.Secrets
dotnet add package Azure.Identity
🛠 راهاندازی در حالت Development
برای محیط لوکال، از Secret Manager استفاده کن:
<PropertyGroup>
<UserSecretsId>{GUID}</UserSecretsId>
</PropertyGroup>
اضافه کردن Secret:
dotnet user-secrets set "DbConnection" "Server=.;Database=Test;User Id=sa;Password=1234"
🏭 راهاندازی در Production با Azure Key Vault
1️⃣ ساخت Resource Group و Key Vault
az group create --name "MyGroup" --location "westeurope"
az keyvault create --name "myvault123" --resource-group "MyGroup" --location "westeurope"
2️⃣ ذخیره Secrets
az keyvault secret set --vault-name "myvault123" --name "DbConnection" --value "Server=sql.example.com;Database=Prod;..."
🗂 اتصال ASP.NET Core به Key Vault
روش ۱: با گواهی X.509
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new ClientCertificateCredential(
builder.Configuration["AzureADDirectoryId"],
builder.Configuration["AzureADApplicationId"],
x509Certificate));
روش 2️⃣ : با Managed Identity (پیشنهادی در Azure)
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new DefaultAzureCredential());
📌 بهترین نکات امنیتی
🔒 هر محیط (Dev/Prod) باید Key Vault جدا داشته باشه.
📛 از نامگذاری استاندارد برای Secrets استفاده کن (برای بخشها از -- به جای :).
🔄 برای تغییرات حساس، ReloadInterval رو تنظیم کن تا مقادیر بهروزرسانی بشن.
🛑 و Secrets رو هرگز در لاگها چاپ نکن.
🎯 نتیجه
با این روش:
• اطلاعات حساس هرگز در سورسکد یا فایلهای config ذخیره نمیشن.
• در صورت نشت سورس یا فایلها، اطلاعات Production در امانه.
• مدیریت و تغییر مقادیر حساس از طریق Azure Portal یا CLI انجام میشه، بدون نیاز به Deploy دوباره اپلیکیشن.
🔖 هشتگها:
#CSharp #ASPNetCore #Azure #KeyVault #CodeSafety #MicrosoftAzure #ConnectionString