【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

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee