11-kubernetes RBACおよび承認
16607 ワード
目次 RBAC roleとclusterrole rolebindingとclusterrolebinding 共通権限clusterrole
user作成テスト roleケースの作成 role を作成する rolebindingバインドtracyユーザ tracy権限のテスト clusterroleテスト clusterrole を作成テストバインドtracyユーザー tracy権限のテスト テストrolebindingバインドclusterrole clusterrole adminデフォルトロール テストバインディング
ライセンスプラグイン: Node ABAC RBAC Webhook
RBACの主な機能はロールベースのアクセス制御許可(permission)を提供することである.
したがって、その後のすべての操作許可は、ユーザーに直接許可するのではなく、ロールに直接許可されます.
あるオブジェクトに適用される行為は、Actionとなる.
役割は次の2つに分けられます.
バインディングは2つに分けられます.
質問:
回答:
一般的なアプローチ
実際の作業では、複数の名前空間があり、各名前空間は1つのプロジェクトに対応し、各プロジェクトは1つのプロジェクトグループに対応していることを想像します.この場合、各プロジェクトグループは対応するプロジェクトの名前空間に対する権限が同じです.では、同じ権限を各名前空間で定義する
便利な方法
このとき、
ヘルプ:は、 は、 を出力する.
では、この2つのパラメータを使用してyaml形式のファイルをエクスポートします.
以前にユーザーtracyが作成され、作成したばかりのroleをバインドできます.
同じ方法を使用します.
作成:
tracyユーザーの下でテスト権限に切り替えます.
以上の説明から分かるように、名前空間が
定義方法はroleとほぼ同じで、ヘルプを表示すると次のようになります.
以前tracyはroleをバインドしていましたが、このrolebindingを削除し、clusterroleをバインドする必要があります.
tracyに切り替え、アクセステストを行います.
上記のテストから、はdefaultネームスペースのpodsリソースにアクセスできますが、serviceリソースにはアクセスできません. は、kube-systemネームスペースのリソースにアクセスしたり、kube-systemネームスペースserviceリソースにアクセスしたりすることはできません.
まずtracyさっきbindingのclusterrolebindingを削除します
clusterrolebindingを削除すると、tracyユーザーにはget権限がありません.
次にrolebindingを使用してclusterroleをバインドします.
アクセスのテスト
テストはdefaultネームスペースのリソースにのみアクセスでき、他のネームスペースのリソースにはアクセスできません.
clusterroleには、デフォルトのadminロールが2つあります.admin、cluster-admin
どちらもクラスタロールの管理者であるため、クラスタに複数の名前空間がある場合、手動で管理者ロールを作成する必要がなく、adminのロールモデルrolebindingを直接使用することができ、多くの重複作業を省くことができます.
テストはclusterroleのadminロールをtracyユーザーにバインドします.
以前はclusterroleがバインドされていましたが、このとき再びバインドされ、影響を受けず、一人で多職を兼ねていることに相当します.
転載先:https://www.cnblogs.com/winstom/p/11394044.html
RBAC
ライセンスプラグイン:
RBACの主な機能はロールベースのアクセス制御許可(permission)を提供することである.
: (Role), (Role) , 。
したがって、その後のすべての操作許可は、ユーザーに直接許可するのではなく、ロールに直接許可されます.
, URL, ,
あるオブジェクトに適用される行為は、Actionとなる.
roleとclusterrole
role , , role 。
role , , 。
, , 。
役割は次の2つに分けられます.
1. role
2. clusterrole
义齿
。
バインディングは2つに分けられます.
1. rolebinding ,
2. clusterrolebinding ,
質問:
rolebinding
を使用してuser1
をバインドする場合、clusterrole
の権限は?回答:
user1
の権限は名前空間に限られています.user1
を使用してバインドされているので、名前空間を突破することはできません.共通権限clusterrole
一般的なアプローチ
実際の作業では、複数の名前空間があり、各名前空間は1つのプロジェクトに対応し、各プロジェクトは1つのプロジェクトグループに対応していることを想像します.この場合、各プロジェクトグループは対応するプロジェクトの名前空間に対する権限が同じです.では、同じ権限を各名前空間で定義する
rolebinding
が必要であり、role
を使用してプロジェクトユーザをバインドし、重複する操作がある.便利な方法
このとき、
rolebinding
クラスタロールと対応する権限を定義し、clusterrole
を使用してプロジェクトユーザにrolebinding
ロールをバインドすると、すべての名前空間で自分のclusterrole
を定義することなく、role
を直接使用することができます.user作成テスト
roleケースの作成
ヘルプ:
[root@master ~]# kubectl create role --help
Create a role with single rule.
Examples:
# Create a Role named "pod-reader" that allows user to perform "get", "watch" and "list" on pods
kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods
# Create a Role named "pod-reader" with ResourceName specified
kubectl create role pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod
# Create a Role named "foo" with API Group specified
kubectl create role foo --verb=get,list,watch --resource=rs.extensions
# Create a Role named "foo" with SubResource specified
kubectl create role foo --verb=get,list,watch --resource=pods,pods/status
clusterrole
パラメータを介して、コマンドが実際に実行されないようにします.ただし、テストコマンドが正常かどうかをシミュレートします.--dry-run
を介してyaml形式ででは、この2つのパラメータを使用してyaml形式のファイルをエクスポートします.
[root@master rbac]# kubectl create role pods-reader --verb=get,list,watch --resource=pods --dry-run
role.rbac.authorization.k8s.io/pods-reader created (dry run)
[root@master rbac]# kubectl create role pods-reader --verb=get,list,watch --resource=pods --dry-run -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: null
name: pods-reader
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
[root@master rbac]# kubectl create role pods-reader --verb=get,list,watch --resource=pods --dry-run -o yaml > role-demo.yaml
[root@master rbac]# ll
total 4
-rw-r--r-- 1 root root 193 Aug 21 16:56 role-demo.yaml
[root@master rbac]# cat role-demo.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: null
name: pods-reader
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
roleの作成
[root@master rbac]# kubectl apply -f role-demo.yaml
role.rbac.authorization.k8s.io/pods-reader created
[root@master rbac]# kubectl get role
NAME AGE
pods-reader 2s
[root@master rbac]# kubectl describe role pods-reader
Name: pods-reader
Labels:
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"rbac.authorization.k8s.io/v1","kind":"Role","metadata":{"annotations":{},"name":"pods-reader","namespace":"default"},"rules...
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
pods [] [] [get list watch] #
以前にユーザーtracyが作成され、作成したばかりのroleをバインドできます.
rolebindingバインドtracyユーザー
同じ方法を使用します.
[root@master rbac]# kubectl create rolebinding tracy-read-pods --role=pods-reader --user=tracy --dry-run -o yaml > rolebinding-demo.yaml
[root@master rbac]# cat rolebinding-demo.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
creationTimestamp: null
name: tracy-read-pods
roleRef: # (role)
apiGroup: rbac.authorization.k8s.io
kind: Role
name: pods-reader # role
subjects: #
- apiGroup: rbac.authorization.k8s.io
kind: User
name: tracy #
作成:
[root@master rbac]# kubectl apply -f rolebinding-demo.yaml
rolebinding.rbac.authorization.k8s.io/tracy-read-pods created
[root@master rbac]# kubectl get rolebinding
NAME AGE
tracy-read-pods 5s
[root@master rbac]# kubectl describe rolebinding/tracy-read-pods
Name: tracy-read-pods
Labels:
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"rbac.authorization.k8s.io/v1","kind":"RoleBinding","metadata":{"annotations":{},"creationTimestamp":null,"name":"tracy-read...
Role:
Kind: Role
Name: pods-reader
Subjects:
Kind Name Namespace
---- ---- ---------
User tracy
tracy権限のテスト
tracyユーザーの下でテスト権限に切り替えます.
[root@master rbac]# kubectl config use-context tracy@kubernetes
Switched to context "tracy@kubernetes".
[root@master rbac]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-sa-demo 1/1 Running 0 5d3h
[root@master rbac]# kubectl delete pods/pod-sa-demo
Error from server (Forbidden): pods "pod-sa-demo" is forbidden: User "tracy" cannot delete resource "pods" in API group "" in the namespace "default"
[root@master rbac]# kubectl get pods -n kube-system
Error from server (Forbidden): pods is forbidden: User "tracy" cannot list resource "pods" in API group "" in the namespace "kube-system"
以上の説明から分かるように、名前空間が
-o yaml
であることを表示する権限のみがあり、削除する権限は他になく、他の名前空間のリソースも表示されません.clusterroleテスト
定義方法はroleとほぼ同じで、ヘルプを表示すると次のようになります.
[root@master ~]# kubectl create clusterrole --help
Create a ClusterRole.
Examples:
# Create a ClusterRole named "pod-reader" that allows user to perform "get", "watch" and "list" on pods
kubectl create clusterrole pod-reader --verb=get,list,watch --resource=pods
# Create a ClusterRole named "pod-reader" with ResourceName specified
kubectl create clusterrole pod-reader --verb=get --resource=pods --resource-name=readablepod
--resource-name=anotherpod
# Create a ClusterRole named "foo" with API Group specified
kubectl create clusterrole foo --verb=get,list,watch --resource=rs.extensions
# Create a ClusterRole named "foo" with SubResource specified
kubectl create clusterrole foo --verb=get,list,watch --resource=pods,pods/status
# Create a ClusterRole name "foo" with NonResourceURL specified
kubectl create clusterrole "foo" --verb=get --non-resource-url=/logs/*
# Create a ClusterRole name "monitoring" with AggregationRule specified
kubectl create clusterrole monitoring --aggregation-rule="rbac.example.com/aggregate-to-monitoring=true"
clusterroleの作成
[root@master rbac]# kubectl create clusterrole cluster-reader --verb=get,list,watch --resource=pods --dry-run -o yaml > clusterrole-demo.yaml
[root@master rbac]# cat clusterrole-demo.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
creationTimestamp: null
name: cluster-reader
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
[root@master rbac]# kubectl apply -f clusterrole-demo.yaml
clusterrole.rbac.authorization.k8s.io/cluster-reader created
[root@master rbac]# kubectl describe clusterrole/cluster-reader
Name: cluster-reader
Labels:
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRole","metadata":{"annotations":{},"creationTimestamp":null,"name":"cluster-re...
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
pods [] [] [get list watch]
tracyユーザーのバインドのテスト
以前tracyはroleをバインドしていましたが、このrolebindingを削除し、clusterroleをバインドする必要があります.
[root@master rbac]# kubectl create clusterrolebinding tracy-read-all-pods --clusterrole=cluster-reader --user=tracy --dry-run -o yaml > clusterrolebinding-demo.yaml
[root@master rbac]# cat clusterrolebinding-demo.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
creationTimestamp: null
name: tracy-read-all-pods
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: tracy
[root@master rbac]# kubectl apply -f clusterrolebinding-demo.yaml
clusterrolebinding.rbac.authorization.k8s.io/tracy-read-all-pods created
[root@master rbac]# kubectl describe clusterrolebinding/tracy-read-all-pods
Name: tracy-read-all-pods
Labels:
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"rbac.authorization.k8s.io/v1beta1","kind":"ClusterRoleBinding","metadata":{"annotations":{},"creationTimestamp":null,"name"...
Role:
Kind: ClusterRole
Name: cluster-reader
Subjects:
Kind Name Namespace
---- ---- ---------
User tracy
tracy権限のテスト
tracyに切り替え、アクセステストを行います.
[root@master rbac]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-sa-demo 1/1 Running 0 5d4h
[root@master rbac]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-5c98db65d4-8mzfz 1/1 Running 0 43d
coredns-5c98db65d4-spjx8 1/1 Running 0 43d
etcd-master.kubernetes 1/1 Running 0 43d
kube-apiserver-master.kubernetes 1/1 Running 0 43d
kube-controller-manager-master.kubernetes 1/1 Running 0 43d
kube-flannel-ds-amd64-4szk7 1/1 Running 0 43d
kube-flannel-ds-amd64-b4ssp 1/1 Running 1 43d
kube-flannel-ds-amd64-nmklz 1/1 Running 0 43d
kube-flannel-ds-amd64-wjczq 1/1 Running 0 43d
kube-proxy-8fqsz 1/1 Running 0 43d
kube-proxy-bkrw4 1/1 Running 0 43d
kube-proxy-n75g8 1/1 Running 1 43d
kube-proxy-rmckk 1/1 Running 0 43d
kube-scheduler-master.kubernetes 1/1 Running 0 43d
kubernetes-dashboard-7d75c474bb-8kzrl 1/1 Running 0 9d
[root@master rbac]# kubectl get service
Error from server (Forbidden): services is forbidden: User "tracy" cannot list resource "services" in API group "" in the namespace "default"
[root@master rbac]# kubectl get service -n kube-system
Error from server (Forbidden): services is forbidden: User "tracy" cannot list resource "services" in API group "" in the namespace "kube-system"
上記のテストから、
rolebindingバインドclusterroleのテスト
まずtracyさっきbindingのclusterrolebindingを削除します
[root@master rbac]# kubectl delete -f clusterrolebinding-demo.yaml
clusterrolebinding.rbac.authorization.k8s.io "tracy-read-all-pods" deleted
[root@master rbac]# kubectl config use-context tracy@kubernetes
Switched to context "tracy@kubernetes".
[root@master rbac]# kubectl get pods
Error from server (Forbidden): pods is forbidden: User "tracy" cannot list resource "pods" in API group "" in the namespace "default"
clusterrolebindingを削除すると、tracyユーザーにはget権限がありません.
次にrolebindingを使用してclusterroleをバインドします.
[root@master rbac]# kubectl create rolebinding tracy-read-pods --clusterrole=cluster-reader --user=tracy --dry-run
rolebinding.rbac.authorization.k8s.io/tracy-read-pods created (dry run)
[root@master rbac]# kubectl create rolebinding tracy-read-pods --clusterrole=cluster-reader --user=tracy --dry-run -o yaml > rolebinding-clusterrole-demo.yaml
[root@master rbac]# cat rolebinding-clusterrole-demo.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding # rolebinding
metadata:
name: tracy-read-pods
namespace: default #
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole # clusterrole
name: cluster-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: tracy #
[root@master rbac]# kubectl apply -f rolebinding-clusterrole-demo.yaml
rolebinding.rbac.authorization.k8s.io/tracy-read-pods created
アクセスのテスト
[root@master rbac]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-sa-demo 1/1 Running 0 5d19h
[root@master rbac]# kubectl get pods -n kube-system
Error from server (Forbidden): pods is forbidden: User "tracy" cannot list resource "pods" in API group "" in the namespace "kube-system"
テストはdefaultネームスペースのリソースにのみアクセスでき、他のネームスペースのリソースにはアクセスできません.
clusterrole adminデフォルトロール
clusterroleには、デフォルトのadminロールが2つあります.admin、cluster-admin
どちらもクラスタロールの管理者であるため、クラスタに複数の名前空間がある場合、手動で管理者ロールを作成する必要がなく、adminのロールモデルrolebindingを直接使用することができ、多くの重複作業を省くことができます.
バインディングのテスト
テストはclusterroleのadminロールをtracyユーザーにバインドします.
以前はclusterroleがバインドされていましたが、このとき再びバインドされ、影響を受けず、一人で多職を兼ねていることに相当します.
[root@master rbac]# kubectl create rolebinding defult-ns-admin --clusterrole=admin --user=tracy
rolebinding.rbac.authorization.k8s.io/defult-ns-admin created
[root@master rbac]# kubectl config use-context tracy@kubernetes # tracy
Switched to context "tracy@kubernetes".
[root@master rbac]# kubectl get pods #
NAME READY STATUS RESTARTS AGE
pod-sa-demo 1/1 Running 0 5d20h
[root@master rbac]# kubectl delete pods pod-sa-demo
pod "pod-sa-demo" deleted #
[root@master rbac]# kubectl get pods
No resources found.
[root@master rbac]# kubectl get pods -n kube-system #
Error from server (Forbidden): pods is forbidden: User "tracy" cannot list resource "pods" in API group "" in the namespace "kube-system"
転載先:https://www.cnblogs.com/winstom/p/11394044.html