OIDC workload identity؛ احراز هویت بدون API key در Trigger.dev چگونه کار می‌کند؟

چرا مهم است

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

قبل از خواندن، این‌ها را بدان۵ مفهوم
token

داده‌ای که برای اثبات هویت یا اجازه دسترسی ارائه می‌شود و می‌تواند مقصد، محدوده استفاده و زمان انقضا داشته باشد.

بیشتر: token

workload identity

روشی برای اثبات هویت کد در حال اجرا، مانند یک کار خودکار، تا بتواند با هویت مشخص به سرویس دیگری دسترسی بگیرد.

در حال نگارش: workload identity

trust policy

مجموعه قواعدی که مشخص می‌کند کدام هویت‌ها و تحت چه شرایطی اجازه دسترسی یا استفاده از یک نقش را دارند.

در حال نگارش: trust policy

OIDC

مخفف OpenID Connect؛ استاندارد هویت بر پایه OAuth 2.0 که از token امضاشده و انتشار کلید عمومی برای تأیید هویت استفاده می‌کند.

در حال نگارش: OIDC

JWT

مخفف JSON Web Token؛ قالبی شامل header،؜ داده‌های JSON درباره هویت یا دسترسی، و امضا که این بخش‌ها با نقطه از هم جدا می‌شوند.

در حال نگارش: JWT

Trigger.dev پشتیبانی از OIDC workload identity را اضافه کرده است؛ روشی که در آن پلتفرم اجرای کد، هویت آن را با یک token امضاشده و کوتاه‌عمر تأیید می‌کند. OIDC استانداردی برای هویت بر پایه OAuth 2.0 است و workload identity از سازوکار امضا و انتشار کلیدهای آن برای کد در حال اجرا استفاده می‌کند.

API key‌ها معمولاً عمر طولانی دارند و گاهی دسترسی‌شان از نیاز کار گسترده‌تر است. اگر یک کلید میان چند سرویس مشترک باشد، لغو آن هم دشوار می‌شود. AI agent دارای دسترسی اجرای فرمان نیز می‌تواند فایل یا متغیر محیطی حاوی کلید را بخواند؛ در این حالت کلید ممکن است وارد context،؜ سرویس ارائه‌دهنده مدل و log جلسه شود. token کوتاه‌عمر که برای یک سرویس مشخص صادر شده، ارزش کمتری نسبت به کلید چندماهه دارد.

در این سازوکار سه نقش وجود دارد: پلتفرم اجرا token را صادر و امضا می‌کند، کد آن را درخواست می‌کند و سرویس مقصد اعتبارش را می‌سنجد. اعتماد از قبل در سمت مقصد تنظیم می‌شود. صادرکننده کلید خصوصی را نزد خود نگه می‌دارد و کلید عمومی را منتشر می‌کند؛ بنابراین دو سرویس نیازی به اشتراک یک secret ندارند.

token از نوع JWT است و اطلاعاتی مانند صادرکننده در iss،؜ هویت کد در sub و مقصد در aud دارد. سرویس مقصد علاوه بر امضا و الگوریتم مورد انتظار، صادرکننده، مقصد، زمان انقضا و تطابق اطلاعات با trust policy را بررسی می‌کند. بررسی aud به‌تنهایی کافی نیست: اگر sub بررسی نشود، ممکن است هر repository متعلق به یک صادرکننده مشترک مانند GitHub پذیرفته شود.

پشتیبانی از OIDC دو معنای متفاوت دارد: صدور token برای دسترسی کد به بیرون، یا پذیرش token از کدی که جای دیگری اجرا می‌شود. Trigger.dev نقش صادرکننده را دارد و سرویسی مانند AWS آن را می‌پذیرد و اطلاعات دسترسی موقت برمی‌گرداند.

در Trigger.dev هر سازمان صادرکننده مخصوص خود را دارد. آدرس صادرکننده و subject محیط از dashboard برداشته می‌شود و در تنظیمات مقصد قرار می‌گیرد. هر نوبت اجرا، از جمله retry،؜ run token مخصوص خود را دارد و فقط نوبت فعال می‌تواند OIDC token بگیرد. این token پنج دقیقه اعتبار دارد؛ کار طولانی می‌تواند دوباره درخواست بدهد. در AWS باید subject دقیق محیط در trust policy ثبت شود تا فقط کارهای همان محیط بتوانند نقش تعیین‌شده را بگیرند.

نکته کلیدی

هنگام تنظیم فقط مقصد را بررسی نکن؛ هویت کد را هم دقیق محدود کن. در غیر این صورت ممکن است کد دیگران هم پذیرفته شود؛ در Trigger.dev مقدار هویت محیط را دقیقاً از صفحه تنظیمات بردار.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۴)