خداحافظی با پسورد مشترک دیتابیس
خلاصهٔ کاملتر
این پست بلاگ Teleport با یه صحنهٔ آشنا شروع میشه: یه یوزرنیم و پسورد مشترک دیتابیس که دست کل تیمه، و هر دسترسی جدید هم با یه استثنای «فقط همین یه بار» یا یه port forward از روی bastion host حل میشه. نویسنده میگه مشکل اصلی اینجاست که attribution از بین میره، یعنی موقع بررسی حادثه یا ممیزی، لاگ میگه چه اتفاقی افتاده ولی نمیگه کار کی بوده.
چیزی که مقاله پیشنهاد میده cryptographic identity ـه، یعنی هویتی که بهجای یه راز مشترک یا یه محدودهٔ IP، با کلید و گواهی اثبات میشه. تو Teleport هر اتصال به دیتابیس با یه گواهی X.509 کوتاهعمر باز میشه که هویت کاربر داخلش کدگذاری شده. مجوزها از IdP و SSO میان، فقط تا وقتی اون نقش برقراره اعتبار دارن و با انقضای گواهی خودبهخود میپرن. پس دسترسی دائمی یا standing privilege باقی نمیمونه.
از دید کاربر تقریباً هیچی عوض نمیشه. با کلاینت tsh لاگین میکنی و tsh db connect همون psql یا mysql همیشگی رو برات باز میکنه. برای ابزارهای گرافیکی مثل pgAdmin و DBeaver و MongoDB Compass هم Teleport Connect یه پورت لوکال باز میکنه و کلاینت به localhost وصل میشه. یعنی نه VPN لازمه نه دیتابیس باید بره پشت DMZ.
نقشها همون سیاست دسترسیان و مشخص میکنن هر هویت با چه یوزری، به کدوم دیتابیس و با چه سطحی وصل بشه. نویسنده میگه برای دیتابیس حساس بهتره نوشتن رو از خوندن جدا کنی و برای هر session تأیید مجدد با کلید سختافزاری یا Touch ID بخوای:
kind: role
metadata:
name: db-engineer
spec:
allow:
db_users:
- engineer
options:
require_session_mfa: hardware_key_touchهمین قانون برای AI agentها هم صادقه: به گفتهٔ نویسنده ایجنت میتونه کوئری بخونه، ولی نوشتن پشت نقشیه که تأیید فیزیکی یه آدم میخواد. طرف دیگهٔ ماجرا هم لاگ ممیزیه؛ Teleport برای هر کوئری یه رویداد db.session.query میسازه و فیلد teleport_user توش میگه واقعاً کی مسئول بوده، نه فقط یوزر دیتابیس. این لاگ رو میشه به Splunk، Datadog، Elastic یا یه باکت S3 استریم کرد.
نکات کلیدی:
- هر اتصال دیتابیس بهجای پسورد مشترک با یه گواهی X.509 کوتاهعمر باز میشه و با انقضای گواهی دسترسی هم میپره.
- نقشها به IdP و SSO وصلن، پس با تغییر تیم یا خروج آدم، مجوزها خودکار آپدیت میشن.
- گزینهٔ require_session_mfa: hardware_key_touch برای هر session تأیید با کلید سختافزاری یا Touch ID میخواد.
- create_db_user_mode: keep یوزر دیتابیسی که Teleport داینامیک ساخته رو نگه میداره.
- فیلد teleport_user تو رویداد db.session.query آدم یا ایجنت واقعی پشت کوئری رو ثبت میکنه.




