11.2. RBAC の使用によるパーミッションの定義および適用
ロールベースのアクセス制御を理解し、これを適用します。
11.2.1. RBAC の概要 リンクのコピーリンクがクリップボードにコピーされました!
ロールベースアクセス制御 (RBAC) オブジェクトは、ユーザーがプロジェクト内で所定のアクションを実行することが許可されるかどうかを決定します。
これにより、プラットフォーム管理者はクラスターロールおよびバインディングを使用して、OpenShift Container Platform プラットフォーム自体およびすべてのプロジェクトへの各種のアクセスレベルを持つユーザーを制御できます。
開発者はローカルロールとバインディングを使用して、プロジェクトにアクセスできるユーザーを制御できます。認可は認証とは異なる手順であることに注意してください。認証はアクションを実行するユーザーのアイデンティティーの判別により密接に関連しています。
認可は以下を使用して管理されます。
| 認可オブジェクト | 説明 | 
|---|---|
|   ルール  |   
									オブジェクトのセットで許可されている動詞のセット(例: ユーザーまたはサービスアカウントが Pod の   | 
|   ロール  |   ルールのコレクション。ユーザーおよびグループを複数のロールに関連付けたり、バインドしたりできます。  | 
|   バインディング  |   ロールを使用したユーザー/グループ間の関連付けです。  | 
2 つのレベルの RBAC ロールおよびバインディングが認可を制御します。
| RBAC レベル | 説明 | 
|---|---|
|   クラスター RBAC  |   すべてのプロジェクトで適用可能なロールおよびバインディングです。クラスターロール はクラスター全体で存在し、クラスターロールのバインディング はクラスターロールのみを参照できます。  | 
|   ローカル RBAC  |   所定のプロジェクトにスコープ設定されているロールおよびバインディングです。ローカルロール は単一プロジェクトのみに存在し、ローカルロールのバインディングはクラスターロールおよびローカルロールの 両方 を参照できます。  | 
クラスターのロールバインディングは、クラスターレベルで存在するバインディングですが、ロールバインディングはプロジェクトレベルで存在します。ロールバインディングは、プロジェクトレベルで存在します。クラスターの view (表示) ロールは、ユーザーがプロジェクトを表示できるようローカルのロールバインディングを使用してユーザーにバインドする必要があります。ローカルロールは、クラスターのロールが特定の状況に必要なパーミッションのセットを提供しない場合にのみ作成する必要があります。
この 2 つのレベルからなる階層により、ローカルロールで個別プロジェクト内のカスタマイズが可能になる一方で、クラスターロールによる複数プロジェクト間での再利用が可能になります。
評価時に、クラスターロールのバインディングおよびローカルロールのバインディングが使用されます。以下に例を示します。
- クラスター全体の "allow" ルールがチェックされます。
 - ローカルにバインドされた "allow" ルールがチェックされます。
 - デフォルトで拒否します。
 
11.2.1.1. デフォルトのクラスターロール リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform には、クラスター全体で、またはローカルにユーザーおよびグループにバインドできるデフォルトのクラスターロールのセットが含まれます。
デフォルトのクラスターロールを手動で変更することは推奨されません。このようなシステムロールへの変更は、クラスターが正常に機能しなくなることがあります。
| デフォルトのクラスターロール | 説明 | 
|---|---|
|   
										  |   
										プロジェクトマネージャー。ローカルバインディングで使用される場合、  | 
|   
										  |   プロジェクトおよびユーザーに関する基本的な情報を取得できるユーザーです。  | 
|   
										  |   すべてのプロジェクトですべてのアクションを実行できるスーパーユーザーです。ローカルバインディングでユーザーにバインドされる場合は、クォータに対する完全な制御およびプロジェクト内のすべてのリソースに対するすべてのアクションを実行できます。  | 
|   
										  |   基本的なクラスターのステータス情報を取得できるユーザーです。  | 
|   
										  |   ほとんどのオブジェクトを取得または表示できるが、変更できないユーザー。  | 
|   
										  |   プロジェクトのほとんどのプロジェクトを変更できるが、ロールまたはバインディングを表示したり、変更したりする機能を持たないユーザーです。  | 
|   
										  |   独自のプロジェクトを作成できるユーザーです。  | 
|   
										  |   変更できないものの、プロジェクトでほとんどのオブジェクトを確認できるユーザーです。それらはロールまたはバインディングを表示したり、変更したりできません。  | 
						ローカルバインディングとクラスターバインディングに関する違いに留意してください。ローカルのロールバインディングを使用して cluster-admin ロールをユーザーにバインドする場合、このユーザーがクラスター管理者の特権を持っているように表示されます。しかし、実際はそうではありません。一方、cluster-admin をプロジェクトのユーザーにバインドすると、そのプロジェクトにのみ有効なスーパー管理者の権限がそのユーザーに付与されます。そのユーザーはクラスターロール admin のパーミッションを有するほか、レート制限を編集する機能などの、そのプロジェクトに関するいくつかの追加パーミッションを持ちます。このバインディングは、クラスター管理者にバインドされるクラスターのロールバインディングをリスト表示しない Web コンソール UI を使うと分かりにくくなります。ただし、これは、cluster-admin をローカルにバインドするために使用するローカルのロールバインディングをリスト表示します。
					
クラスターロール、クラスターロールのバインディング、ローカルロールのバインディング、ユーザー、グループおよびサービスアカウントの関係は以下に説明されています。
							get pods/exec、get pods/*、および get * ルールは、ロールに適用されると実行権限を付与します。最小権限の原則を適用し、ユーザーおよびエージェントに必要な最小限の RBAC 権限のみを割り当てます。詳細は、RBAC ルールによる実行権限の許可 を参照してください。
						
11.2.1.2. 認可の評価 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は以下を使用して認可を評価します。
- アイデンティティー
 - ユーザーが属するユーザー名とグループのリスト。
 - アクション
 実行する動作。ほとんどの場合、これは以下で構成されます。
- プロジェクト: アクセスするプロジェクト。プロジェクトは追加のアノテーションを含む Kubernetes namespace であり、これにより、ユーザーのコミュニティーは、他のコミュニティーと分離された状態で独自のコンテンツを編成し、管理できます。
 - 
											動詞: 
get、list、create、update、delete、deletecollection、またはwatchなどのアクション自体。 - リソース名: アクセスする API エンドポイント。
 
- バインディング
 - バインディングの詳細なリスト、ロールを持つユーザーまたはグループ間の関連付け。
 
OpenShift Container Platform は以下の手順を使用して認可を評価します。
- アイデンティティーおよびプロジェクトでスコープ設定されたアクションは、ユーザーおよびそれらのグループに適用されるすべてのバインディングを検索します。
 - バインディングは、適用されるすべてのロールを見つけるために使用されます。
 - ロールは、適用されるすべてのルールを見つけるために使用されます。
 - 一致を見つけるために、アクションが各ルールに対してチェックされます。
 - 一致するルールが見つからない場合、アクションはデフォルトで拒否されます。
 
ユーザーおよびグループは一度に複数のロールに関連付けたり、バインドしたりできることに留意してください。
プロジェクト管理者は CLI を使用してローカルロールとローカルバインディングを表示できます。これには、それぞれのロールが関連付けられる動詞およびリソースのマトリクスが含まれます。
プロジェクト管理者にバインドされるクラスターロールは、ローカルバインディングによってプロジェクト内で制限されます。これは、cluster-admin または system:admin に付与されるクラスターロールのようにクラスター全体でバインドされる訳ではありません。
クラスターロールは、クラスターレベルで定義されるロールですが、クラスターレベルまたはプロジェクトレベルのいずれかでバインドできます。
11.2.1.2.1. クラスターロールの集計 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの admin、edit、view、cluster-reader クラスターロールでは、クラスターロールの集約 がサポートされており、各ロールは新規ルール作成時に動的に更新されます。この機能は、カスタムリソースを作成して Kubernetes API を拡張する場合にのみ適用できます。
11.2.2. プロジェクトおよび namespace リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes namespace は、クラスターでスコープ設定するメカニズムを提供します。namespace の詳細は、Kubernetes ドキュメント を参照してください。
namespace は、次の一意のスコープを提供します。
- 基本的な命名の衝突を避けるための名前付きリソース。
 - 信頼されるユーザーに委任された管理権限。
 - コミュニティーリソースの消費を制限する機能。
 
システム内の大半のオブジェクトのスコープは namespace で設定されますが、一部はノードやユーザーを含め、除外され、namespace が設定されません。
プロジェクト は追加のアノテーションを持つ Kubernetes namespace であり、通常ユーザーのリソースへのアクセスが管理される中心的な手段です。プロジェクトはユーザーのコミュニティーが他のコミュニティーとは切り離してコンテンツを編成し、管理することを許可します。ユーザーには、管理者によってプロジェクトへのアクセスが付与される必要があり、許可される場合はプロジェクトを作成でき、それらの独自のプロジェクトへのアクセスが自動的に付与されます。
					プロジェクトには、別個の name、displayName、および description を設定できます。
				
- 
							必須の 
nameはプロジェクトの一意の識別子であり、CLI ツールまたは API を使用する場合に最も表示されます。名前の最大長さは 63 文字です。 - 
							オプションの 
displayNameは、Web コンソールでのプロジェクトの表示方法を示します (デフォルトはnameに設定される)。 - 
							オプションの 
descriptionには、プロジェクトのさらに詳細な記述を使用でき、これも Web コンソールで表示できます。 
各プロジェクトは、以下の独自のセットのスコープを設定します。
| オブジェクト | 説明 | 
|---|---|
|   
									  |   Pod、サービス、レプリケーションコントローラーなど。  | 
|   
									  |   ユーザーがオブジェクトに対してアクションを実行できるかどうかに関するルール。  | 
|   
									  |   制限を設定できるそれぞれの種類のオブジェクトのクォータ。  | 
|   
									  |   サービスアカウントは、プロジェクトのオブジェクトへの指定されたアクセスで自動的に機能します。  | 
クラスター管理者はプロジェクトを作成でき、プロジェクトの管理者権限をユーザーコミュニティーの任意のメンバーに委任できます。クラスター管理者は、開発者が独自のプロジェクトを作成することも許可できます。
開発者および管理者は、CLI または Web コンソールを使用してプロジェクトとの対話を実行できます。
11.2.3. デフォルトプロジェクト リンクのコピーリンクがクリップボードにコピーされました!
					OpenShift Container Platform にはデフォルトのプロジェクトが多数含まれ、openshift- で始まるプロジェクトはユーザーにとって最も重要になります。これらのプロジェクトは、Pod として実行されるマスターコンポーネントおよび他のインフラストラクチャーコンポーネントをホストします。Critical Pod アノテーション を持つこれらの namespace で作成される Pod は Critical (重要) とみなされ、kubelet によるアドミッションが保証されます。これらの namespace のマスターコンポーネント用に作成された Pod には、すでに Critical のマークが付けられています。
				
デフォルトプロジェクトでワークロードを実行したり、デフォルトプロジェクトへのアクセスを共有したりしないでください。デフォルトのプロジェクトは、コアクラスターコンポーネントを実行するために予約されています。
						デフォルトプロジェクトである default、kube-public、kube-system、openshift、openshift-infra、openshift-node、および openshift.io/run-level ラベルが 0 または 1 に設定されているその他のシステム作成プロジェクトは、高い特権があるとみなされます。Pod セキュリティーアドミッション、Security Context Constraints、クラスターリソースクォータ、イメージ参照解決などのアドミッションプラグインに依存する機能は、高い特権を持つプロジェクトでは機能しません。
					
11.2.4. クラスターロールおよびバインディングの表示 リンクのコピーリンクがクリップボードにコピーされました!
					oc CLI で oc describe コマンドを使用して、クラスターロールおよびバインディングを表示できます。
				
前提条件
- 
							
ocCLI がインストールされている。 - クラスターロールおよびバインディングを表示するパーミッションを取得します。
 
					クラスター全体でバインドされた cluster-admin のデフォルトのクラスターロールを持つユーザーは、クラスターロールおよびバインディングの表示を含む、すべてのリソースでのすべてのアクションを実行できます。
				
手順
クラスターロールおよびそれらの関連付けられたルールセットを表示するには、以下を実行します。
oc describe clusterrole.rbac
$ oc describe clusterrole.rbacCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各種のロールにバインドされたユーザーおよびグループを示す、クラスターのロールバインディングの現在のセットを表示するには、以下を実行します。
oc describe clusterrolebinding.rbac
$ oc describe clusterrolebinding.rbacCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
11.2.5. ローカルのロールバインディングの表示 リンクのコピーリンクがクリップボードにコピーされました!
					oc CLI で oc describe コマンドを使用して、ローカルロールおよびバインディングを表示できます。
				
前提条件
- 
							
ocCLI がインストールされている。 ローカルロールおよびバインディングを表示するパーミッションを取得します。
- 
									クラスター全体でバインドされた 
cluster-adminのデフォルトのクラスターロールを持つユーザーは、ローカルロールおよびバインディングの表示を含む、すべてのリソースでのすべてのアクションを実行できます。 - 
									ローカルにバインドされた 
adminのデフォルトのクラスターロールを持つユーザーは、そのプロジェクトのロールおよびバインディングを表示し、管理できます。 
- 
									クラスター全体でバインドされた 
 
手順
現在のプロジェクトの各種のロールにバインドされたユーザーおよびグループを示す、ローカルのロールバインディングの現在のセットを表示するには、以下を実行します。
oc describe rolebinding.rbac
$ oc describe rolebinding.rbacCopy to Clipboard Copied! Toggle word wrap Toggle overflow 別のプロジェクトのローカルロールバインディングを表示するには、
-nフラグをコマンドに追加します。oc describe rolebinding.rbac -n joe-project
$ oc describe rolebinding.rbac -n joe-projectCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
11.2.6. ロールのユーザーへの追加 リンクのコピーリンクがクリップボードにコピーされました!
					oc adm 管理者 CLI を使用してロールおよびバインディングを管理できます。
				
					ロールをユーザーまたはグループにバインドするか、追加することにより、そのロールによって付与されるアクセスがそのユーザーまたはグループに付与されます。oc adm policy コマンドを使用して、ロールのユーザーおよびグループへの追加、またはユーザーおよびグループからの削除を行うことができます。
				
デフォルトのクラスターロールのすべてを、プロジェクト内のローカルユーザーまたはグループにバインドできます。
手順
ロールを特定プロジェクトのユーザーに追加します。
oc adm policy add-role-to-user <role> <user> -n <project>
$ oc adm policy add-role-to-user <role> <user> -n <project>Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、以下を実行して
adminロールをjoeプロジェクトのaliceユーザーに追加できます。oc adm policy add-role-to-user admin alice -n joe
$ oc adm policy add-role-to-user admin alice -n joeCopy to Clipboard Copied! Toggle word wrap Toggle overflow ヒントまたは、以下の YAML を適用してユーザーにロールを追加できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力でローカルロールバインディングを確認し、追加の内容を確認します。
oc describe rolebinding.rbac -n <project>
$ oc describe rolebinding.rbac -n <project>Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、
joeプロジェクトのローカルロールバインディングを表示するには、以下を実行します。oc describe rolebinding.rbac -n joe
$ oc describe rolebinding.rbac -n joeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
 aliceユーザーがadminsRoleBindingに追加されています。
11.2.7. ローカルロールの作成 リンクのコピーリンクがクリップボードにコピーされました!
プロジェクトのローカルロールを作成し、これをユーザーにバインドできます。
手順
プロジェクトのローカルロールを作成するには、以下のコマンドを実行します。
oc create role <name> --verb=<verb> --resource=<resource> -n <project>
$ oc create role <name> --verb=<verb> --resource=<resource> -n <project>Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドで以下を指定します。
- 
									
<name>: ローカルのロール名です。 - 
									
<verb>: ロールに適用する動詞のコンマ区切りのリストです。 - 
									
<resource>: ロールが適用されるリソースです。 - 
									
<project>(プロジェクト名) 
たとえば、ユーザーが
blueプロジェクトで Pod を閲覧できるようにするローカルロールを作成するには、以下のコマンドを実行します。oc create role podview --verb=get --resource=pod -n blue
$ oc create role podview --verb=get --resource=pod -n blueCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 
									
 新規ロールをユーザーにバインドするには、以下のコマンドを実行します。
oc adm policy add-role-to-user podview user2 --role-namespace=blue -n blue
$ oc adm policy add-role-to-user podview user2 --role-namespace=blue -n blueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
11.2.8. クラスターロールの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラスターロールを作成できます。
手順
クラスターロールを作成するには、以下のコマンドを実行します。
oc create clusterrole <name> --verb=<verb> --resource=<resource>
$ oc create clusterrole <name> --verb=<verb> --resource=<resource>Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドで以下を指定します。
- 
									
<name>: ローカルのロール名です。 - 
									
<verb>: ロールに適用する動詞のコンマ区切りのリストです。 - 
									
<resource>: ロールが適用されるリソースです。 
たとえば、ユーザーが Pod を閲覧できるようにするクラスターロールを作成するには、以下のコマンドを実行します。
oc create clusterrole podviewonly --verb=get --resource=pod
$ oc create clusterrole podviewonly --verb=get --resource=podCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 
									
 
11.2.9. ローカルロールバインディングのコマンド リンクのコピーリンクがクリップボードにコピーされました!
					以下の操作を使用し、ローカルのロールバインディングでのユーザーまたはグループの関連付けられたロールを管理する際に、プロジェクトは -n フラグで指定できます。これが指定されていない場合には、現在のプロジェクトが使用されます。
				
ローカル RBAC 管理に以下のコマンドを使用できます。
| コマンド | 説明 | 
|---|---|
|   
									  |   リソースに対してアクションを実行できるユーザーを示します。  | 
|   
									  |   指定されたロールを現在のプロジェクトの指定ユーザーにバインドします。  | 
|   
									  |   現在のプロジェクトの指定ユーザーから指定されたロールを削除します。  | 
|   
									  |   現在のプロジェクトの指定ユーザーと、そのすべてのロールを削除します。  | 
|   
									  |   指定されたロールを現在のプロジェクトの指定グループにバインドします。  | 
|   
									  |   現在のプロジェクトの指定グループから指定されたロールを削除します。  | 
|   
									  |   現在のプロジェクトの指定グループと、そのすべてのロールを削除します。  | 
11.2.10. クラスターのロールバインディングコマンド リンクのコピーリンクがクリップボードにコピーされました!
					以下の操作を使用して、クラスターのロールバインディングも管理できます。クラスターのロールバインディングは namespace を使用していないリソースを使用するため、-n フラグはこれらの操作に使用されません。
				
| コマンド | 説明 | 
|---|---|
|   
									  |   指定されたロールをクラスターのすべてのプロジェクトの指定ユーザーにバインドします。  | 
|   
									  |   指定されたロールをクラスターのすべてのプロジェクトの指定ユーザーから削除します。  | 
|   
									  |   指定されたロールをクラスターのすべてのプロジェクトの指定グループにバインドします。  | 
|   
									  |   指定されたロールをクラスターのすべてのプロジェクトの指定グループから削除します。  | 
11.2.11. クラスター管理者の作成 リンクのコピーリンクがクリップボードにコピーされました!
					cluster-admin ロールは、クラスターリソースの変更など、OpenShift Container Platform クラスターでの管理者レベルのタスクを実行するために必要です。
				
前提条件
- クラスター管理者として定義するユーザーを作成している。
 
手順
ユーザーをクラスター管理者として定義します。
oc adm policy add-cluster-role-to-user cluster-admin <user>
$ oc adm policy add-cluster-role-to-user cluster-admin <user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow