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タスクをFlowerで管理する際には、セキュリティが重要な考慮事項となります。デフォルトでは、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{}.*)$".format(cls.url_prefix), cls.as_view()
        )

 

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

Subscribe

Subscribe to our newsletter and never miss out lastest news.