Encrypt Mongodb - Dựa vào Authentication và Authorization - Part 2

Nội dung bài viết

Qua bài viết đầu tiên về Series bảo mật hệ thống cơ sở dữ liệu mà cụ thể là Mongodb thì tôi được nghe những phản hồi tích cực từ những anh em hay theo dõi page Tips Javascript.

Phần 1: Encrypt Mongodb - Từ người mới cho đến người cũ đều vỗ tay

Phần 2: Encrypt Mongodb - Dựa vào Authentication và Authorization

Nhưng có một điều khá rõ ràng và thành thật mà nói, topic này không phù hợp với sinh viên và những bạn mới có ít kinh nghiệm, vì những anh em trên có thể không đánh giá cao những vấn đề mà khóa học đang cố gắng giải quyết. Chỉ khi bạn đã tự mình tham gia vào quá trình phát triển các dự án lớn và các nhóm lớn có kinh nghiệm, bạn mới có thể cảm nhận được tại sao bảo mật dữ liệu lại quan trọng và khó thực hiện đến như vậy.

MongoDB security - Tóm tắt phần 1

Ở phần 1 chúng ta nói đến vì sao ngày nay lại xem vấn đề bảo mật cơ sở dữ liệu (CSDL) lên hàng đầu. Nó xuất phát từ nhiều lý do trong đó then chốt là kỷ nguyên chuyển đổi số. Và sau đó là 4.0 xuất hiện giày đặc từ nông dân đến doanh nhân đều đưa sản phẩm lên network và rồi số lượng ứng dụng ra đời càng nhiều. Chính vì vậy bảo mật dữ liệu được đặt lên hàng đầu. Và biện pháp thứ nhất về bảo mật được gợi ý ở bài trước.

Authentication và Authorization

Sau khi bạn setup được vấn đề hạn chế truy cập Mongodb với ip thì tiếp đến chúng ta sẽ đi tới thực hiện bước tiếp theo với hai khái niệm thân quen trong lập trình đó là Authentication và Authorization. Để nói sơ qua về 2 khái niệm này thì tôi lấy một ví dụ thực tế.

Đầu tiên bạn muốn vào nhà thì đương nhiên bạn phải có chìa khoá để xác nhận là phải là bạn hay không? Đó làAuthentication.

Sau khi bạn vào nhà thành công thì, bạn được phép lên lầu 1 hay chỉ ở tầng trệt thôi. Đó là Authorization.

2 quy trình nhìn thì như nhau nhưng thức chất nó rất khách nhau, bạn có thể tìm hiểu thêm ở bài viết trước đây. Về phần xác thực (Authentication) thì nó có 3 điểm cần lưu ý đó là xác thực 1 yếu tố, 2 yếu tố, và đa yếu tố. Hy vọng có thời gian chúng ta nói thêm.

MongoDB authentication

Trên kia là khái niệm về xác thực và uỷ quyền trong lập trình. Vậy trong Mongodb thì nó sẽ được triển khai như thế nào?

MongoDB có một số cơ chế cho phép bạn xác thực người dùng, với cơ chế mặc định là Salted Challenge Response Authentication Mechanism (SCRAM) tuy nhiên phiên bản hợp lệ support là > 4.0 nhé mấy anh em. SCRAM là gì?

SCRAM là một dịch vụ liên quan đến việc MongoDB đọc và xác minh thông tin xác thực do người dùng cung cấp dựa trên sự kết hợp của tên người dùng, mật khẩu và cơ sở dữ liệu xác thực của họ, tất cả đều được biết bởi phiên bản MongoDB nhất định. Nếu bất kỳ thông tin đăng nhập nào của người dùng không khớp với những gì cơ sở dữ liệu Mongo mong đợi, cơ sở dữ liệu sẽ không xác thực người dùng và họ sẽ không có quyền truy cập cho đến khi họ xuất trình đúng tên người dùng, mật khẩu và cơ sở dữ liệu xác thực.

Bạn cũng có thể sử dụng tệp văn bản để hoạt động như một mật khẩu được chia sẻ cho một nhóm các cá thể MongoDB được kết nối, chẳng hạn như nhóm bản sao hoặc cụm phân đoạn. Phương pháp này, được gọi là xác thực tệp khóa (keyfile authentication) , được coi là một hình thức bảo mật tối thiểu và phù hợp nhất cho môi trường thử nghiệm hoặc phát triển, như tài liệu MongoDB khuyến khích.

Đối với các môi trường sản xuất triển khai sharding hoặc replication mongodb, tài liệu MongoDB khuyên bạn nên sử dụng cơ chế xác thực khác: Authentication x.509 . Điều này liên quan đến việc phân phối các chứng chỉ x.509 hợp lệ - tự ký hoặc có được từ cơ quan cấp chứng chỉ bên thứ ba - cho các thành viên hoặc khách hàng của cụm dự kiến. Tuy nhiên, chúng khác với các tập tin khóa, ở chỗ mỗi máy có certificates x.509 chuyên dụng của riêng nó. Điều này có nghĩa là chứng chỉ của một máy sẽ chỉ hữu ích cho việc xác thực máy đó.

Sử dụng authentication c x.509 thúc đẩy một khái niệm được gọi là xác thực lẫn nhau . Điều này có nghĩa là khi một máy khách hoặc thành viên cụm xác thực chính họ với máy chủ, máy chủ cũng đang tự xác thực với máy khách hoặc thành viên cụm. Nếu máy khách hoặc thành viên cụm cố gắng kết nối với máy chủ cơ sở dữ liệu có chứng chỉ x.509 không hợp lệ, nó sẽ bị ngăn không cho làm như vậy vì xác thực lẫn nhau sẽ không thành công.

MongoDB authorization

MongoDB quản lý ủy quyền thông qua một khái niệm bảo mật máy tính được gọi là kiểm soát truy cập dựa trên vai trò . Bất cứ khi nào bạn tạo người dùng MongoDB, bạn có tùy chọn cung cấp cho họ một hoặc nhiều vai trò . Vai trò xác định người dùng có những đặc quyền nào, bao gồm những hành động nào họ có thể thực hiện trên cơ sở dữ liệu, bộ sưu tập, bộ sưu tập hoặc cụm nhất định. Khi bạn gán vai trò cho người dùng, người dùng đó sẽ nhận được tất cả các đặc quyền của vai trò đó. Nếu bạn muốn thực hành ngay thì bạn có thể đi đến bài viết nàyvà làm theo.

MongoDB đi kèm với một số vai trò tích hợp cung cấp các đặc quyền thường cần thiết. Một vài trong số này có sẵn cho mọi cơ sở dữ liệu, nhưng hầu hết chỉ có sẵn cho admincơ sở dữ liệu, vì chúng nhằm cung cấp các đặc quyền quản trị mạnh mẽ. Ví dụ: bạn có thể gán vai trò readWrite cho người dùng trên bất kỳ cơ sở dữ liệu nào, nghĩa là bạn có thể đọc và sửa đổi dữ liệu được giữ trong bất kỳ cơ sở dữ liệu nào trên hệ thống của mình miễn là bạn đã cấp cho người dùng readWritevai trò đó. Tuy nhiên, vai trò readWriteAnyDatabase - cho phép người dùng đọc và sửa đổi dữ liệu trên bất kỳ cơ sở dữ liệu nào ngoại trừ localvà config- chỉ khả dụng trong admincơ sở dữ liệu, vì nó cung cấp các đặc quyền hệ thống rộng hơn.

Ngoài các vai trò được tích hợp sẵn, Mongo cũng cho phép bạn xác định các vai trò tùy chỉnh, giúp bạn kiểm soát nhiều hơn những tài nguyên mà người dùng có thể truy cập trên hệ thống của bạn. Giống như người dùng, các vai trò được thêm vào một cơ sở dữ liệu cụ thể. Ngoài các vai trò được tạo trong admincơ sở dữ liệu, có thể bao gồm các đặc quyền đối với bất kỳ cơ sở dữ liệu nào trong hệ thống, các đặc quyền của vai trò do người dùng xác định chỉ áp dụng cho cơ sở dữ liệu mà vai trò được tạo. Như đã nói, một vai trò có thể bao gồm một hoặc nhiều vai trò hiện có trong định nghĩa của nó và một vai trò có thể kế thừa các đặc quyền từ các vai trò khác trong cùng một cơ sở dữ liệu.

Với quyền kiểm soát chi tiết như vậy đối với các đặc quyền của người dùng, bạn có thể thiết lập người dùng chuyên dụng để thực hiện các chức năng nhất định, chẳng hạn như quản trị viên cụm để quản lý các nhóm bản sao và các cụm phân đoạn hoặc quản trị viên người dùng để tạo và quản lý người dùng và các vai trò tùy chỉnh. Loại chiến lược quản lý người dùng này cũng có thể giúp tăng cường bảo mật cho hệ thống của bạn, vì nó làm giảm số lượng người dùng có đặc quyền rộng rãi.

Bài viết nên quan tâm

Cách bảo mật MongoDB trên Ubuntu 20.04

Thiết lập Setup replica set mongodb

Bài viết có sự tham khảo:

MongoDB's Built-in Authentication and Authorization Methods

Có thể bạn đã bị missing