【Kubernetes】ロールを理解する
2021.11.03
2024.03.24
Kubernetes
ClusterRoleRole
はじめに
Kubernetesでのリソースへのアクセス制御まわりをざっくりまとめて、実際に動かしてみます。
RBAC(Role Based Access Control)とは
RBAC(Role Based Access Control)とは、Kubernetesのリソースへのアクセスをロールにより制御するための方法です。
ユーザーにロールを付与することでリソースへのアクセスを許可させます。
RoleとClusterRole
RBACには下記2つのロールがあります。
リソース | 説明 |
---|---|
Role | 特定のnamespaceでの権限を設定 |
ClusterRole | クラスタ全体での権限を設定 |
権限は追加方式であり、拒否する権限はありません。
RoleBindingとClusterRoleBinding
~Bindingがロールとの紐付けを行います。RoleとClusterRoleそれぞれ以下のようになります。
リソース | 説明 |
---|---|
RoleBinding | ユーザー・グループ・ServiceAccountとRoleを紐づける |
ClusterRoleBinding | ユーザー・グループ・ServiceAccountとClusterRoleを紐づける |
Roleを付与してみる
まずはRoleのマニフェストrole.yml
を用意します。
1apiVersion: rbac.authorization.k8s.io/v1
2kind: Role
3metadata:
4 namespace: default # 付与するnamespace
5 name: pod-reader-role # Role名
6rules:
7- apiGroups: [""]
8 resources: ["pods"]
9 verbs: ["get", "watch", "list"]
次にRoleを紐づけるためのRoleBindingのマニフェストrolebinding.yml
を作成します。
1apiVersion: rbac.authorization.k8s.io/v1
2kind: RoleBinding
3metadata:
4 name: read-pods-role
5 namespace: default # 付与するnamespace
6subjects:
7- kind: User # ユーザーかグループかServiceAccountか
8 name: masa # ユーザー名
9 apiGroup: rbac.authorization.k8s.io
10roleRef:
11 kind: Role
12 name: pod-reader-role # Role名
13 apiGroup: rbac.authorization.k8s.io
それぞれのマニフェストを反映させます。
1❯ kubectl apply -f role.yml
2role.rbac.authorization.k8s.io/pod-reader-role created
3
4❯ kubectl apply -f rolebinding.yml
5rolebinding.rbac.authorization.k8s.io/read-pods-role created
RoleBindingを確認すると紐づけられていることが確認できます。
1❯ kubectl describe rolebinding read-pods-role
2Name: read-pods-role
3Labels: <none>
4Annotations: <none>
5Role:
6 Kind: Role
7 Name: pod-reader-role
8Subjects:
9 Kind Name Namespace
10 ---- ---- ---------
11 User masa
ClusterRoleを付与してみる
ClusterRoleも実際に付与してみます。 基本的にやることはRoleと同じです。
まずはClusterRoleのマニフェストclusterrole.yml
を用意します。
1apiVersion: rbac.authorization.k8s.io/v1
2kind: ClusterRole
3metadata:
4 name: secret-reader-clusterrole # ClusterRole名
5rules:
6- apiGroups: [""]
7 resources: ["secrets"]
8 verbs: ["get", "watch", "list"]
次にClusterRoleを紐づけるためのClusterRoleBindingのマニフェストclusterrolebinding.yml
を作成します。
1apiVersion: rbac.authorization.k8s.io/v1
2kind: ClusterRoleBinding
3metadata:
4 name: read-secrets-global-clusterrole
5subjects:
6- kind: User # ユーザーかグループかServiceAccountか
7 name: masa # ユーザー名
8 apiGroup: rbac.authorization.k8s.io
9roleRef:
10 kind: ClusterRole
11 name: secret-reader-clusterrole # ClusterRole名
12 apiGroup: rbac.authorization.k8s.io
それぞれのマニフェストを反映させます。
1❯ kubectl apply -f clusterrole.yml
2clusterrole.rbac.authorization.k8s.io/secret-reader-clusterrole created
3
4❯ kubectl apply -f clusterrolebinding.yml
5clusterrolebinding.rbac.authorization.k8s.io/read-secrets-global-clusterrole created
ClusterRoleBindingを確認すると紐づけられていることが確認できます。
1❯ kubectl describe clusterrolebinding read-secrets-global-clusterrole
2Name: read-secrets-global-clusterrole
3Labels: <none>
4Annotations: <none>
5Role:
6 Kind: ClusterRole
7 Name: secret-reader-clusterrole
8Subjects:
9 Kind Name Namespace
10 ---- ---- ---------
11 User masa
まとめ
- ロールはRoleとClusterRole
- ロールの紐付けはRoleBindingとClusterRoleBinding
参考
Share