Metabase

گواهی SSL

اگر می‌خواهید اینستنس Metabase Cloud یا نسخهٔ self‑hosted متابیس را به یک پایگاه‌داده متصل کنید، می‌توانید اتصال را با استفاده از رمزنگاری SSL (Secure Socket Layer) و یک گواهی، ایمن کنید.

دلایل رایج برای انجام این کار:

  • از Metabase Cloud استفاده می‌کنید و می‌خواهید از هویت انبار داده‌ای که به آن وصل می‌شوید (مثلاً PostgreSQL یا MySQL) مطمئن شوید.
  • متابیس را به‌صورت self‑hosted اجرا می‌کنید و می‌خواهید از هویت انبار داده‌ای که یک ارائه‌دهندهٔ خارجی میزبانی می‌کند اطمینان پیدا کنید. همچنین می‌توانید هنگام اتصال به پایگاه‌دادهٔ اپلیکیشن، از این روش برای استفاده از سخت‌گیرانه‌ترین پارامترهای اتصال بهره بگیرید.

اگر از Metabase Cloud استفاده می‌کنید، پایگاه‌دادهٔ اپلیکیشن شما توسط خود Cloud مدیریت می‌شود؛ بنابراین فقط لازم است اتصال‌هایی را که خودتان به انبارهای دادهٔ خارجی اضافه می‌کنید ایمن کنید.

پیش‌نیازها

یک پایگاه‌داده که از اتصال JDBC پشتیبانی می‌کند، چون باید با استفاده از Connection string، گواهی مورد استفاده را مشخص کنید.

گام ۱: دانلود گواهی Root از ارائه‌دهنده

اگر متابیس را در یک کانتینر Docker اجرا می‌کنید، باید از قبل گواهی‌های AWS و Azure را در اختیار داشته باشید.

این گواهی‌ها در ایمیج Docker متابیس و در مسیر /app/certs/ قرار دارند:

  • AWS RDS: مسیر /app/certs/rds-combined-ca-bundle.pem
  • Azure: مسیر /app/certs/DigiCertGlobalRootG2.crt.pem

اگر به گواهی دیگری نیاز دارید، می‌توانید ایمیج Docker دلخواه خود را بسازید. به صفحهٔ دیتابیس در سایت ارائه‌دهندهٔ خارجی‌تان بروید و لینک دانلود Root Certificate برای اتصال به آن پایگاه‌داده را پیدا کنید.

گام ۲: ذخیره‌سازی گواهی

Self‑hosted

گواهی دانلودشده را در همان دایرکتوری‌ای که فایل metabase.jar را نگه می‌دارید ذخیره کنید. از نظر فنی می‌توانید گواهی را هر کجا قرار دهید، اما نگه‌داشتن آن در همان مسیر metabase.jar یک الگوی خوب است. مسیر این گواهی را در Connection string مشخص خواهید کرد.

Metabase Cloud

ابتدا باید گام ۳: افزودن پایگاه‌داده را انجام دهید.

بعد از آن می‌توانید به Admin > Databases بروید، پایگاه‌دادهٔ مورد نظر را انتخاب کنید، بخش SSL Client Certificate را پیدا کنید و با کلیک روی Select a file گواهی دانلودشده را آپلود کنید.

گام ۳: افزودن پایگاه‌داده

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

گام ۴: فعال‌کردن گزینهٔ "Use a secure connection (SSL)"

اگر پایگاه‌دادهٔ شما از اتصال JDBC پشتیبانی کند، متابیس برای شما فیلدی فراهم می‌کند تا پارامترهای اضافهٔ Connection string را وارد کنید. متابیس این پارامترها را برای برقرارکردن اتصال امن استفاده می‌کند.

گام ۵: افزودن گزینه‌های اضافی به Connection string

باید محل ذخیرهٔ گواهی روی سروری که متابیس روی آن اجرا می‌شود را مشخص کنید.

مثلاً هنگام اتصال به PostgreSQL، معمولاً باید دو پارامتر اضافه کنید:

  • sslmode – می‌توانید لیست کامل مقدارهای مجاز را در مستندات PostgreSQL ببینید. پیشنهاد می‌کنیم از مقدار verify-full استفاده کنید؛ این حالت امن‌ترین است و سربار عملکردی آن ناچیز است.
  • sslrootcert – در این پارامتر مسیر فایل گواهی را مشخص می‌کنید.

برای جداکردن پارامترها در Connection string، بین آن‌ها از علامت & استفاده کنید. مثلاً در فیلد Add additional connection string options می‌توانید چیزی شبیه این بنویسید:

sslmode=verify-full&sslrootcert=/path/to/certificate.pem

مقدار /path/to/certificate.pem را با مسیر کامل گواهی‌ای که از ارائه‌دهندهٔ خود دانلود کرده‌اید جایگزین کنید.

برای اطلاعات بیشتر، بخش پشتیبانی SSL در PostgreSQL را ببینید.

ایمن‌کردن اتصال به پایگاه‌دادهٔ اپلیکیشن با استفاده از متغیرهای محیطی

اگر متابیس را به‌صورت self‑hosted اجرا می‌کنید، می‌توانید اتصال به پایگاه‌دادهٔ اپلیکیشن را با استفاده از متغیرهای محیطی امن کنید.

متغیر محیطی مربوط به این کار MB_DB_CONNECTION_URI است.

در این متغیر باید Connection string کامل را وارد کنید، شامل Host دیتابیس، پورت، نام پایگاه‌داده، اطلاعات کاربر و همچنین پارامترهای اضافه برای اشاره به گواهی. مثلاً:

jdbc:postgresql://db.example.com:port/mydb?user=dbuser&password=dbpassword&ssl=true&sslmode=verify-full&sslrootcert=/path/to/certificate.pem

می‌توانید از Truststore و Keystore به‌صورت هم‌زمان استفاده کنید تا سناریوهای احراز هویت دوطرفه (Mutual authentication) را پیاده‌سازی کنید.

Truststore و Keystore

در برخی پایگاه‌داده‌ها مثل PostgreSQL و Oracle می‌توانید با استفاده از Truststore و Keystore اتصال را ایمن کنید.

Truststore

اگر Truststore برای راستی‌آزمایی گواهی‌ها تنظیم شود، کلاینت (متابیس شما) می‌تواند سرور (پایگاه‌داده) را احراز هویت کند و اطمینان حاصل کند که هویت آن همان است که انتظار می‌رود.

Keystore

اگر از Keystore برای ارائهٔ گواهی‌ها استفاده شود، سرور (پایگاه‌داده) می‌تواند از کلاینت (متابیس شما) بخواهد که با استفاده از آن Keystore خودش را احراز هویت کند. Keystoreها کمتر متداول هستند و در بعضی موارد اصلاً امکان استفاده از آن‌ها وجود ندارد (مثلاً Amazon RDS اجازهٔ استفاده از Keystore را نمی‌دهد). با این حال، اگر زیرساخت را on‑prem میزبانی می‌کنید، ممکن است بخواهید از Keystore برای احراز هویت دوطرفه استفاده کنید.