Azure Key Vault در پیکربندی Asp.net Core
شناسه پست: 2949
بازدید: 377

در این مقاله، میخواهیم در مورد نحوه محافظت از داده های حساس پیکربندی در محیط production با استفاده از Azure Key Vault صحبت کنیم. قبلا ما در مورد  Secret Manager و متغیرهای محیطی صحبت کردیم.

این شیوه ها در مورد محیط production مناسب نیستند، زیرا مقادیری که ما به این شکل حفظ می کنیم رمزگذاری نشده اند و در صورت به خطر انداختن امنیت به راحتی قابل خواندن هستند.

اگر میخواهید در طول مسیر این مقاله، ما را دنبال کنید، از نقطه شروع یعنی سورس `پروژه ایمن کردن داده ها به صورت محلی استفاده کنید. برای بررسی پروژه تکمیل شده این مقاله، از پروژه نهایی این مقاله یعنی پروژه تکمیل شده azure-Key-Vault  استفاده کنید.

در این مقاله، ما در مورد موضوعات زیر صحبت میکنیم:

معرفی Azure Key Vault

یکی از راه هایی که می توانیم secret های خود را مخفی نگه داریم ، استفاده از Azure Key Vault است که یک سرویس ابری است و کلیدها و secret ihd رمزنگاری شده ای را که برنامه ها و سرویس های ما از آن استفاده می کنند را در خود نگهداری می کند. به عبارتی دیگر، یک راه ایمن برای نگهداری زوجهای key-value که در برنامه خود استفاده میکنیم را ارائه میدهد.

Azure Key Vault از داده های پیکربندی مسطح همانطور که در استفاده با user secret ها و متغیرهای محیطی دیدیم استفاده میکند.

جهت استفاده از Azure Key Vault، باید یک اشتراک فعال در Microsoft Azure داشته باشید.

Microsoft Azure Key Vault configuration provider یک provider ای است که این بار مقادیر پیکربندی خود را با استفاده از آن به cloud میبریم و جلوتر به vault وصل شده و مقادیر را از آن میخوانیم.

روال کار برای برنامه های میزبانی شده با Azure و برنامه های میزبانی نشده با Azure کمی متفاوت است. اما ما بر روی دومی تمرکز میکنیم زیرا آن کمی پیچیده تر است.  Microsoft Azure Key vault یک راه آسانتر برای برنامه های میزبانی شده با Azure ارائه میدهد.

برای استفاده از Azure Key Vault در برنامه های میزبانی نشده با Azure، چند مرحله وجود دارد که باید به ترتیب آنها را انجام دهیم:

  • ایجاد اشتراک Azure (در این مورد صحبت نخواهیم کرد، فرض میکنیم که شما این اشتراک را دارید)
  • ثبت اپلیکیشن Azure AD
  • ایجاد یک Certificate و آپلود آن به Azure AD
  • ایجاد Azure Key Vault
  • import کردن Secret های موجود
  • اتصال به Key Vault از طریق اپلیکیشن ASP.NET Core

کارمان را ابتدا با مقداری پایه و اساس شروع میکنیم.

اتصال به Azure Key Vault

به منظور اتصال به Azure Key Vault خود، باید یک Azure app ثبت کنیم. به این منظور، به “Azure Active Directory” بروید و سپس به “App Registration” و در نهایت بر روی “New Registration” کلیک کنید.

دیالوگ نمایبش داده شده باید به این صورت باشد:

ثبت اپلیکیشن Azure

نام مناسبی به اپلیکیشن خود بدهید و بر روی “Register” کلیک کنید. زمانیکه ایجاد app به پایان رسید، میتوانید آن را در لیست app ها بیابید. روی آن کلیک کنید و “Application (client) ID” را بررسی کنید. آن را جایی بنویسید و یا نگه دارید چرا که جلوتر به آن نیاز خواهیم داشت.

از آنجایی که میخواهیم یه طور امن به app متصل شویم، باید یک certificate را ایجاد و آپلود نماییم.

ایجاد certificate شامل چند مرحله است و توصیه میکنیم که از OpenSSL برای این کار استفاده کنید، چرا که آن تمام ابزارهایی که ما نیاز داریم را دربر دارد.

ایجاد یک certificate با OpenSSL

  1. اگر شما OpenSSL را بر روی ویندوزتان ندارید آن را از اینجا دانلود کرده و نصب کنید.
  2. یک certificate را با تایپ دستور زیر در OpenSSL ایجاد نمایید:

3. یک فایل pfx. را از فایلهای key و certificate ایجاد کنید:

4. pfx را به طور local نصب کنید (دابل کلیک کرده و ویزارد را کامل نمایید)

5. cert.pem را به Azure AD آپلود کنید.

برای تکمیل مرحله 5، به قسمت “Certificates & secrets” در app تان بروید و سپس  “Upload certificate” را بزنید:

آپلود certificate در Azure

زمانیکه آپلود تمام شد، certificate thumbprint را جایی بنویسید و نگه دارید.

ایجاد Azure Key Vault

اکنون میتوانیم سراغ ایجاد vault خود برویم. به صفحه اصلی پورتال  Azure بروید و سرویس “Key vaults” را پیدا کنید. سپس  “Add” را کلیک کرده و اول موارد پایه را تکمیل کنید:

تکمیل اطلاعات پایه key vault

شما باید اشتراک، گروه منابع، نام، منطقه و سطح قیمت را پر کنید.

بعد از آن، به تب دوم یعنی Access policy بروید. در اینجا باید app که بالاتر ایجاد کردیم را اضافه کنیم. Secret Management” template را انتخاب کنید و از منوی کشویی “Secret permission”، مجوزهای  “Get” و “List” را انتخاب کنید:

سیاست دسترسی به azure key vault

از آنجایی که secret های خود را به طور دستی اضافه خواهیم کرد، مطمئن باشید که کاربر خودتان را به عنوان یک کاربر اصلی اضافه نموده اید و مجوزهای set و حذف secret ها را به او بدهید.

حالا به تب “Review + create” بروید و دکمه “Create” را کلیک کنید.

پس از اتمام فرآیند، به  key vault که ایجاد کرده اید بروید و “نام DNS” را جایی بنویسید.

در این مرحله شما باید سه قطعه اطلاعات داشته باشید:

  • Application ID
  • Certificate Thumbprint
  • نام DNS

حالا میتوانیم secret های خود را به vault اضافه کنیم.

افزودن Secret ها به Azure Key Vault

حالا میتوانیم در نهایت secret های خود را اضافه کنیم.

در سمت چپ، به تب “Secrets” بروید و تعدادی secret اضافه کنید:

افزودن secret به azure key vault

این فرایند تقریباً ساده است. اگر در مشاهده یا افزودن secret ها (تولید/import کردن) مشکلی دارید، خط مشی های دسترسی خود را بررسی کنید و refresh را کلیک کنید.

همانطور که در تصویر میبینید، ما تعدادی secret که از قبل داشتیم را اضافه کردیم. ما ساختار را با استفاده از دوعلامت dash — همسطح سازی کردیم و “WelcomeMessage” را به “Welcome to the ProjectConfigurationDemo Home Page (Azure)” تغییر دادیم. بنابراین به راحتی میتوانیم تغییر را ببینیم.

حالا به کد برگردیم و اپلیکیشن خود را به key vault متصل کنیم.

افزودن Vault به اپلیکیشن

برای متصل کردن اپلیکیشن خود، باید configuration را کمی توسعه دهیم.

اول باید یک NuGet package را برای پشتیبانی از انضمام KeyVault خود نصب کنیم:

سپس باید مقادیری را که در حین ایجاد vault نوشته بودیم را در appsettings.json خود بنویسیم:

سپس باید برای اتصال، Key Vault را به عنوان یک منبع در کلاس Program اضافه کنیم:

این یک راه استاندارد برای افزودن Azure Key Vault با استفاده از X509 certificate است.

و چون ما اینجا، vault را به عنوان آخرین منبع پیکربندی اضافه کردیم، آن تمام منبعهای قبلی مانند  user secret ها یا متغیرهای محیطی را override خواهد کرد.

حال نتایج کار خود را ببینیم.

اجرای اپلیکیشن

حال اگر برنامه را اجرا کنیم، به واضح میبنیم که عنوان مورد نظر تغییر کرده است:

عنوان در محیط production

عنوان ما حالا (Azure) را در پایان خود نمایش میدهد که این به معنی است که پیکربندی را با موفقیت از key vault خوانده ایم.

برای اینکه این راه حل ما بهتر هم به نظر برسد، برنامه خود را فقط به افزودن key vault در محیط production محدود میکنیم:

حالا وقتی برنامه را به طور local اجرا میکنیم، از user secret های تعریف شده در secrets.json استفاده خواهیم کرد و در محیط production از secret های Azure Key Vault استفاده میکنیم.

تمام. عالی بود. درسته؟!

نتیجه گیری

در این مقاله، نحوه ایجاد یک  Azure Key Vault برای ذخیره secret ها برای یک محیط production را یاد گرفتیم. ما یاد گرفتیم که چطور vault را از برنامه متصل کنیم و اینکه چطور از key vault فقط زمانیکه برنامه در محیط production اجرا میشود استفاده کنیم.

این قسمت، مجموعه سری آموزش پیکربندی ASP.NET Core را تکمیل کرد و دیگر قسمتهای این سری از آموزش سریالی را میتوانید از صفحه  ASP.NET Core Web API پیدا کنید.

نویسنده

امید عباسی
من امید عباسی هستم. سالهاست که در زمینه برنامه نویسی با تکنولوژی دات نت فعالیت میکنم و عاشق این هستم که تجربیات و دانش خودم را در این زمینه با دیگران به اشتراک بزارم. خیلی دوست دارم که نظر و انتقاد خودتون رو در مورد این نوشته برای من بنویسید تا بتونم در آینده، مطالب بهتر و ارزشمندتری را برای شما فراهم کنم. در صورت داشتن هرگونه سوال هم در قسمت دیدگاه ها میتونید با بنده در ارتباط باشید