Kubernetes Role-Based Access Control(RBAC)
ロールベースのアクセス制御(RBAC)
Kubernetes には、API サーバーに利用権限を設定するのに役立つ ロールベースのアクセス制御(RBAC) という 認可モジュール があります。
RBAC の権限モデルは、3 つの個別のパーツ から構築されています:
サブジェクト(ユーザー、グループ、またはサービスアカウント) - 権限を受け取るオブジェクトです。
ロールバインディング/クラスターロールバインディング - ロール/クラスターロールとサブジェクトの接続です。
「ロール」と「クラスターロール」の違いは、ロールが適用される場所だけです - 「ロール」は 1 つの特定のネームスペース にのみアクセス権限を付与しますが、「クラスターロール」はクラスタ内の すべてのネームスペース で使用できます。さらに、クラスターロール は次のものにもアクセス権限を付与できます:
クラスタ全体のリソース(ノードなど)。
非リソースエンドポイント(/healthz など)。
ネームスペース内のリソース(Pod など)、すべてのネームスペース を対象とします。
Kubernetes 1.6 以降、RBAC ポリシーはデフォルトで有効になっています。ただし、RBAC を有効にするには、次のような方法を使用できます:
テンプレート
RoleまたはClusterRoleのテンプレートでは、ロールの名前、名前空間(ロールの場合)、そしてロールのapiGroups、resources、verbsを指定する必要があります。
apiGroupsは、このルールが適用されるAPI名前空間を含む配列です。たとえば、Podの定義ではapiVersion: v1を使用します。rbac.authorization.k8s.ioや[*]などの値を持つことができます。
resourcesは、このルールが適用されるリソースを定義する配列です。すべてのリソースは
kubectl api-resources --namespaced=true
で確認できます。verbsは、許可される動詞を含む配列です。Kubernetesの動詞は、リソースに適用する必要のあるアクションのタイプを定義します。たとえば、list動詞はコレクションに対して使用され、"get"は単一のリソースに対して使用されます。
ルールの動詞
(この情報は こちら から取得されました)
HTTP動詞 | リクエスト動詞 |
---|---|
POST | create |
GET, HEAD | get(個々のリソースに対して)、list(コレクションに対して、オブジェクトの内容を含む)、watch(個々のリソースまたはリソースのコレクションを監視するため) |
PUT | update |
PATCH | patch |
DELETE | delete(個々のリソースに対して)、deletecollection(コレクションに対して) |
Kubernetesは、特殊な動詞を使用して追加の権限の認可をチェックすることがあります。たとえば:
policy
APIグループのpodsecuritypolicies
リソースでuse
動詞を使用します。rbac.authorization.k8s.io
APIグループのroles
およびclusterroles
リソースでbind
およびescalate
動詞を使用します。コアAPIグループの
users
、groups
、serviceaccounts
およびauthentication.k8s.io
APIグループのuserextras
でimpersonate
動詞を使用します。
kubectl api-resources --sort-by name -o wide
を実行して、各リソースがサポートするすべての動詞を見つけることができます。
例
例えば、特定のユーザーが実行できるようにするために、ClusterRoleを使用することができます。
RoleBindingとClusterRoleBinding
RoleBindingは、ユーザーまたはユーザーセットに定義された権限を付与します。それはサブジェクト(ユーザー、グループ、またはサービスアカウント)のリストと、付与される役割への参照を保持します。RoleBindingは特定のネームスペース内で権限を付与しますが、ClusterRoleBindingはクラスタ全体でアクセスを付与します。
権限は加算されますので、"list"と"delete"のシークレットを持つclusterRoleを持っている場合、それを"get"を持つRoleで追加することができます。したがって、常に役割と権限をテストし、許可されているものを明示してください。なぜなら、デフォルトではすべてが拒否されるからです。
RBACの列挙
特権昇格のための役割/クラスターロールの悪用
pageAbusing Roles/ClusterRoles in Kubernetes最終更新