Apache Ecosystem

Apache Superset: پیاده‌سازی امنیت سطح ردیف و SSO برای تحلیل‌های چند مستأجری امن

با بزرگ‌شدن سازمان‌های داده‌محور، نیاز به کنترل دسترسی امن و دقیق در پلتفرم‌های بصری‌سازی حیاتی می‌شود. Apache Superset یک پلتفرم قدرتمند و مدرن برای اکتشاف و بصری‌سازی داده است، اما به صورت پیش‌فرض، همه کاربران را با نقش‌های استاندارد RBAC مدیریت می‌کند. برای محیط‌های چند مستأجری—مانند ارائه‌دهندگان SaaS که به مشتریان مختلف خدمت می‌کنند یا سازمان‌های بزرگ با تیم‌های منطقه‌ای متمایز—شما به چیزی فراتر از مجوزهای ساده «می‌تواند مشاهده کند» یا «می‌تواند ویرایش کند» نیاز دارید. شما به امنیت سطح ردیف (RLS) در ترکیب با مدیریت هویت امن از طریق ورود یکپارچه (SSO) نیاز دارید.

این راهنما توسعه‌دهندگان متوسط تا پیشرفته را از طریق پیاده‌سازی عملی این ویژگی‌ها برای اطمینان از جداسازی داده‌ها و احراز هویت متمرکز راهنمایی می‌کند.

درک معماری

مدل امنیتی Superset بر اساس نقش‌ها و مجوزها ساخته شده است. RLS به شما امکان می‌دهد محدود کنید که یک کاربر کدام ردیف‌های داده را در یک مجموعه داده خاص می‌تواند ببیند. SSO، Superset را با ارائه‌دهنده هویت سازمانی شما (مانند Keycloak، Okta یا Azure AD) یکپارچه می‌کند تا احراز هویت را به صورت خارجی مدیریت کند، پراکندگی رمزهای عبور را کاهش دهد و وضعیت امنیتی را بهبود بخشد.

پیکربندی ورود یکپارچه (SSO)

Superset از پروتکل‌های مختلف SSO پشتیبانی می‌کند، که OpenID Connect (OIDC) رایج‌ترین آن‌هاست. برای پیاده‌سازی SSO، باید فایل superset_config.py را پیکربندی کنید. در زیر یک مثال عملی با استفاده از یک ارائه‌دهنده OIDC آورده شده است.

# superset_config.py

AUTH_TYPE = "oid"
OAUTH_REMOTE_APP = {
    "client_id": "your-client-id",
    "client_secret": "your-client-secret",
    "auth_uri": "https://your-idp.example.com/auth",
    "token_uri": "https://your-idp.example.com/token",
    "api_base_url": "https://your-idp.example.com/",
    "userinfo_uri": "https://your-idp.example.com/userinfo",
    "request_token_params": {},
    "access_token_params": {},
    "authorize_params": {"scope": "openid profile email"},
    "client_kwargs": {"verify_ssl": True},
}

# Map external groups to Superset roles
OAUTH_TO_ROLE = {
    "admin-group": "Admin",
    "analyst-group": "Alpha",  # 'Alpha' is a role you create in Superset
    "viewer-group": "Public",
}

پس از تنظیم این موارد، نمونه Superset خود را مجدداً راه‌اندازی کنید. کاربران اکنون برای ورود به سیستم به IdP شما هدایت می‌شوند و نقش‌های Superset آن‌ها بر اساس عضویت گروهی آن‌ها در IdP به صورت خودکار تخصیص داده می‌شود.

پیاده‌سازی امنیت سطح ردیف (RLS)

RLS هسته جداسازی داده در محیط‌های چند مستأجری است. این ویژگی به شما امکان می‌دهد فیلترهای SQL را تعریف کنید که بر اساس ویژگی‌های کاربر به کوئری‌ها اعمال می‌شوند. در Superset، قوانین RLS در رابط کاربری تعریف می‌شوند، اما می‌توان آن‌ها را به صورت برنامه‌ای برای یکپارچگی در خطوط CI/CD مدیریت کرد.

فرض کنید یک جدول sales با یک ستون region داریم. ما می‌خواهیم نقش alpha فقط داده‌های منطقه 'US' را ببیند.

1. به Databases > Select Database > Row Level Security بروید.

2. یک قانون جدید با تنظیمات زیر ایجاد کنید:

  • نقش: Alpha را انتخاب کنید.
  • مجموعه داده: مجموعه داده sales خود را انتخاب کنید.
  • عبارت SQL فیلتر: region = 'US'

برای RLS پویا و خاص کاربر (مثلاً کاربران فقط می‌توانند داده‌های بخش خود را ببینند)، می‌توانید از قالب‌بندی Jinja2 در عبارت فیلتر برای دسترسی به ویژگی‌های کاربری که از ارائه‌دهنده SSO شما یا هدرهای سفارشی ارسال می‌شوند، استفاده کنید.

# Example Dynamic RLS Filter
# Assumes 'department' is extracted from the user's JWT or profile
{{ current_user.attributes.get('department', 'unknown') }}

بهترین روش‌ها برای محیط‌های چند مستأجری

  1. جداسازی نقش‌ها: برای هر مستأجر یا بخش، نقش‌های متمایز Superset ایجاد کنید (مثلاً Tenant_A_Verified، Tenant_B_Verified). به یک نقش عمومی «کاربر» تکیه نکنید.
  2. آزمایش گسترده RLS: همیشه قوانین RLS را در یک محیط آزمایشی اعتبارسنجی کنید. یک فیلتر پیکربندی‌نشده می‌تواند منجر به نشت داده یا داشبوردهای خالی شود.
  3. استفاده از نگاشت گروه SSO: تخصیص نقش‌ها را از طریق نگاشت گروه SSO خودکار کنید تا از خطاهای مدیریتی دستی هنگام پیوستن کاربران جدید جلوگیری شود.
  4. گزارش‌های ممیزی: گزارش‌دهی ممیزی Superset را فعال کنید تا ردیابی کنید چه کسی به کدام مجموعه داده‌ها دسترسی داشته است، که به رعایت الزامات و تحقیقات امنیتی کمک می‌کند.

نتیجه‌گیری

پیاده‌سازی امنیت سطح ردیف و SSO در Apache Superset، آن را از یک ابزار BI ساده به یک پلتفرم تحلیلی سازمانی قوی و مقاوم تبدیل می‌کند. با جدا کردن احراز هویت به یک IdP خارجی و اعمال فیلترهای داده‌ای دقیق در سطح پایگاه داده، اطمینان حاصل می‌کنید که هر کاربر فقط داده‌هایی را می‌بیند که مجاز به مشاهده آن‌هاست. این رویکرد نه تنها امنیت را افزایش می‌دهد، بلکه مدیریت کاربران در محیط‌های پیچیده و چند مستأجری را نیز ساده می‌کند.

با پیکربندی یکپارچه‌سازی SSO خود شروع کنید، سپس قوانین RLS را برای حساس‌ترین مجموعه داده‌های خود اضافه کنید. با قرار گرفتن این دو ستون اصلی، نمونه Superset شما آماده است تا به صورت امن با سازمان شما مقیاس‌پذیر شود.

Share: