Kubernetes での RBAC の設定
Kubernetes で RBAC を設定するには、ロール (Role)、クラスターロール (ClusterRole)、ロールバインディング (RoleBinding)、およびクラスターロールバインディング (ClusterRoleBinding) を作成および管理して、主体 (ユーザー、グループ、またはサービスアカウント) に必要な権限を付与します。
ロールとクラスターロールの定義
ロール (Role) とクラスターロール (ClusterRole) は、Kubernetes リソースに対する許可された操作を定義します。両者の違いは、ロールは特定のネームスペースにスコープされるのに対し、クラスターロールはクラスター全体に適用されるという点です。
以下は、"default" ネームスペース内のポッド (pod) に対する読み取りアクセス権を付与するロールの例です。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] ## "" indicates the core API group
resources: ["pods"]
verbs: ["get", "list", "watch"]
また、クラスター全体に対する管理者アクセス権を付与するクラスターロールの例を次に示します。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-admin
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
ロールとクラスターロールのバインド
ロールバインディング (RoleBinding) とクラスターロールバインディング (ClusterRoleBinding) は、ロールまたはクラスターロールを主体に関連付け、指定された権限を付与します。
以下は、"default" ネームスペース内の "alice" ユーザーに "pod-reader" ロールを付与するロールバインディングの例です。
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
namespace: default
name: alice-pod-reader
subjects:
- kind: User
name: alice
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
また、クラスター全体で "admin" グループに "cluster-admin" ロールを付与するクラスターロールバインディングの例を次に示します。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-cluster-admin
subjects:
- kind: Group
name: admin
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io