0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

KubernetesのRBACの裏側

Posted at

KubernetesのRBACの裏側

1. はじめに

Kubernetesは、コンテナ化されたアプリケーションをホストするための先進的なオーケストレーションエンジンです。このエンジン内で、**RBAC(Role-Based Access Control)**という認証メカニズムが注目を浴びています。

Kubernetes認証の重要性

Kubernetes環境内でリソースにアクセスする際の認証と認可は、セキュリティの観点から非常に重要です。誤った設定は、不正アクセスやデータの漏洩を引き起こす可能性があります。

RBACとは何か?

RBACは、ユーザーにロールを割り当て、そのロールに基づいてリソースへのアクセスを制御する方法です。これにより、特定のユーザーやグループに対して、必要な権限だけを付与することができます。

2. RBACとABAC:基本的な違い

RBACはロールに基づくアクセス制御を提供するのに対し、ABACは属性に基づくアクセス制御を提供します。

ABACの特性

ABACは、JSON形式のポリシーファイルによって認可ルールを定義します。しかし、現状のKubernetesのABACは、リソースの任意の属性に基づくアクセスを許可することは難しいです。

RBACの特性

RBACは、APIオブジェクトとしてRoleやRoleBindingを動的に追加できるため、より柔軟で効率的です。

3. RBACの許認可のパイプライン

Kubernetesの認証パイプラインは、ユーザーがどのリソースにアクセスできるかを判断するためのものです。このパイプラインには、RoleとRoleBindingの概念が含まれています。

Kubernetesでの認証と認可のフロー

  1. ユーザーがリクエストを送信します。
  2. Kubernetes APIサーバーはリクエストを受け取り、認証します。
  3. リクエストが認証されると、認可プロセスが開始されます。
  4. RBACはRoleとRoleBindingをチェックし、ユーザーのリクエストが許可されるかどうかを判断します。

RoleとRoleBindingの相互作用

Roleは、特定のネームスペース内でのリソースへのアクセス権限を定義します。一方、RoleBindingはユーザーやグループにRoleを紐付けます。

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]

上記は、pod-readerというRoleを示しています。このRoleは、podsリソースの取得と一覧表示の権限を持っています。

4. シナリオごとのRBACの設定方法

RBACの設定は、実際のユースケースやシナリオに応じて変わる可能性があります。以下は一般的な設定手順と

実例を示すものです。

RBACの基本的な設定手順

  1. 必要なRoleを定義します。
  2. ユーザーやグループにRoleを紐付けるRoleBindingを作成します。
  3. RoleとRoleBindingをKubernetesクラスタに適用します。

RoleファイルとRoleBindingファイルの作成と適用

Roleファイルは、リソースへのアクセス権限を定義するためのものです。RoleBindingファイルは、ユーザーやグループにRoleを割り当てるためのものです。

# Roleファイル
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]

# RoleBindingファイル
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: "janedoe"
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

上記の設定では、janedoeというユーザーにpod-readerというRoleが紐付けられています。

5. ABACの認証ワークフロー

ABACは、属性に基づいてユーザーのリソースへのアクセスを認証および認可する方法です。ABACポリシーはJSONファイルとして提供され、APIサーバーに供給される必要があります。

属性ベースのアクセス制御

ABACでは、ユーザーの属性(例:ユーザー名、役職など)に基づいてリソースへのアクセスを制御します。ABACの主な利点は、柔軟性とグラヌラリティですが、設定が複雑になる可能性があります。

JSONポリシーファイルの役割

ABACポリシーはJSON形式のファイルとして定義されます。このファイルはAPIサーバーに提供され、リクエストが来るたびに評価されます。

{
  "apiVersion": "abac.authorization.kubernetes.io/v1beta1",
  "kind": "Policy",
  "spec": {
    "user": "alice",
    "namespace": "projectA",
    "resource": "pods",
    "readonly": true
  }
}

このポリシーは、aliceというユーザーがprojectAというネームスペース内のpodsリソースを読み取ることを許可しています。

6. RBACの認証ワークフロー

RBACの認証ワークフローは、RoleとRoleBindingのコンセプトに基づいています。これにより、ユーザーやグループに特定のリソースへのアクセス権限を動的に付与することができます。

RoleとRoleBindingの導入

RBACの核となるのは、RoleとRoleBindingの2つのAPIオブジェクトです。これらのオブジェクトを使用することで、ユーザーにリソースへのアクセスを許可または拒否することができます。

RBACの効率的な管理

RBACは、APIオブジェクトとしてRoleとRoleBindingを動的に追加・削除する能力を持っています。これにより、ABACよりも簡単に

アクセス制御の設定や変更を行うことができます。

まとめ

Kubernetesの認証メカニズムとしてRBACとABACの2つの主な方法が提供されています。現代のKubernetes環境では、RBACが推奨される方法となっています。この記事では、これらのメカニズムの基本的な違いと利点、および実際の設定方法について詳しく説明しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?