Bảo mật Celery Flower với xác thực Django
By hientd, at: 10:04 Ngày 13 tháng 1 năm 2025
Thời gian đọc ước tính: __READING_TIME__ minutes


Bảo mật Celery Flower với hệ thống xác thực Django
Khi quản lý các tác vụ Celery với Flower, bảo mật là một yếu tố cần được xem xét kỹ lưỡng. Theo mặc định, Flower không tích hợp với hệ thống xác thực của Django, dẫn đến việc mở ra nguy cơ truy cập trái phép.
Trong hướng dẫn này, tôi sẽ trình bày cách bảo mật Flower bằng cách sử dụng xác thực Django thông qua việc tận dụng gói django-revproxy
.
Tại sao cần bảo mật Flower?
Flower cung cấp một công cụ giám sát mạnh mẽ cho các tác vụ Celery, nhưng việc để nó bị lộ có thể dẫn đến việc sử dụng sai mục đích hoặc truy cập dữ liệu trái phép. Bảo mật Flower bằng xác thực Django đảm bảo rằng chỉ những người dùng được ủy quyền mới có thể truy cập vào thông tin nhạy cảm liên quan đến tác vụ.
Công cụ và thiết lập
Để đạt được điều này, chúng ta sẽ sử dụng các công cụ sau:
-
django-revproxy: Một gói Django cho phép proxy ngược các yêu cầu đến các dịch vụ bên ngoài.
-
Custom Django View: Một view kiểm tra quyền của người dùng và chuyển tiếp các yêu cầu đến bảng điều khiển Flower.
Cài đặt django-revproxy
Đầu tiên, cài đặt gói django-revproxy
:
pip install django-revproxy
Tham khảo tài liệu django-revproxy để biết thêm chi tiết.
Triển khai
Tạo Proxy View
Chúng ta sẽ tạo một lớp view tùy chỉnh thực hiện các việc sau:
-
Sử dụng
django-revproxy
để proxy các yêu cầu đến bảng điều khiển Flower.
-
Kiểm tra quyền của người dùng để đảm bảo chỉ người dùng siêu quản trị viên mới có thể truy cập Flower.
Đây là phần triển khai:
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>
Cấu hình URL
Tiếp theo, thêm FlowerProxyView
vào cấu hình URL của ứng dụng:
from django.urls import include, path
from . import views
app_name = "misc"
urlpatterns = [
...
views.FlowerCustomProxyView.as_url(),
]
Cấu hình cài đặt
Đảm bảo rằng các cài đặt sau được thêm vào dự án Django của bạn:
FLOWER_URL = "http://localhost:5555"
FLOWER_URL_PREFIX = "flower"
Kiểm thử
Khởi động máy chủ phát triển Django của bạn:
python manage.py runserver
Khởi động Flower:
celery -A your_project flower
Điều hướng đến http://localhost:5555
/flower
trên trình duyệt của bạn. Đảm bảo bạn đã đăng nhập với tư cách là người dùng siêu quản trị viên để truy cập bảng điều khiển.
Những suy nghĩ khác
-
Hạn chế truy cập theo IP: Để tăng cường bảo mật, hãy xem xét việc hạn chế truy cập vào bảng điều khiển Flower theo địa chỉ IP.
-
SSL/TLS: Sử dụng HTTPS để mã hóa dữ liệu đang truyền khi truy cập bảng điều khiển Flower.
-
Hạn chế tốc độ: Thực hiện hạn chế tốc độ để ngăn chặn việc lạm dụng.
-
Nhật ký kiểm toán: Nhật ký các lần truy cập để theo dõi việc sử dụng.
Kết luận
Bảo mật Flower với xác thực Django là một cách đơn giản nhưng hiệu quả để bảo vệ dữ liệu tác vụ Celery của bạn. Bằng cách tích hợp django-revproxy
và một view tùy chỉnh dựa trên quyền, bạn có thể đảm bảo rằng chỉ những người dùng được ủy quyền mới có quyền truy cập vào bảng điều khiển Flower của bạn.
Bạn đã triển khai các biện pháp bảo mật tương tự chưa? Hãy chia sẻ suy nghĩ của bạn trong phần bình luận bên dưới!