جلوگیری از افشای API Key؛ راهنمای امنیت کلید در پروژههای LLM
راهنمای عملی جلوگیری از افشای API Key در پروژههای هوش مصنوعی؛ همراه با مدیریت متغیرهای محیطی، بررسی Git، امنیت سرور و بهترین شیوهها.
پاسخ سریع: API Key مثل رمز عبور حساب شماست. اگر در GitHub، لاگ سرور یا کد منبع منتشر شود، هر کسی میتواند از سهمیه شما سوءاستفاده کند. API Key باید فقط در متغیرهای محیطی ذخیره شود، هرگز در کد قرار نگیرد و قبل از commit بررسی شود.
آخرین دادههای تاریخدار سرویسها در کاتالوگ رایگان LLM قرار دارد.
چرا افشای API Key خطرناک است؟
- مصرف سهمیه: شخص دیگری از سهمیه رایگان شما استفاده میکند
- هزینه: اگر حساب پولی داشته باشید، ممکن است هزینههای بالایی ایجاد شود
- سوءاستفاده: API Key ممکن است برای اهداف نامناسب استفاده شود
- مسدودیت: Provider ممکن است حساب را به دلیل الگوی غیرعادی مسدود کند
رایجترین راههای افشای API Key
۱. قرار دادن در کد منبع
# ❌ اشتباه
api_key = "YOUR_API_KEY_HERE"
# ✅ درست
import os
api_key = os.environ["API_KEY"]
۲. ارسال به GitHub بدون بررسی
.envفایلی است که API Key را نگه میدارد.gitignoreباید.envرا شامل شود- قبل از commit،
git diffرا بررسی کنید
۳. لاگ سرور
- API Key ممکن است در لاگهای HTTP Header ذخیره شود
- لاگها ممکن است به دیگران قابل دسترسی باشند
- از لاگکردن Header Authorization خودداری کنید
۴. متغیرهای محیطی در Docker
docker inspectممکن است متغیرهای محیطی را نشان دهد- از Docker Secrets یا Volume برای فایلهای حساس استفاده کنید
بهترین شیوهها
۱. ذخیره در متغیرهای محیطی
# فایل .env (هرگز commit نشود)
API_KEY=YOUR_API_KEY_HERE
MODEL_NAME=llama-3.1-8b
BASE_URL=https://api.groq.com/openai/v1
# خواندن از متغیرهای محیطی
import os
api_key = os.environ.get("API_KEY")
if not api_key:
raise ValueError("API_KEY is not set")
۲. بررسی .gitignore
مطمئن شوید این خطوط در .gitignore وجود دارند:
.env
.env.local
.env.*.local
۳. بررسی قبل از commit
# بررسی آیا .env در staging هست
git status
# بررسی آیا API Key در کد هست
grep -r "sk-" --include="*.py" --include="*.js" .
grep -r "API_KEY" --include="*.py" --include="*.js" .
۴. استفاده از Secret Manager
برای پروژههای تیمی یا Production:
- AWS Secrets Manager
- Google Secret Manager
- HashiCorp Vault
- GitHub Actions Secrets
۵. چرخش منظم کلید
- هر چند ماه، API Key جدید بسازید
- کلید قدسی را از Provider حذف کنید
- اپلیکیشنها را با کلید جدید بهروز کنید
نکات ویژه برای پروژههای LLM
OpenAI-compatible API
# ✅ درست: از متغیر محیطی
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["API_KEY"],
base_url=os.environ.get("BASE_URL", "https://api.groq.com/openai/v1")
)
چند Provider
اگر از چند Provider استفاده میکنید، هر کلید را در متغیر جداگانه ذخیره کنید:
GROQ_API_KEY=...
TOGETHER_API_KEY=...
FIREWORKS_API_KEY=...
پروژههای دانشجویی
- از API Key شخصی استفاده نکنید
- از Free Tier استفاده کنید
- API Key را در گروه به اشتراک نگذارید
محدودسازی نرخ درخواست و جلوگیری از مصرف بیش از حد
محدودسازی نرخ درخواست اقدامی حیاتی هنگام استفاده از APIهای LLM است. این کار هم بودجه شما و هم رابطه شما با Provider را محافظت میکند. اکثر Providerها سهمیه را در سطح حساب اعمال میکنند و عبور از آن باعث خطای HTTP 429 یا موقتی شدن حساب میشود.
پیادهسازی Rate Limiting در سمت کلاینت
از الگوریتمهای Token Bucket یا Sliding Window استفاده کنید. در Node.js با Express، از middleware مانند express-rate-limit استفاده کنید. تنظیمات windowMs و max را بر اساس محدودیتهای واقعی Provider تنظیم کنید. مثلاً اگر Groq اجازه 30 درخواست در دقیقه میدهد، سقف کلاینت را روی 25 تنظیم کنید تا فضای کافی باقی بماند.
صفبندی درخواستها در سمت سرور
برای برنامههایی که کاربران متعددی را سرویس میدهند، یک صف درخواست پیادهسازی کنید تا درخواستهای API را در طول زمان توزیع کند. این کار مانع از مصرف کل سهمیه توسط یک کاربر میشود و مدل هزینه قابل پیشبینیتری فراهم میکند.
پیکربندی CORS و مبدأهای مجاز
پیکربندی CORS اغلب هنگام افشا کردن endpoints APIهای LLM نادیده گرفته میشود. اگر سرویس پروکسی یا wrapper شما درخواستهای مرورگر را میپذیرد، تنظیمات CORS نادرست میتواند کلیدهای API شما را در معرض وبسایتهای مخرب قرار دهد.
محدود کردن مبدأها
CORS را طوری پیکربندی کنید که فقط از مبدأهای شناختهشده درخواست بپذیرد. هرگز در پروداکشن از Access-Control-Allow-Origin: * استفاده نکنید وقتی endpoint شما نیاز به احراز هویت دارد. در عوض، یک لیست سفید صریح از مبدأهای مجاز نگهداری کنید.
شناسایی و چرخش کلیدهای نشتیافته
حتی با بهترین اقدامات پیشگیرانه، ممکن است کلیدهای API از طریق فایلهای لاگ، پیامهای خطا یا ماشینهای توسعه آلوده فاش شوند. داشتن یک برنامه شناسایی و واکنش ضروری است.
GitHub Secret Scanning
GitHub Secret Scanning را برای مخزنهای خود فعال کنید. وقتی فعال باشد، GitHub بهطور خودکار pushها را برای فرمتهای رمز شناختهشده اسکن میکند. وقتی تطابقی شناسایی شود، GitHub هم شما و هم صادرکننده کلید را مطلع میکند.
نظارت خودکار بر کلیدها
نظارت بر الگوهای غیرعادی استفاده API راهاندازی کنید. اکثر Providerها داشبوردهایی برای حجم درخواستها، نرخ خطاها و توزیع جغرافیایی ارائه میدهند. هشدارهایی برای افزایش ناگهانی استفاده ایجاد کنید.
نقشه راه چرخش کلید
یک فرآیند مستند شده برای چرخش کلید نگهداری کنید. نقشه راه باید شامل نحوه تولید کلید جدید، استقرار آن در همه سرویسها، تأیید عملکرد کلید جدید و حذف کلید قدیمی باشد.
نحوه ثبتنام
برای شروع استفاده از API Key بهصورت امن:
- از کاتالوگ رایگان LLM یک Provider انتخاب کنید
- در وبسایت رسمی Provider ثبتنام کنید
- به بخش API Keys در داشبورد بروید
- یک کلید جدید با نام توصیفی بسازید (مثلاً "پروژه-آزمایشی")
- کلید را فوراً کپی کنید — اکثر Providerها فقط یک بار آن را نمایش میدهند
- آن را در فایل
.envیا Secret Manager سیستم ذخیره کنید - هرگز کلید را در چت، ایمیل یا مخزنهای عمومی به اشتراک نگذارید
اولین درخواست API
پس از ذخیره امن کلید، آن را با یک درخواست ساده تست کنید:
curl -s https://api.groq.com/openai/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "llama-3.1-8b-instant",
"messages": [{"role": "user", "content": "سلام"}],
"max_tokens": 10
}'
اگر پاسخ شامل "choices" باشد، کلید شما کار میکند. اگر خطای 401 دریافت کردید، تنظیمات متغیر محیطی را بررسی کنید.
خطاهای رایج و رفع آنها
| خطا | علت | راهحل |
|---|---|---|
401 Unauthorized | کلید نامعتبر یا منقضی شده | کلید را در داشبورد Provider مجدداً بسازید |
429 Too Many Requests | Rate Limit فعال شده | Exponential Backoff اضافه کنید |
فرمت نامعتبر API key | کلید دارای فاصله یا پیشوند اشتباه | کلید را با دقت مجدداً کپی کنید |
کلید در محیط یافت نشد | متغیر محیطی لود نشده | از dotenv در پایتون استفاده کنید |
خطای CORS در مرورگر | کلید در کد فرانتاند قرار دارد | کلید را به بکاند منتقل کنید |
چه زمانی از این ارائهدهنده استفاده نکنیم
- دستگاههای مشترک: هرگز API Key را در کامپیوترهای عمومی ذخیره نکنید
- شبکههای نامطمئن: بدون HTTPS درخواست API ارسال نکنید
- مخزنهای عمومی: هرگز کلیدهای واقعی را commit نکنید
- برنامههای سمت کلاینت: کلیدها در JavaScript مرورگر همیشه قابل مشاهده هستند
- محیطهای تیمی بدون Secret Manager: فایلهای
.envمشترک خطر افشای کلید ایجاد میکنند
منابع رسمی بررسیشده
- کاتالوگ رایگان LLM — Providerهای تأیید شده با وضعیت دسترسی و سهمیه
- مخزن GitHub — فایلهای منبع و گزارش مشکلات
- OWASP API Security Top 10 — دستورالعملهای استاندارد امنیت
- GitHub Secret Scanning — شناسایی خودکار رمزهای افشا شده
وضعیت ایران و نکات ویژه برای کاربران
- برخی Providerها ممکن است دسترسی API را بر اساس منطقه جغرافیایی ثبت کنند؛ سیاست حریمخصوصی Provider را بررسی کنید
- از VPN یا پروکسی با احتیاط استفاده کنید — برخی Providerها IPهای VPN را مسدود میکنند
- شماره تلفن ایرانی ممکن است برای ثبتنام در همه پلتفرمها پذیرفته نشود
- Providerهایی را در نظر بگیرید که نیاز به کارت بانکی ندارند تا از افشای اطلاعات مالی جلوگیری شود
- استفاده API خود را بهطور منظم پایش کنید — افزایشهای غیرعادی ممکن است نشاندهنده کلید به خطر افتاده باشد
جمعبندی
امنیت API Key یک مسئولیت مستمر است. قبل از هر commit، کد را بررسی کنید. از متغیرهای محیطی استفاده کنید. کلیدها را منظم چرخش دهید.
برای بررسی وضعیت امنیت و دسترسی Providerها، کاتالوگ رایگان LLM را مشاهده کنید. فایلهای منبع و گزارش مشکلات در مخزن GitHub در دسترس هستند.
راهنماهای مرتبط
- [راهنمای تست امن API از ایران](secure-api-testing-iran.md) — نمونه درخواستها و نکات شبکه
- [محدودیت نرخ درخواست و خطای 429](llm-api-rate-limit-429.md) — مدیریت Rate Limit
- [رفع خطاهای 401 و 403 و Model Not Found](fix-llm-api-401-403-model-not-found.md) — عیبیابی کلید و مدل