Trong bài đăng này, chúng ta sẽ tìm hiểu cách tạo người dùng mới và quản lý Cấu hình RBAC trên ArgoCD.
Theo mặc định, ArgoCD cung cấp cho bạn một người dùng quản trị có toàn quyền truy cập vào hệ thống. Không có vấn đề gì nếu bạn làm việc một mình, nhưng khi nhóm của bạn mở rộng quy mô, sếp sẽ hỏi bạn: “Có cách nào để các nhà phát triển kiểm tra nhật ký trên ArgoCD mà không cần nhờ bạn giúp đỡ không?”. Bạn không thể cung cấp quản trị viên người dùng cho các nhà phát triển, vì vậy chúng tôi phải tạo một tài khoản người dùng mới và gán cho nó các quyền thích hợp.
Tạo tài khoản mới
Trong ArgoCD việc tạo tài khoản mới khá đơn giản, chúng ta chỉ cần thao tác với ConfigMap có tên là argocd-cm
trong namespace mà chúng ta cài ArgoCD, ví dụ nếu chúng ta cài vào namespace argocd
thì cấu hình mặc định là argocd-cm
như sau :
1 2 3 4 5 6 7 8 9 10 11 | <span class="token key atrule">apiVersion</span> <span class="token punctuation">:</span> v1 <span class="token key atrule">kind</span> <span class="token punctuation">:</span> ConfigMap <span class="token key atrule">metadata</span> <span class="token punctuation">:</span> <span class="token key atrule">name</span> <span class="token punctuation">:</span> argocd <span class="token punctuation">-</span> cm <span class="token key atrule">namespace</span> <span class="token punctuation">:</span> argocd <span class="token key atrule">labels</span> <span class="token punctuation">:</span> <span class="token key atrule">app.kubernetes.io/name</span> <span class="token punctuation">:</span> argocd <span class="token punctuation">-</span> cm <span class="token key atrule">app.kubernetes.io/part-of</span> <span class="token punctuation">:</span> argocd <span class="token key atrule">data</span> <span class="token punctuation">:</span> <span class="token key atrule">url</span> <span class="token punctuation">:</span> https <span class="token punctuation">:</span> //argocd.example.com |
Bạn sao chép cấu hình mặc định và tạo tệp có tên argocd-cm.yaml
sau đó dán đoạn cấu hình trên vào. Tiếp theo, chúng tôi cập nhật argocd-cm để tạo người dùng với tên người dùng hanli.
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token key atrule">apiVersion</span> <span class="token punctuation">:</span> v1 <span class="token key atrule">kind</span> <span class="token punctuation">:</span> ConfigMap <span class="token key atrule">metadata</span> <span class="token punctuation">:</span> <span class="token key atrule">name</span> <span class="token punctuation">:</span> argocd <span class="token punctuation">-</span> cm <span class="token key atrule">namespace</span> <span class="token punctuation">:</span> argocd <span class="token key atrule">labels</span> <span class="token punctuation">:</span> <span class="token key atrule">app.kubernetes.io/name</span> <span class="token punctuation">:</span> argocd <span class="token punctuation">-</span> cm <span class="token key atrule">app.kubernetes.io/part-of</span> <span class="token punctuation">:</span> argocd <span class="token key atrule">data</span> <span class="token punctuation">:</span> <span class="token key atrule">url</span> <span class="token punctuation">:</span> https <span class="token punctuation">:</span> //argocd.example.com <span class="token key atrule">accounts.hanli</span> <span class="token punctuation">:</span> login |
Trong thuộc tính dữ liệu của argocd-cm
ConfigMap, chúng ta khai báo người dùng mà chúng ta muốn tạo, định dạng như sau:
1 2 | <span class="token key atrule">accounts.<username></span> <span class="token punctuation">:</span> <capabilities <span class="token punctuation">></span> |
Mỗi người dùng có thể có hai khả năng:
- apiKey – cho phép tạo mã thông báo xác thực để truy cập API
- đăng nhập – cho phép đăng nhập bằng giao diện người dùng
Trong cấu hình trên, chúng tôi đặt tên cho người dùng là hanli và nó chỉ có thể đăng nhập. Tiếp theo, chúng tôi cập nhật Bản đồ cấu hình.
1 2 | kubectl apply -f argocd-cm.yaml |
ArgoCD sẽ tạo một người dùng mới có tên hanli. Tiếp theo, chúng ta cần đặt mật khẩu cho người dùng hanli để nó có thể đăng nhập vào ArgoCD, chúng ta chạy lệnh sau.
1 2 | argocd account update-password --account hanli --new-password hanli --current-password <span class="token operator"><</span> admin-password <span class="token operator">></span> --grpc-web |
Giá trị của current-password
của quản trị viên. Bây giờ, người dùng hanli có thể đăng nhập vào ArgoCD, mở giao diện người dùng ArgoCD và đăng nhập.
Với tên người dùng và mật khẩu là hanli mà chúng ta đã cấu hình ở trên. Theo mặc định, khi chúng tôi tạo người dùng mới, người dùng đó chỉ có quyền chỉ đọc và không thể thực hiện bất kỳ hành động nào khác. Ví dụ: người dùng hanli cần khởi động lại Triển khai để tất cả các Nhóm của Triển khai đó được cập nhật lên Bản đồ cấu hình mới, nhưng không thể.
Tiếp theo, chúng ta sẽ học cách gán quyền cho người dùng trên ArgoCD.
Cấu hình RBAC
Để thiết lập thêm role RBAC cho người dùng, chúng ta sẽ thao tác với ConfigMap có tên là argocd-rbac-cm
, cấu hình mặc định của nó như sau.
1 2 3 4 5 6 7 8 | <span class="token key atrule">apiVersion</span> <span class="token punctuation">:</span> v1 <span class="token key atrule">kind</span> <span class="token punctuation">:</span> ConfigMap <span class="token key atrule">metadata</span> <span class="token punctuation">:</span> <span class="token key atrule">name</span> <span class="token punctuation">:</span> argocd <span class="token punctuation">-</span> rbac <span class="token punctuation">-</span> cm <span class="token key atrule">namespace</span> <span class="token punctuation">:</span> argocd <span class="token key atrule">data</span> <span class="token punctuation">:</span> <span class="token key atrule">policy.default</span> <span class="token punctuation">:</span> role <span class="token punctuation">:</span> readonly |
Như chúng ta thấy, nó sẽ có một trường policy.default: role:readonly
, trường này sẽ cấp quyền chỉ đọc cho người dùng nếu người dùng đó không được cấp quyền ở bất kỳ đâu. Sao chép và dán nó vào tệp có tên argocd-rbac-cm.yaml
, để cấp quyền cho người dùng, chúng tôi sẽ thêm một trường có tên là policy.csv
như sau:
1 2 3 4 5 6 7 8 9 | <span class="token key atrule">apiVersion</span> <span class="token punctuation">:</span> v1 <span class="token key atrule">kind</span> <span class="token punctuation">:</span> ConfigMap <span class="token key atrule">metadata</span> <span class="token punctuation">:</span> <span class="token key atrule">name</span> <span class="token punctuation">:</span> argocd <span class="token punctuation">-</span> rbac <span class="token punctuation">-</span> cm <span class="token key atrule">namespace</span> <span class="token punctuation">:</span> argocd <span class="token key atrule">data</span> <span class="token punctuation">:</span> <span class="token key atrule">policy.default</span> <span class="token punctuation">:</span> role <span class="token punctuation">:</span> readonly <span class="token key atrule">policy.csv</span> <span class="token punctuation">:</span> <span class="token punctuation">|</span> |
Chúng tôi sẽ xác định quyền trong trường policy.csv
với định dạng.
1 2 | p, <role/user/group>, <resource>, <action>, <object> |
Hoặc
1 2 | p, <role/user/group>, <resource>, <action>, <appproject>/<object> |
<role/user/group>
là tên của vai trò hoặc người dùng hoặc nhóm.
Tài nguyên: cụm, dự án, ứng dụng, kho lưu trữ, chứng chỉ, tài khoản, gpgkeys, nhật ký, thực thi
Các hành động: lấy, tạo, cập nhật, xóa, đồng bộ hóa, ghi đè, hành động / <group / kind / action-name>
Chúng tôi muốn người dùng có quyền khởi động lại Triển khai, sau đó chúng tôi sẽ định dạng nó như sau.
1 2 3 4 5 6 7 8 9 10 | <span class="token key atrule">apiVersion</span> <span class="token punctuation">:</span> v1 <span class="token key atrule">kind</span> <span class="token punctuation">:</span> ConfigMap <span class="token key atrule">metadata</span> <span class="token punctuation">:</span> <span class="token key atrule">name</span> <span class="token punctuation">:</span> argocd <span class="token punctuation">-</span> rbac <span class="token punctuation">-</span> cm <span class="token key atrule">namespace</span> <span class="token punctuation">:</span> argocd <span class="token key atrule">data</span> <span class="token punctuation">:</span> <span class="token key atrule">policy.default</span> <span class="token punctuation">:</span> role <span class="token punctuation">:</span> readonly <span class="token key atrule">policy.csv</span> <span class="token punctuation">:</span> <span class="token punctuation">|</span><span class="token scalar string"> p, hanli, applications, action/apps/Deployment/restart, default/*, allow</span> |
Tài nguyên chúng ta sẽ để lại là các ứng dụng và với hành động ở định dạng action/<group/kind/action-name>
, sau đó chúng ta sẽ có hành động khởi động lại Triển khai dưới dạng action/apps/Deployment/restart
.
Tiếp theo, giá trị <object>
chúng ta để default/*
, mặc định khi chúng ta cài đặt ArgoCD thì nó sẽ có một dự án tên là default, và nếu chúng ta không tạo thêm dự án thì tất cả các ứng dụng mà chúng ta đang chạy sẽ nằm trong dự án mặc định này. . Và giá trị default/*
có nghĩa là chúng ta muốn quyền này được áp dụng cho toàn bộ ứng dụng trong dự án mặc định.
Nếu bạn muốn giới hạn nó trong một ứng dụng, hãy khai báo nó là default/<application-name>
.
Tuy nhiên, nếu chúng ta có nhiều người dùng, chúng ta cần sao chép tất cả các quyền trên, lúc này ConfigMap của chúng ta sẽ khá dài dòng, ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token key atrule">apiVersion</span> <span class="token punctuation">:</span> v1 <span class="token key atrule">kind</span> <span class="token punctuation">:</span> ConfigMap <span class="token key atrule">metadata</span> <span class="token punctuation">:</span> <span class="token key atrule">name</span> <span class="token punctuation">:</span> argocd <span class="token punctuation">-</span> rbac <span class="token punctuation">-</span> cm <span class="token key atrule">namespace</span> <span class="token punctuation">:</span> argocd <span class="token key atrule">data</span> <span class="token punctuation">:</span> <span class="token key atrule">policy.default</span> <span class="token punctuation">:</span> role <span class="token punctuation">:</span> readonly <span class="token key atrule">policy.csv</span> <span class="token punctuation">:</span> <span class="token punctuation">|</span><span class="token scalar string"> p, hanli, applications, action/apps/Deployment/restart, default/*, allow p, natsu, applications, action/apps/Deployment/restart, default/*, allow p, lucy, applications, action/apps/Deployment/restart, default/*, allow</span> |
Chúng tôi có thể rút ngắn nó bằng cách tạo một vai trò chung và gán nó cho những người dùng khác nhau, ví dụ như thế này:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token key atrule">apiVersion</span> <span class="token punctuation">:</span> v1 <span class="token key atrule">kind</span> <span class="token punctuation">:</span> ConfigMap <span class="token key atrule">metadata</span> <span class="token punctuation">:</span> <span class="token key atrule">name</span> <span class="token punctuation">:</span> argocd <span class="token punctuation">-</span> rbac <span class="token punctuation">-</span> cm <span class="token key atrule">namespace</span> <span class="token punctuation">:</span> argocd <span class="token key atrule">data</span> <span class="token punctuation">:</span> <span class="token key atrule">policy.default</span> <span class="token punctuation">:</span> role <span class="token punctuation">:</span> readonly <span class="token key atrule">policy.csv</span> <span class="token punctuation">:</span> <span class="token punctuation">|</span><span class="token scalar string"> p, role:deployment-restart, applications, action/apps/Deployment/restart, default/*, allow</span> g <span class="token punctuation">,</span> hanli <span class="token punctuation">,</span> role <span class="token punctuation">:</span> deployment <span class="token punctuation">-</span> restart g <span class="token punctuation">,</span> natsu <span class="token punctuation">,</span> role <span class="token punctuation">:</span> deployment <span class="token punctuation">-</span> restart g <span class="token punctuation">,</span> lucy <span class="token punctuation">,</span> role <span class="token punctuation">:</span> deployment <span class="token punctuation">-</span> restart |
Cập nhật argocd-rbac-cmConfigMap, người dùng của chúng tôi sẽ có các quyền tương ứng.
1 2 | kubectl apply -f argocd-rbac-cm.yaml |
Xong. Hãy like trang DevOps VN để nhận thông báo về những bài viết sớm nhất.
Sự kết luận
Như vậy là chúng ta đã tìm hiểu cách tạo user và quản lý RBAC Configuration trên ArgoCD, các bạn có thể tham khảo thêm tại đây RBAC Configuration. Nếu có thắc mắc hoặc cần giải đáp rõ hơn, bạn có thể hỏi trong phần bình luận bên dưới.