Django認証によるCelery Flowerのセキュリティ保護

By hientd, at: 2025年1月13日10:04

Estimated Reading Time: __READING_TIME__ minutes

Securing Celery Flower with Django Authentication
Securing Celery Flower with Django Authentication

Celery FlowerDjango認証によるセキュリティ強化


FlowerでCeleryタスクを管理する際には、セキュリティが重要な考慮事項となります。デフォルトでは、FlowerはDjangoの認証システムと統合されていないため、不正アクセスに対して脆弱です。

このガイドでは、django-revproxyパッケージを利用してDjango認証を使用してFlowerをセキュリティで保護する方法を説明します。

 

Flowerのセキュリティ強化の理由


FlowerはCeleryタスクの強力な監視ツールを提供しますが、公開されたままにしておくと、悪用や不正なデータアクセスにつながる可能性があります。Django認証でFlowerをセキュリティで保護することで、権限のあるユーザーだけが機密のタスク関連情報にアクセスできるようになります。

 

ツールとセットアップ


これを実現するために、次のツールを使用します。
 

  1. django-revproxy:外部サービスへのリクエストをリバースプロキシできるDjangoパッケージ。
     

  2. カスタムDjangoビュー:ユーザーの権限を確認し、Flowerダッシュボードにリクエストを転送するビュー。

 

django-revproxyのインストール

まず、django-revproxyパッケージをインストールします。

pip install django-revproxy

 

詳細については、django-revproxyのドキュメントを参照してください。

 

実装


プロキシビューの作成


次のようなカスタムビュークラスを作成します。
 

  • django-revproxyを使用して、Flowerダッシュボードへのリクエストをプロキシします。
     

  • スーパーユーザーのみがFlowerにアクセスできるように、ユーザーの権限を確認します。
     

実装は以下のとおりです。

from django.conf import settings
from django.contrib.auth.mixins import UserPassesTestMixin
from django.urls import re_path
from revproxy.views import ProxyView

class FlowerCustomProxyView(UserPassesTestMixin, ProxyView):
    upstream = settings.FLOWER_URL
    url_prefix = settings.FLOWER_URL_PREFIX
    rewrite = ((r"^/{}$".format(url_prefix), r"/{}/".format(url_prefix)),)

    def test_func(self):
        return self.request.user.is_superuser

    @classmethod
    def as_url(cls):
        return re_path(
            r"^(?P<path>{}.*)$".format(cls.url_prefix), cls.as_view()
        )</path>

 

URLの設定

次に、アプリのURL設定にFlowerProxyViewを追加します。

from django.urls import include, path
from . import views


app_name = "misc"
urlpatterns = [
    ...
    views.FlowerCustomProxyView.as_url(),
]

 

設定の構成

Djangoプロジェクトに次の設定を追加してください。

FLOWER_URL = "http://localhost:5555"
FLOWER_URL_PREFIX = "flower"

 

テスト


Django開発サーバーを起動します。

python manage.py runserver


Flowerを起動します。

celery -A your_project flower


ブラウザでhttp://localhost:5555/flowerにアクセスします。ダッシュボードにアクセスするには、スーパーユーザーとしてログインしていることを確認してください。

 

さらなる考察
 

  1. IPによるアクセス制限:セキュリティを強化するために、IPアドレスでFlowerダッシュボードへのアクセスを制限することを検討してください。
     

  2. SSL/TLS:Flowerダッシュボードにアクセスする際のデータの転送を暗号化するために、HTTPSを使用してください。
     

  3. レート制限:悪用を防ぐために、レート制限を実装してください。
     

  4. 監査ログ:使用状況を監視するために、アクセス試行をログに記録してください。

 

結論


Django認証でFlowerをセキュリティで保護することは、Celeryタスクデータを保護するためのシンプルながらも効果的な方法です。django-revproxyとカスタムの権限ベースのビューを統合することで、権限のあるユーザーだけがFlowerダッシュボードにアクセスできるようになります。

同様のセキュリティ対策を実装したことがありますか? ご意見をコメント欄で共有してください!

Tag list:
- Secure Celery Flower
- Celery Flower security
- Django permissions for Flower
- Django authentication for Flower
- django-revproxy example
- Django superuser Flower access
- Flower reverse proxy setup
- Celery task monitoring security
- How to secure Flower monitoring
- Protect Flower dashboard

Related

Django Outsourcing

Read more
Django Developer Life

Read more
Subscribe

Subscribe to our newsletter and never miss out lastest news.