منطق ایجنت‌ها › M7 — زیرساخت، پلن و هزینه
۷.۵ پایدار تدریسی ~۲۵ دقیقه

کلید و رمز

در یک نگاه

۷.۵.۱

API key چیست

یک API key رشته‌ی بلندی از حرف و عدد است که به یک سرویس می‌گوید «این درخواست از طرف من است، به حساب من». همین.

و مهم‌ترین جمله‌ی این فصل همین اول گفته می‌شود:

به‌خاطر بسپار کلید = رمز + کارت بانکی، در یک رشته. هر کسی که آن را داشته باشد می‌تواند به حساب تو از سرویس استفاده کند — و صورت‌حسابش را تو می‌پردازی. با رمز ایمیلت یکی رفتار کن، نه با یک تنظیم.

سه ویژگی که رفتارِ درست با کلید را روشن می‌کنند:

۷.۵.۲

کجا نگهش داریم

به ترتیب از بهترین به بدترین:

و هیچ‌وقت: داخل خودِ کد، در یک فایل متنیِ روی دسکتاپ، در یادداشتی که با کسی همگام می‌شود، یا در پیامی که به خودت فرستادی.

و یک یادآوری از فصل ۵.۳.۳ که اینجا معنای تازه‌ای می‌گیرد: اگر کلیدی را در گفت‌وگو با ایجنت بنویسی، آن کلید در رونوشتِ متنیِ گفت‌وگو روی دیسک تو هم می‌نشیند. پس «فقط یک بار در چت گذاشتمش» یعنی حالا در یک فایلِ دومِ ناخواسته هم هست.

۷.۵.۳

فایل env

یک فایل متنی ساده به نام .env که سطرهایش این شکل‌اند:

SERVICE_API_KEY=sk-xxxxxxxxxxxx

برنامه‌ها این فایل را می‌خوانند و مقادیرش را برمی‌دارند. مزیتش این است که کلید از کد جدا می‌شود — پس می‌توانی کد را با کسی به اشتراک بگذاری بدون اینکه کلیدت همراهش برود.

ولی این مزیت فقط با یک قاعده برقرار می‌ماند:

به‌خاطر بسپار نام .env باید در فایل .gitignore باشد، وگرنه git آن را هم ثبت می‌کند — و آن‌وقت کلیدت وارد تاریخچه‌ای می‌شود که فصل ۵.۲.۲ گفت نقطه‌هایش پاک نمی‌شوند. یعنی حتی اگر بعداً فایل را حذف کنی، کلید در نسخه‌های قبلی هست.

سه عادتِ همراهش که کار را تمیز می‌کنند:

۷.۵.۴

هرگز چه نکنیم (و چرا این‌قدر جدی است)

چهار کار، و برای هر کدام چرا:

  1. کلید را در کد نگذار. چون کد کپی می‌شود، به اشتراک گذاشته می‌شود، و در تاریخچه می‌ماند. کلید در کد یعنی کلیدی که دیگر کنترلش دستت نیست.
  2. کلید را در تصویر یا اسکرین‌شات نشان نده. این شایع‌ترین لو رفتنِ ناخواسته است — کسی موقع پرسیدن سؤال، عکسِ ترمینالش را می‌فرستد.
  3. کلید را در مخزن عمومی نگذار. و بدان که ربات‌هایی مخصوصاً مخزن‌های عمومی را برای کلید می‌گردند. فاصله‌ی بین «اشتباهی فرستادم» و «استفاده شد» می‌تواند دقیقه باشد، نه روز.
  4. و کلیدت را به کسی نده — حتی برای «یک بار امتحان». اگر واقعاً لازم است، برایش کلید جدا بساز که بتوانی بعداً فقط همان را باطل کنی.

و چرا این‌قدر جدی است؟ چون برخلاف رمز ایمیل، لو رفتنِ کلید بی‌صدا است. کسی به تو خبر نمی‌دهد. اولین نشانه‌اش معمولاً صورت‌حسابی است که با مصرف تو نمی‌خواند — یا سقفی که ناگهان پر شده.

و اگر شک کردی لو رفته، ترتیب کار روشن است و بحث ندارد: اول باطلش کن، بعد بگرد ببین چه شد. باطل‌کردن رایگان و فوری است؛ تحقیق‌کردن وقت می‌برد، و در آن مدت کلید همچنان زنده است.

نکته‌ی طلایی اگر سرویس اجازه می‌دهد، روی کلیدت سقف مصرف بگذار. این تنها محافظتی است که وقتی همه‌ی بقیه شکست خوردند هم کار می‌کند: کلیدِ لو‌رفته با سقفِ ماهانه، حداکثر همان سقف را خرج می‌کند. فصل ۷.۷.۴ باز به این برمی‌گردد.
ضدالگو «کلیدم لو رفت، ولی حسابم مهم نیست، بعداً درستش می‌کنم.» تأخیر اینجا گران‌ترین تصمیم است، چون هزینه‌اش در حال انباشته‌شدن است و تو نمی‌بینی‌اش. باطل‌کردن سی ثانیه است. هیچ دلیلی برای «بعداً» وجود ندارد.

تمرین (فکری)

سه اشتباه رایج در نگهداری کلید را نام ببر — و برای هر کدام بگو چرا اشتباه است، نه فقط اینکه اشتباه است. بعد:

  1. اگر کلیدی داری، همین حالا چک کن کجاست. در فایل env است؟ در .gitignore هست؟
  2. و بگو اگر همین حالا شک کردی لو رفته، قدم اول چیست.
پاسخنامه — سه اشتباه، و آن یکی که کم‌تر گفته می‌شود

۱ — کلید داخل کد. چرا: کد سفر می‌کند (کپی، اشتراک، تاریخچه‌ی git) و کلید همراهش می‌رود. و چون تاریخچه پاک نمی‌شود، حذفِ بعدی هم نجاتت نمی‌دهد.

۲ — فایل env که در .gitignore نیست. چرا: فکر می‌کنی محافظت داری، ولی نداری — و این بدترین حالت است، چون خیالت راحت است. کلید بی‌صدا وارد تاریخچه می‌شود.

۳ — یک کلید برای همه‌چیز. چرا: لو رفتنِ یک مورد، تو را مجبور می‌کند همه‌ی کلید را باطل کنی و همه‌ی کارهایت بخوابند. کلیدهای جدا، دامنه‌ی خرابی را محدود می‌کنند.

قدم اولِ لو رفتن: باطل‌کردن. نه بررسی، نه پرسیدن، نه عوض‌کردن رمز حساب. باطل‌کردن، چون رایگان و فوری است.

و آن اشتباهی که کم‌تر گفته می‌شود: نگه‌داشتنِ کلیدهایی که دیگر استفاده نمی‌کنی. هر کلیدِ فعالی که فراموش شده، یک راهِ باز است که هیچ‌کس حواسش به آن نیست — و چون کارت با آن تمام شده، لو رفتنش را هم متوجه نمی‌شوی. عادتِ درست: هر چند ماه فهرست کلیدهایت را ببین و هر کدام را که یادت نمی‌آید برای چیست، حذف کن. اگر لازم بود، ساختنِ دوباره‌اش یک دقیقه است.

ذخیره شد