Cách bắt đầu với Kubernetes RBAC

Sửa máy tính tại nhà TPHCM

Kiểm soát truy cập dựa trên vai trò (RBAC) là một cơ chế để xác định các hành động mà tài khoản người dùng có thể thực hiện trong cụm Kubernetes của bạn. Kích hoạt RBAC làm giảm rủi ro liên quan đến hành vi trộm cắp thông tin xác thực và chiếm đoạt tài khoản. Việc cấp cho mỗi người dùng bộ quyền tối thiểu mà họ yêu cầu sẽ ngăn các tài khoản trở nên quá đặc quyền.

Bạn Đang Xem: Cách bắt đầu với Kubernetes RBAC

Hầu hết các bản phân phối Kubernetes phổ biến đều bắt đầu với một tài khoản người dùng duy nhất được cấp quyền truy cập siêu người dùng vào cụm. Việc xác thực là tài khoản này cho phép bạn thực hiện bất kỳ hành động nào nhưng có thể gây ra rủi ro bảo mật đáng kể.

Trong bài viết này, chúng tôi sẽ hướng dẫn cách bật và định cấu hình Kubernetes RBAC API để bạn có thể xác định chính xác các khả năng của người dùng. Thông thường đối với một số người dùng chỉ tạo và liệt kê các Pod trong khi quản trị viên cũng có thể xóa các mục. Bạn có thể thiết lập và thực thi các chính sách này bằng hệ thống RBAC.

Bật RBAC trong Kubernetes

RBAC là một tính năng Kubernetes tùy chọn nhưng hầu hết các bản phân phối lớn đều được bật theo mặc định, bao gồm cả những tính năng từ các nhà cung cấp đám mây được quản lý. Bạn có thể kiểm tra xem RBAC có sẵn trong cụm của mình hay không bằng cách chạy lệnh sau với Kubectl:

$ kubectl api-versions | grep rbac.authorization.k8s
rbac.authorization.k8s.io/v1

Lệnh sẽ phát ra rbac.authorization.k8s.io/v1 là đầu ra của nó nếu RBAC được bật. RBAC bị tắt nếu lệnh không tạo ra bất kỳ đầu ra nào. Bạn có thể kích hoạt nó bằng cách khởi động máy chủ Kubernetes API với --authorization-mode=RBAC lá cờ:

$ kube-apiserver --authorization-mode=RBAC

Tham khảo tài liệu về bản phân phối Kubernetes của bạn nếu bạn không chắc chắn về cách tùy chỉnh các đối số khởi động của máy chủ API.

Đối tượng RBAC Kubernetes

Việc triển khai Kubernetes RBAC xoay quanh bốn loại đối tượng khác nhau. Bạn có thể quản lý các đối tượng này bằng Kubectl, tương tự như các tài nguyên Kubernetes khác như Pods, Deployments và ConfigMaps.

  • Vai diễn – Vai trò là một tập hợp các quy tắc kiểm soát truy cập xác định các hành động mà người dùng có thể thực hiện.
  • Vai trò – “Ràng buộc” là liên kết giữa một vai trò và một hoặc nhiều chủ thể, có thể là người dùng hoặc tài khoản dịch vụ. Sự ràng buộc cho phép các đối tượng thực hiện bất kỳ hành động nào có trong vai trò được nhắm mục tiêu.

Role và RoleBindings là các đối tượng có không gian tên. Chúng phải tồn tại trong một không gian tên cụ thể và chúng kiểm soát quyền truy cập vào các đối tượng khác bên trong nó. RBAC được áp dụng cho các tài nguyên cấp cụm – chẳng hạn như chính các Nút và Không gian tên – bằng cách sử dụng ClusterRolesClusterRoleBindings. Chúng hoạt động tương tự như Roles và RoleBindings nhưng nhắm mục tiêu đến các đối tượng không có khoảng cách tên.

Tạo tài khoản dịch vụ

Tài khoản dịch vụ Kubernetes là một loại người dùng được quản lý bởi Kubernetes API. Mỗi tài khoản dịch vụ có một mã thông báo duy nhất được sử dụng làm thông tin đăng nhập của nó. Bạn không thể thêm người dùng bình thường qua API Kubernetes, vì vậy chúng tôi sẽ sử dụng tài khoản dịch vụ cho hướng dẫn này.

Sử dụng Kubectl để tạo tài khoản dịch vụ mới:

$ kubectl create serviceaccount demo

Xem Thêm : Robotaxi hành trình tự lái của GM

Điều này tạo ra một tài khoản mới có tên là demo. Tiếp theo, bạn cần truy xuất mã thông báo mà bạn sẽ sử dụng để xác thực là tài khoản này. Trước tiên, hãy tìm tên của bí mật lưu trữ mã thông báo:

$ kubectl describe serviceaccount demo
Name:                demo
Namespace:           default
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   demo-token-w543b
Tokens:              demo-token-w543b
Events:              <none>

Mã thông báo của tài khoản dịch vụ này được lưu trữ trong bí mật được gọi là demo-token-w543b. Bạn có thể truy xuất mã thông báo bằng cách lấy giá trị của bí mật bằng lệnh này:

$ TOKEN=$(kubectl describe secret demo-token-w543b | grep token: | awk '{print $2}')

Mã thông báo hiện được lưu trữ trong TOKEN biến trong trình bao của bạn. Bạn có thể sử dụng biến này để thêm ngữ cảnh Kubectl mới cho phép bạn xác thực làm tài khoản dịch vụ của mình:

$ kubectl config set-credentials demo --token=$TOKEN
User "demo" set.
$ kubectl config set-context demo --cluster=default --user=demo
Context "demo" created.

Bạn nên thay đổi giá trị của --cluster cờ để khớp với tên của kết nối cụm Kubectl đang hoạt động của bạn. Điều này thường là default hoặc tên của ngữ cảnh bạn đang chọn. Bạn có thể kiểm tra ngữ cảnh đã chọn bằng cách chạy kubectl config current-context.

Chuyển sang ngữ cảnh mới của bạn để xác thực là của bạn demo tài khoản dịch vụ. Trước tiên, hãy ghi lại tên của ngữ cảnh bạn đang chọn, để sau này bạn có thể chuyển về tài khoản superuser của mình.

$ kubectl config current-context
default

$ kubectl config use-context demo
Switched to context "demo".

Các lệnh Kubectl bây giờ sẽ xác thực là demo tài khoản dịch vụ. Cố gắng truy xuất danh sách các Nhóm trong cụm của bạn:

$ kubectl get pods
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:default:demo" cannot list resource "pods" in API group "" in the namespace "default"

Hoạt động đã bị cấm vì demo tài khoản dịch vụ thiếu vai trò cho phép nó truy cập Pods.

Thêm một vai trò

Các vai trò được tạo theo cách giống như bất kỳ đối tượng Kubernetes nào khác. Bạn viết một tệp YAML xác định vai trò và các quyền mà nó cung cấp. Mỗi vai trò chứa một hoặc nhiều quy tắc cho phép thực hiện các hành động cụ thể đối với một nhóm tài nguyên. Đây là một vai trò đơn giản cho phép người dùng truy xuất thông tin chi tiết của các Nhóm hiện có:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: demo-role
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "list"]

Các getlist động từ được áp dụng cho pods tài nguyên có nghĩa là bạn sẽ có thể chạy các lệnh như get poddescribe pod. Việc cố gắng tạo Pod mới hoặc xóa Pod hiện có sẽ bị cấm vì createdelete động từ được lược bỏ khỏi vai trò.

Chuyển về ngữ cảnh Kubectl ban đầu của bạn để bạn có thể thêm vai trò vào cụm của mình bằng tài khoản quản trị của bạn:

$ kubectl config use-context default
Switched to context "default".

Bây giờ thêm vai trò:

$ kubectl apply -f role.yaml
role.rbac.authorization.k8s.io/demo-role created

Vai trò ràng buộc với người dùng và tài khoản dịch vụ

Bây giờ bạn có thể kết hợp vai trò của mình với demo tài khoản dịch vụ bằng cách tạo RoleBinding mới. Tạo tệp YAML sau để xác định ràng buộc của bạn:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: default
  name: demo-role-binding
subjects:
  - kind: ServiceAccount
    name: demo
    apiGroup: ""
roleRef:
  kind: Role
  name: demo-role
  apiGroup: ""

Xem Thêm : Cách xem ngày lễ tạ ơn của Macy

RoleBindings cần bao gồm một hoặc nhiều đối tượng xác định người dùng và tài khoản dịch vụ được nhắm mục tiêu bởi ràng buộc. Các roleRef trường đề cập đến vai trò bạn muốn chỉ định cho từng người dùng đó.

Role và RoleBinding phải tồn tại trong cùng một không gian tên. Thay vào đó, hãy sử dụng ClusterRole và ClusterRoleBinding cho các tài nguyên không có vùng chứa tên.

Lần chạy tiếp theo kubectl apply để thêm RoleBinding vào cụm của bạn. Nó sẽ có hiệu lực ngay lập tức, cấp cho demo tài khoản dịch vụ các khả năng được khai báo trong demo-role Vai diễn:

$ kubectl apply -f role-binding.yaml
rolebinding.rbac.authorization.k8s.io/demo-role-binding created

Kiểm tra quy tắc RBAC của bạn

Kiểm tra việc triển khai RBAC đơn giản của bạn bằng cách chuyển trở lại ngữ cảnh Kubectl mới mà bạn đã tạo cho demo tài khoản:

$ kubectl config use-context demo
Switched to context "demo".

Bây giờ lặp lại get pods lệnh từ trước đó:

$ kubectl get pods
No resources found in default namespace.

Lần này lệnh đã thành công. Các demo tài khoản dịch vụ hiện được phép truy xuất danh sách Pod vì nó liên kết với demo-role Vai diễn. Bạn sẽ vẫn gặp lỗi Bị cấm nếu bạn cố gắng tạo Pod mới vì thao tác đó không được bao gồm trong bất kỳ vai trò nào liên kết với tài khoản:

$ kubectl run nginx --image=nginx
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:default:demo" cannot create resource "pods" in API group "" in the namespace "default"

Bạn có thể giải quyết vấn đề này bằng cách gán cho người dùng một vai trò khác bao gồm create động từ cho pods nguồn. Ngoài ra, bạn có thể chỉnh sửa tệp YAML của vai trò hiện có và áp dụng phiên bản đã sửa đổi cho cụm của bạn:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: demo-role
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["create", "get", "list"]

Bạn cũng có thể thêm các quy tắc bổ sung cho vai trò của mình để tạo các kết hợp khác nhau của các nhóm tài nguyên và các hành động được phép.

Bản tóm tắt

RBAC cho phép bạn xác định các khả năng phần mềm có sẵn cho các tài khoản người dùng cá nhân. Hệ thống Kubernetes RBAC cung cấp các biện pháp kiểm soát chính xác cao để giới hạn các loại tài nguyên mà tài khoản có thể truy cập và các hành động mà chúng được phép thực hiện.

Việc áp dụng RBAC sẽ thắt chặt an ninh xung quanh cụm của bạn và tạo ra một môi trường hoạt động ít rủi ro hơn. Tuy nhiên, bạn vẫn cần ghi nhớ các phương pháp hay nhất để tránh phát sinh các vấn đề mới. Bạn nên thường xuyên kiểm tra cụm của mình để xác định các tài khoản quá đặc quyền và xóa các vai trò dư thừa. Điều này sẽ giúp tránh nhầm lẫn và cho phép bạn có được bức tranh rõ ràng về các hành động có thể được thực hiện bởi từng tài khoản.

Việc triển khai RBAC hiệu quả phải dựa trên số lượng vai trò nhỏ nhất có thể, với mỗi vai trò có nhóm hành động tối thiểu cần thiết cho lĩnh vực chức năng cụ thể của nó. Việc gán quá nhiều đặc quyền cho mỗi tài khoản sẽ phủ nhận lợi ích của RBAC, vì vậy, bạn nên dành thời gian lập kế hoạch cho từng yêu cầu của người dùng trước khi bắt đầu tạo vai trò và ràng buộc.

dịch vụ cài win online từ xa

Nguồn: https://trungtamsuamaytinh.com
Danh mục: TIN HỌC

Vui lòng đánh giá về dịch vụ tại nhà