アクセス制御
ロールベースのアクセス制御と認証の詳細
概要
第1章 アクセス制御
手動によるアクセス制御の作成および管理が必要になる場合もあります。IAM (Identity and Access Management) にワークロードをオンボードするには、Red Hat Advanced Cluster Management for Kubernetes の 認証 サービス要件を設定する必要があります。詳細は、OpenShift Container Platform ドキュメントの 認証について の 認証について を参照してください。
ロールベースのアクセス制御および認証では、ユーザーに関連付けられたロールおよび認証情報を識別します。アクセスと認証情報の詳細は、以下のファイルを参照してください。
必要なアクセス権限: クラスターの管理者
1.1. ロールベースのアクセス制御
Red Hat Advanced Cluster Management for Kubernetes は、ロールベースのアクセス制御 (RBAC) に対応しています。ロールによって実行できるアクションが決まります。RBAC は、Red Hat OpenShift Container Platform と同様に Kubernetes の認可メカニズムに基づいています。RBAC の詳細は、OpenShift Container Platform ドキュメント の RBAC の概要を参照してください。
注記: ユーザーロールのアクセス権がない場合には、コンソールのアクションボタンが無効になります。
コンポーネントでサポートされる RBAC の詳細は、以下のセクションを参照してください。
1.1.1. ロールの概要
クラスター別の製品リソースと、スコープに namespace が指定されている製品リソースがあります。アクセス制御に一貫性を持たせるため、クラスターのロールバインディングと、namespace のロールバインディングをユーザーに適用する必要があります。Red Hat Advanced Cluster Management for Kubernetes でサポートされている以下のロール定義の表を参照してください。
ロール | 定義 |
|
これは OpenShift Container Platform のデフォルトのロールです。 |
|
|
|
|
|
|
|
|
|
|
|
|
admin、edit、view |
admin、edit、および view は OpenShift Container Platform のデフォルトロールです。これらのロールに対して namespace に限定されたバインディングが指定されているユーザーは、特定の namespace 内の |
|
|
重要:
- ユーザーは OpenShift Container Platform からプロジェクトを作成できます。これにより、namespace の管理者ロール権限が付与されます。
-
ユーザーにクラスターへのロールアクセスがない場合、クラスター名は表示されません。クラスター名は、
-
の記号で表示されます。
1.1.2. RBAC 実装
RBAC はコンソールレベルと API レベルで検証されます。コンソール内のアクションは、ユーザーのアクセスロールの権限に基づいて有効化/無効化できます。製品の特定ライフサイクルの RBAC の詳細は、以下のセクションを参照してください。
1.1.2.1. クラスターライフサイクル RBAC
以下のクラスターライフサイクル RBAC 操作を確認してください。
全マネージドクラスターを作成して管理するには、以下を行います。
以下のコマンドを入力して、クラスターロール
open-cluster-management:cluster-manager-admin
にバインドするクラスターロールを作成します。oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:cluster-manager-admin --user=<username>
このロールはスーパーユーザーであるため、すべてのリソースとアクションにアクセスできます。このロールを使用すると、クラスターレベルの
managedcluster
リソース、マネージドクラスターを管理するリソースの namespace、namespace 内のリソースを作成できます。また、このロールで、プロバイダー接続、マネージドクラスター作成に使用するベアメタルアセットにアクセスできます。権限エラーを回避するために、ロールの関連付けが必要な ID のusername
を追加する必要がある場合があります。
cluster-name
という名前のマネージドクラスターを管理する方法:以下のコマンドを入力して、クラスターロール
open-cluster-management:admin:<cluster-name>
にバインドするクラスターロールを作成します。oc create clusterrolebinding (role-binding-name) --clusterrole=open-cluster-management:admin:<cluster-name> --user=<username>
このロールを使用すると、クラスターレベルの
managedcluster
リソースに読み取り/書き込みアクセスができるようになります。managedcluster
はクラスターレベルのリソースで、namespace レベルのリソースではないので、このロールが必要です。以下のコマンドを入力して、クラスターロール
admin
にバインドする namespace ロールを作成します。oc create rolebinding <role-binding-name> -n <cluster-name> --clusterrole=admin --user=<username>
このロールでは、マネージドクラスターの namespace 内にあるリソースに対して読み取り/書き込みアクセスができるようになります。
cluster-name
という名前のマネージドクラスターを表示するには、以下を行います。以下のコマンドを入力して、クラスターロール
open-cluster-management:view:<cluster-name>
にバインドするクラスターロールを作成します。oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name> --user=<username>
このロールを使用すると、クラスターレベルの
managedcluster
リソースに読み取りアクセスができるようになります。managedcluster
はクラスターレベルのリソースで、namespace レベルのリソースではないので、このロールが必要です。以下のコマンドを入力して、クラスターロール
view
にバインドする namespace ロールを作成します。oc create rolebinding <role-binding-name> -n <cluster-name> --clusterrole=view --user=<username>
このロールでは、マネージドクラスターの namespace 内にあるリソースに対して読み取り専用アクセスができるようになります。
以下のコマンドを入力して、アクセス可能なマネージドクラスターの一覧を表示します。
oc get managedclusters.clusterview.open-cluster-management.io
このコマンドは、クラスター管理者権限なしで、管理者およびユーザーが使用できます。
以下のコマンドを入力して、アクセス可能なマネージドクラスターセットの一覧を表示します。
oc get managedclustersets.clusterview.open-cluster-management.io
このコマンドは、クラスター管理者権限なしで、管理者およびユーザーが使用できます。
1.1.2.1.1. クラスタープール RBAC
以下のクラスタープール RBAC 操作を確認してください。
クラスタープールのプロビジョニングクラスターを使用するには、以下を実行します。
クラスター管理者は、グループにロールを追加してマネージドクラスターセットを作成し、管理者権限をロールに付与します。
以下のコマンドを使用して、
server-foundation-clusterset
マネージドクラスターセットにadmin
パーミッションを付与します。oc adm policy add-cluster-role-to-group open-cluster-management:clusterset-admin:server-foundation-clusterset server-foundation-team-admin
以下のコマンドを使用して、
server-foundation-clusterset
マネージドクラスターセットにview
権限を付与します。oc adm policy add-cluster-role-to-group open-cluster-management:clusterset-view:server-foundation-clusterset server-foundation-team-user
クラスタープールの namespace (
server-foundation-clusterpool
) を作成します。以下のコマンドを実行して、
server-foundation-team-admin
のserver-foundation-clusterpool
にadmin
権限を付与します。oc adm new-project server-foundation-clusterpool oc adm policy add-role-to-group admin server-foundation-team-admin --namespace server-foundation-clusterpool
チーム管理者として、クラスタープール namespace に、クラスターセットラベル
cluster.open-cluster-management.io/clusterset=server-foundation-clusterset
を使用してocp46-aws-clusterpool
という名前のクラスタープールを作成します。-
server-foundation-webhook
は、クラスタープールにクラスターセットラベルがあるかどうか、またユーザーにクラスターセットのクラスタープールを作成するパーミッションがあるかどうかを確認します。 -
server-foundation-controller
は、server-foundation-team-user
のserver-foundation-clusterpool
namespace にview
権限を付与します。
-
クラスタープールが作成されると、クラスタープールは
clusterdeployment
を作成します。-
server-foundation-controller
は、server-foundation-team-admin
のclusterdeployment
namespace にadmin
パーミッションを付与します。 server-foundation-controller
は、server-foundation-team-user
のclusterdeployment
namespace にview
パーミッションを付与します。注記:
team-admin
およびteam-user
は、clusterpool
、clusterdeplyment
およびclusterclaim
へのadmin
権限があります。
-
クラスターライフサイクルの以下のコンソールおよび API RBAC の表を表示します。
リソース | 管理 | 編集 | 表示 |
---|---|---|---|
クラスター | read, update, delete | - | read |
クラスターセット | get, update, bind, join | 編集ロールなし | get |
マネージドクラスター | read, update, delete | 編集ロールなし | get |
プロバイダー接続 | create, read, update, delete | - | read |
ベアメタルアセット | create, read, update, delete | - | read |
API | 管理 | 編集 | 表示 |
---|---|---|---|
この API のコマンドでは、 | create, read, update, delete | read, update | read |
この API のコマンドでは、 | read | read | read |
| update | update | |
この API のコマンドでは、 | create, read, update, delete | read, update | read |
| read | read | read |
この API のコマンドでは、 | create, read, update, delete | read, update | read |
| create, read, update, delete | read, update | read |
| create, read, update, delete | read, update | read |
| create, read, update, delete | read, update | read |
| create, read, update, delete | read, update | read |
| create, read, update, delete | read, update | read |
| create, read, update, delete | read, update | read |
| create, read, update, delete | read, update | read |
| create, read, update, delete | read, update | read |
1.1.2.2. 認証情報ロールベースのアクセス制御
認証情報へのアクセスは Kubernetes で制御されます。認証情報は Kubernetes Secret として保存され、セキュリティーを確保します。以下の権限は、Red Hat Advanced Cluster Management for Kubernetes のシークレットのアクセスに関係します。
- namespace でシークレットの作成権限のあるユーザーは認証情報を作成できます。
- namespace でシークレットの読み取り権限のあるユーザーは、認証情報を表示することもできます。
-
Kubernetes ロール
admin
およびedit
のあるユーザーは、シークレットの作成と編集が可能です。 -
Kubernetes クラスターロール
view
のあるユーザーは、シークレットの内容を読み取ると、サービスアカウントの認証情報にアクセスできるようになるため、シークレットを表示できません。
1.1.2.3. アプリケーションライフサイクル RBAC
アプリケーションの作成時に、subscription
namespace が作成され、configuration map が subscription
namespace に作成されます。channel
namespace へのアクセス権も必要です。サブスクリプションを適用する場合は、サブスクリプションの管理者である必要があります。アプリケーションの管理の詳細は、サブスクリプション管理者としての許可および拒否リストの作成 を参照してください。
以下のアプリケーションライフサイクル RBAC 操作を確認してください。
username
という名前のユーザーで、すべてのマネージドクラスターでアプリケーションを作成して管理するには、以下を実行します。以下のコマンドを実行して、
open-cluster-management:cluster-manager-admin
クラスターロールへのクラスターロールのバインディングを作成して、username
にバインドします。oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:cluster-manager-admin --user=<username>
このロールはスーパーユーザーであるため、すべてのリソースとアクションにアクセスできます。このロールを使用して、アプリケーションの namespace および namespace 内のすべてのアプリケーションリソースを作成できます。
オプション: 複数の namespace にリソースをデプロイするアプリケーションを作成できます。
open-cluster-management:subscription-admin
クラスターロールにバインドするクラスターロールを作成し、これをusername
という名前のユーザーにバインドします。以下のコマンドを実行します。oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>
username
ユーザーでcluster-name
マネージドクラスターにapplication-name
という名前のアプリケーションを作成し、管理するには、以下を実行します。以下のコマンドを入力して、
open-cluster-management:admin:
クラスターロールへのバインドを作成し、username
にバインドします。oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:admin:<cluster-name> --user=<username>
このロールには、マネージドクラスター
cluster-name
のすべてのapplication
リソースへの読み取りおよび書き込みアクセスがあります。他のマネージドクラスターへのアクセスが必要な場合は、この操作を繰り返します。以下のコマンドを入力し、
admin
ロールを使用してapplication
namespace にバインドする namespace ロールを作成し、それをusername
にバインドします。oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=admin --user=<username>
このロールには、
application
namspace のすべてのapplication
リソースに対する読み取りおよび書き込み権限があります。他のアプリケーションへのアクセスが必要な場合や、アプリケーションが複数の namespace にデプロイされる場合は、これを繰り返します。
オプション: 複数の namespace にリソースをデプロイするアプリケーションを作成できます。
以下のコマンドを入力して、open-cluster-management:subscription-admin クラスターロールへのクラスターロールのバインディングを作成し、
username
にバインドします。oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>
username
という名前のユーザーがcluster-name
という名前のマネージドクラスターでアプリケーションを表示するには、以下を実行します。以下のコマンドを入力して、
open-cluster-management:view:
クラスターロールにバインドするクラスターロールを作成し、これをusername
にバインドします。oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name> --user=<username>
このロールは、マネージドクラスター
cluster-name
のすべてのapplication
リソースへの読み取りアクセスがあります。他のマネージドクラスターへのアクセスが必要な場合は、この操作を繰り返します。view
ロールを使用してapplication
namespace にバインドする namespace ロールを作成し、それをusername
にバインドします。以下のコマンドを入力します。oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=view --user=<username>
このロールには、
application
の namspace にあるすべてのapplication
リソースに対する読み取り権限があります。他のアプリケーションへのアクセスが必要な場合は、この操作を繰り返します。
アプリケーションライフサイクルの以下のコンソールおよび API RBAC の表を表示します。
リソース | 管理 | 編集 | 表示 |
---|---|---|---|
アプリケーション | create, read, update, delete | create, read, update, delete | read |
チャネル | create, read, update, delete | create, read, update, delete | read |
サブスクリプション | create, read, update, delete | create, read, update, delete | read |
配置ルール | create, read, update, delete | create, read, update, delete | read |
API | 管理 | 編集 | 表示 |
---|---|---|---|
applications.app.k8s.io | create, read, update, delete | create, read, update, delete | read |
channels.apps.open-cluster-management.io | create, read, update, delete | create, read, update, delete | read |
deployables.apps.open-cluster-management.io | create, read, update, delete | create, read, update, delete | read |
helmreleases.apps.open-cluster-management.io | create, read, update, delete | create, read, update, delete | read |
placements.apps.open-cluster-management.io | create, read, update, delete | create, read, update, delete | read |
placementrules.apps.open-cluster-management.io | create, read, update, delete | create, read, update, delete | read |
subscriptions.apps.open-cluster-management.io | create, read, update, delete | create, read, update, delete | read |
configmaps | create, read, update, delete | create, read, update, delete | read |
secrets | create, read, update, delete | create, read, update, delete | read |
namespace | create, read, update, delete | create, read, update, delete | read |
1.1.2.4. ガバナンスライフサイクル RBAC
ポリシーが作成されると、ポリシーはクラスターに作成されます。ガバナンスライフサイクルのロールは namespace-scoped です。ユーザーは、マネージドクラスターへのアクセス権も必要です。
ユーザーは、ガバナンスライフサイクル操作を実行するには、ポリシーが作成される namespace、およびポリシーが適用されるマネージドクラスターへのアクセス権が必要です。
以下の例を参照してください。
policy
namespace でポリシーを作成し、これをcluster-name
という名前のマネージドクラスターに適用するには、以下を実行します。open-cluster-management:admin:<cluster-name> クラスターロールを使用して、
バインドする namespace ロールを作成します。以下のコマンドを実行します。policy
namespace にoc create rolebinding <role-binding-name> -n <policy-namespace> --clusterrole=open-cluster-management:admin:<cluster-name> --user=<username>
マネージドクラスターでポリシーを表示するには、以下を実行します。
open-cluster-management:view:<cluster-name> クラスター
ロールにバインドするクラスターロールを作成し、次のコマンドを使用してview
ロールにバインドします。oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name> --user=<username>
以下は、ガバナンスライフサイクルのコンソールおよび API RBAC の表です。
リソース | 管理 | 編集 | 表示 |
---|---|---|---|
ポリシー | create, read, update, delete | read, update | read |
PlacementBindings | create, read, update, delete | read, update | read |
Placements | create, read, update, delete | read, update | read |
PlacementRules | create, read, update, delete | read, update | read |
PolicyAutomations | create, read, update, delete | read, update | read |
API | 管理 | 編集 | 表示 |
---|---|---|---|
policies.policy.open-cluster-management.io | create, read, update, delete | read, update | read |
placementbindings.policy.open-cluster-management.io | create, read, update, delete | read, update | read |
policyautomations.policy.open-cluster-management.io | create, read, update, delete | read, update | read |
1.1.2.5. 可観測性の RBAC
マネージドクラスターの可観測性メトリクスを表示するには、ハブクラスター上のそのマネージドクラスターに対する view
権限が必要です。以下の可観測性機能のリストを参照してください。
マネージドクラスターのメトリクスへのアクセス
ユーザーがハブクラスター上のマネージドクラスターの
view
ロールに割り当てられていない場合、ユーザーはマネージドクラスターメトリックへのアクセスを拒否されます。- リソースの検索
Grafana で可観測性データを表示するには、マネージドクラスターの同じ namespace に RoleBinding
リソースが必要です。以下は RoleBinding
の例です。
kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: <replace-with-name-of-rolebinding> namespace: <replace-with-name-of-managedcluster-namespace> subjects: - kind: <replace with User|Group|ServiceAccount> apiGroup: rbac.authorization.k8s.io name: <replace with name of User|Group|ServiceAccount> roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: view
詳細は、ロールバインディングポリシー を参照してください。可観測性を設定するには、可観測性のカスタマイズ を参照してください。
可観測性のコンポーネントを管理するには、以下の API RBAC の表を確認します。
API | 管理 | 編集 | 表示 |
multiclusterobservabilities.observability.open-cluster-management.io | create, read, update, delete | read, update | read |
| create、get、list、watch、update、delete、patch | - | - |
| get, list, watch | get, list, watch | get, list, watch |
クラスターのセキュリティー保護に関する詳細の確認を続行するには、リスクおよびコンプライアンス を参照してください。