はじめに
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
を用意します。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default # 付与するnamespace
name: pod-reader-role # Role名
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
次にRoleを紐づけるためのRoleBindingのマニフェストrolebinding.yml
を作成します。
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods-role
namespace: default # 付与するnamespace
subjects:
- kind: User # ユーザーかグループかServiceAccountか
name: masa # ユーザー名
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader-role # Role名
apiGroup: rbac.authorization.k8s.io
それぞれのマニフェストを反映させます。
❯ kubectl apply -f role.yml
role.rbac.authorization.k8s.io/pod-reader-role created
❯ kubectl apply -f rolebinding.yml
rolebinding.rbac.authorization.k8s.io/read-pods-role created
RoleBindingを確認すると紐づけられていることが確認できます。
❯ kubectl describe rolebinding read-pods-role
Name: read-pods-role
Labels: <none>
Annotations: <none>
Role:
Kind: Role
Name: pod-reader-role
Subjects:
Kind Name Namespace
---- ---- ---------
User masa
ClusterRoleを付与してみる
ClusterRoleも実際に付与してみます。
基本的にやることはRoleと同じです。
まずはClusterRoleのマニフェストclusterrole.yml
を用意します。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: secret-reader-clusterrole # ClusterRole名
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
次にClusterRoleを紐づけるためのClusterRoleBindingのマニフェストclusterrolebinding.yml
を作成します。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: read-secrets-global-clusterrole
subjects:
- kind: User # ユーザーかグループかServiceAccountか
name: masa # ユーザー名
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: secret-reader-clusterrole # ClusterRole名
apiGroup: rbac.authorization.k8s.io
それぞれのマニフェストを反映させます。
❯ kubectl apply -f clusterrole.yml
clusterrole.rbac.authorization.k8s.io/secret-reader-clusterrole created
❯ kubectl apply -f clusterrolebinding.yml
clusterrolebinding.rbac.authorization.k8s.io/read-secrets-global-clusterrole created
ClusterRoleBindingを確認すると紐づけられていることが確認できます。
❯ kubectl describe clusterrolebinding read-secrets-global-clusterrole
Name: read-secrets-global-clusterrole
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: secret-reader-clusterrole
Subjects:
Kind Name Namespace
---- ---- ---------
User masa
まとめ
- ロールはRoleとClusterRole
- ロールの紐付けはRoleBindingとClusterRoleBinding