راهنمای کارفرما به‌روزرسانی ۱۴۰۵/۰۵/۲۷ ۱۴ دقیقه

تدوین و انتشار توسط

مدیریت کلید API و Secrets در نرم‌افزار؛ چک‌لیست ذخیره، چرخش و ابطال

Secret فقط یک رشته محرمانه در فایل تنظیمات نیست؛ یک دارایی با مالک، دامنه دسترسی، محیط، تاریخ ایجاد، مسیر مصرف و برنامه ابطال است. نبود این اطلاعات باعث می‌شود نشت کلید دیر تشخیص داده شود و تعویض آن به توقف سرویس منجر شود.

تصویر راهنمای مدیریت کلید API و Secrets در نرم‌افزار؛ چک‌لیست ذخیره، چرخش و ابطال

پاسخ کوتاه

کلید API و Secret را در کد منبع، Git، فایل قابل دانلود، برنامه سمت کاربر یا Log نگه ندارید. آن‌ها را در Secret Manager یا Vault متمرکز، هنگام اجرا تزریق، برای هر سرویس و محیط جدا، با کمترین Scope و مدت لازم صادر کنید. Inventory، مالک و زمان انقضا داشته باشید؛ Rotation را با هم‌پوشانی کوتاه کلید قدیم و جدید آزمایش کنید و برای رخداد، مسیر ابطال فوری، جایگزینی، جست‌وجوی محل افشا و بررسی Log تعریف کنید.

کلیدی که مالک، Scope و محل مصرفش معلوم نیست، قابل چرخش و پاسخ‌گویی نیست.
Secret Manager خطر را حذف نمی‌کند؛ دسترسی، Audit، Backup و فرایند بازیابی آن نیز باید طراحی شود.
برای انتشار پکیج NuGet، Trusted Publishing اعتبارنامه کوتاه‌عمر را جایگزین API Key بلندعمر می‌کند.

اول بدانید چه Secretهایی دارید و چه کسی مالک آن‌هاست

نوع و شناسه

پرسش لازم
API Key، Token، Client Secret یا Certificate؟
ریسک نبودن
رفتار یکسان با اعتبارنامه‌های متفاوت

مالک

پرسش لازم
چه تیمی می‌تواند تمدید یا ابطال کند؟
ریسک نبودن
توقف هنگام خروج فرد یا رخداد

مصرف‌کننده

پرسش لازم
کدام سرویس و محیط از آن استفاده می‌کند؟
ریسک نبودن
تعویض کور و خرابی وابستگی

Scope

پرسش لازم
به کدام عملیات و منبع دسترسی دارد؟
ریسک نبودن
دسترسی بیش از نیاز

چرخه عمر

پرسش لازم
چه زمانی ساخته، منقضی و چرخانده می‌شود؟
ریسک نبودن
اعتبارنامه فراموش‌شده و بلندعمر

Secret را کجا ذخیره و چگونه مصرف کنیم؟

  • در Production از Vault یا Secret Manager با کنترل دسترسی و Audit استفاده کنید.
  • Secret را هنگام اجرا یا استقرار تزریق کنید؛ آن را داخل Image، Artifact یا کد Build نکنید.
  • کلیدهای محیط توسعه، آزمایش و Production را کاملاً جدا نگه دارید.
  • دسترسی خواندن Secret را فقط به Workload و افراد ضروری بدهید.
  • مقدار Secret را در Log، Trace، خطا، Analytics و Ticket ماسک کنید.
  • برای موبایل و مرورگر فرض کنید هر مقدار جاسازی‌شده قابل استخراج است؛ عملیات حساس باید سمت سرور انجام شود.
  • در صورت پشتیبانی سرویس، Workload Identity یا اعتبارنامه کوتاه‌عمر را به Secret ثابت ترجیح دهید.

نکته: فایل محیطی می‌تواند برای توسعه محلی کنترل‌شده مفید باشد، اما نباید Commit شود و به‌تنهایی جای Secret Manager، سیاست دسترسی و Audit در Production را نمی‌گیرد.

کلید را محدود کنید تا اثر نشت کوچک بماند

Scope

تصمیم مناسب
فقط عملیات و منابع لازم
مثال ریسک
کلید انتشار به حذف یا مدیریت حساب هم دسترسی دارد

محیط

تصمیم مناسب
کلید جدا برای Dev، Test و Production
مثال ریسک
نشت لپ‌تاپ به Production راه می‌دهد

هویت

تصمیم مناسب
کلید جدا برای هر سرویس یا Pipeline
مثال ریسک
مشخص نیست کدام مصرف‌کننده عامل رخداد است

زمان

تصمیم مناسب
انقضا و Rotation متناسب با ریسک
مثال ریسک
کلید سال‌ها پس از پایان پروژه معتبر می‌ماند

شبکه و منبع

تصمیم مناسب
محدودیت IP یا Origin در صورت امکان
مثال ریسک
کلید از هر محل قابل سوءاستفاده است

Rotation را بدون توقف سرویس طراحی کنید

تعویض امن فقط تولید یک کلید جدید نیست. سامانه باید بتواند کلید جدید را دریافت کند، سلامت اتصال را بسنجد و سپس کلید قبلی را در بازه کوتاه و کنترل‌شده باطل کند.

  • همه مصرف‌کنندگان و وابستگی‌های کلید فعلی را از Inventory استخراج کنید.
  • کلید جدید را با همان Scope لازم و نه بیشتر صادر کنید.
  • آن را در Vault ثبت و نسخه استقرار را بدون افشای مقدار به‌روز کنید.
  • Health Check و عملیات واقعی کم‌خطر را با کلید جدید آزمایش کنید.
  • مصرف کلید قدیم را در Log و Audit بررسی کنید.
  • پس از پایان بازه هم‌پوشانی، کلید قبلی را باطل و نتیجه را ثبت کنید.
  • در صورت شکست، مسیر Rollback کوتاه و مسئول تصمیم مشخص داشته باشید.

اگر Secret افشا شد، Rotation برنامه‌ریزی‌شده کافی نیست

  • کلید را فوراً باطل یا دسترسی آن را محدود کنید و جایگزین امن بسازید.
  • Repository، تاریخچه Git، Artifact، Log، Ticket و پیام‌رسان را برای محل افشا بررسی کنید.
  • Audit Log سرویس مقصد را برای زمان، IP، عملیات و دسترسی غیرعادی تحلیل کنید.
  • دامنه داده و سامانه‌های در معرض خطر را مشخص و Incident را مستند کنید.
  • فقط حذف مقدار از آخرین Commit کافی نیست؛ کلید افشاشده باید نامعتبر شود.
  • کنترل پیشگیرانه مانند Secret Scanning، Hook و محدودیت Scope را اصلاح کنید.

چک‌لیست قرارداد و تحویل مدیریت Secrets

  • حساب سرویس، Vault و دامنه تحت مالکیت کارفرما باشد.
  • Inventory بدون نمایش مقدار Secret تحویل شود.
  • ماتریس دسترسی، مسئول تأیید و فرایند خروج افراد ثبت شود.
  • روش استقرار، Rotation، ابطال اضطراری و بازیابی مستند باشد.
  • کلیدهای توسعه‌دهنده و مجری پیش از پایان همکاری حذف یا تعویض شوند.
  • تاریخ آخرین Rotation و برنامه بعدی برای کلیدهای باقی‌مانده مشخص باشد.
  • Secret Scanning و جلوگیری از چاپ مقدار در CI و Log فعال باشد.

پرسش‌های متداول

آیا Base64 یا رمزکردن مقدار در فایل تنظیمات کافی است؟

خیر. Base64 محرمانگی ایجاد نمی‌کند و رمزنگاری بدون مدیریت امن کلید فقط مسئله را جابه‌جا می‌کند. محل امن، هویت مصرف‌کننده، دسترسی و Audit باید با هم طراحی شوند.

هر چند وقت یک‌بار API Key را بچرخانیم؟

یک عدد ثابت برای همه مناسب نیست. حساسیت دسترسی، پشتیبانی سرویس از انقضا، امکان Automation و الزامات قراردادی را در نظر بگیرید؛ در رخداد یا تغییر مالک باید فوراً اقدام شود.

آیا کلید API را می‌توان داخل اپ موبایل یا JavaScript گذاشت؟

برای دسترسی محرمانه خیر؛ کاربر می‌تواند مقدار جاسازی‌شده را استخراج کند. عملیات حساس را به Backend منتقل و برای Client از سازوکار محدود و قابل ابطال استفاده کنید.

Trusted Publishing در NuGet چه تفاوتی دارد؟

به‌جای نگهداری API Key بلندعمر در CI، هویت Pipeline تأیید و یک API Key کوتاه‌عمر هنگام انتشار درخواست می‌شود. طبق مستند NuGet این کلید موقت یک ساعت اعتبار دارد.

برای ادامه مسیر، صفحه خدمت مرتبط، نمونه‌کار و راهنماهای مکمل را ببینید.

منابع و مبنای تدوین

این راهنما با استفاده از مستندات فنی و منابع تخصصی زیر تدوین شده است. تصمیم نهایی هر پروژه باید با داده‌ها، قرارداد و شرایط واقعی همان سازمان تطبیق داده شود.

قبل از نشت یا قطع سرویس، چرخه عمر Secretها را روشن کنید

معماری، Pipeline و سرویس‌های بیرونی را توضیح دهید تا Inventory، دسترسی و برنامه امن Rotation بررسی شود.

درخواست بررسی فنی و امنیتی