Rancherの権限は何を認可しているのか

Rancher には RBAC の仕組みが備わっており，以下の3種類のスコープが存在する．

**Global Permission**: 特定クラスタに依存しない権限, Catalogやアカウント管理など
**Cluster Role**: Kubernetesクラスタ別の権限, ノードやストレージ, [プロジェクト](https://rancher.com/docs/rancher/v2.x/en/k8s-in-rancher/projects-and-namespaces/)の管理など
**Project Role**: プロジェクト別の権限, 名前空間の管理やサービス, シークレット, ボリュームなど

(Permission と Role という単語が並列に用いられているのがもやっとする)

各スコープには複数のロールと権限が存在するが，
[公式ドキュメント](https://rancher.com/docs/rancher/v2.x/en/admin-settings/rbac/)には Rancher の RBAC は Kubernetes の RBAC をベースとして実装している
と説明があるだけで具体的な権限についての説明がない．
ここでは Rancher の RBAC における 権限について確認する．

# スコープ別のロールと権限
## [Global Permission](https://rancher.com/docs/rancher/v2.x/en/admin-settings/rbac/global-permissions/)
デフォルトでは Administrator と Standard User という2つのロールが定義されている．
[ロールごとの権限](https://rancher.com/docs/rancher/v2.x/en/admin-settings/rbac/global-permissions/#global-permissions-reference)は以下の通り

| Custom Global Permission | Administrator  | Standard User |
|:--|:--|:--|:--|
| Manage Authentication  | ✓  |  |
| Manage Catalogs  | ✓  |  |
| Manage Node Drivers  | ✓  |  |
| Manage PodSecurityPolicy Templates  | ✓  |  |
| Manage Roles  | ✓  |  |
| Manage Users  | ✓  |  |
| Create Clusters  | ✓  | ✓ |
| User Catalog Templates  | ✓  | ✓ |
| Login Access  | ✓  | ✓ |

## [Cluster Role](https://rancher.com/docs/rancher/v2.x/en/admin-settings/rbac/cluster-project-roles/#cluster-roles)
デフォルトでは Owner と Member の2つのロールが定義されている．
[ロールごとの権限](https://rancher.com/docs/rancher/v2.x/en/admin-settings/rbac/cluster-project-roles/#cluster-role-reference)は以下の通り


| Custom Cluster Role  | Owner  | Member |
|:--|:--|:--|
| Manage Cluster Members  | ✓  |  |
| Manage Nodes  | ✓  |  |
| Manage Storage  | ✓  |  |
| View All Projects  | ✓  |  |
| Create Project  | ✓  | ✓ |
| View Cluster Members  | ✓  | ✓ |
| View Nodes  | ✓  | ✓ |

## [Project Role](https://rancher.com/docs/rancher/v2.x/en/admin-settings/rbac/cluster-project-roles/#project-roles)

デフォルトでは Owner, Member, Read Only の3つのロールが定義されている．
[ロールごとの権限](https://rancher.com/docs/rancher/v2.x/en/admin-settings/rbac/cluster-project-roles/#project-role-reference)は以下の通り


| Custom Cluster Role  | Owner  | Member  | Read Only |
|:--|:--|:--|:--|
| Manage Project Members  | ✓  |  |  |
| Create Namespaces  | ✓  | ✓  |  |
| Manage Config Maps  | ✓  | ✓  |  |
| Manage Ingress  | ✓  | ✓  |  |
| Manage Secrets  | ✓  | ✓  |  |
| Manage Service Accounts  | ✓  | ✓  |  |
| Manage Services  | ✓  | ✓  |  |
| Manage Volumes  | ✓  | ✓  |  |
| Manage Workloads  | ✓  | ✓  |  |
| View Config Maps  | ✓  | ✓  | ✓ |
| View Ingress  | ✓  | ✓  | ✓ |
| View Project Members  | ✓  | ✓  | ✓ |
| View Secrets  | ✓  | ✓  | ✓ |
| View Service Accounts  | ✓  | ✓  | ✓ |
| View Services  | ✓  | ✓  | ✓ |
| View Volumes  | ✓  | ✓  | ✓ |
| View Workloads  | ✓  | ✓  | ✓ |

# 権限の設計
では，各権限はどのように定義されているかというと
Global > Security > Roles で確認できる(一部省略)．

![権限一覧.png](https://qiita-image-store.s3.amazonaws.com/0/14181/101d0e0a-5c55-c090-b520-45ec5297b4fb.png)

各権限を選択すると，権限ごとに設定されている対象リソースとオペレーションを確認できる．

![Operationとリソース一覧.png](https://qiita-image-store.s3.amazonaws.com/0/14181/13d61687-17f3-fde1-a18e-aeaa81a0a445.png)

ここで表示されている Create 〜 Watch までの操作は [Kubernetes の RBAC](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) で
指定可能な操作 (verb)と同じである．

参考: [Kubernetes: RBACの設定におけるAPIリソース](https://qiita.com/tkusumi/items/300c566a74b6b64e7e89)

また，対象のリソースは Rancher で定義された CRD(Custom Resource Definition)
であり，CRD の詳細を確認することで対象リソースの内容を確認できる．

参考: [Rancher 2.0のデータストアを覗く方法](https://qiita.com/yamamoto-febc/items/498b911611dd25351ad7)