Container Service for Kubernetes (ACK) クラスターへのアクセスには、Resource Access Management (RAM) と Kubernetes のロールベースのアクセス制御 (RBAC) の両方を含む二重認可プロセスが必要です。デフォルトでは、Alibaba Cloud アカウントとクラスター作成者のみがクラスターの完全な管理者権限を持ちます。他の RAM ユーザーまたは RAM ロールがクラスターにアクセスするには、まず RAM でアクセス権を付与された後、さらに RBAC でクラスター内のリソースを操作する権限を付与される必要があります。
仕組み
ACK の 認可モデルは、Alibaba Cloud RAM と Kubernetes RBAC という 2 つの異なるレイヤーを統合しています。これにより、クラウドプラットフォームから個々のクラスターリソースまで、一貫した認可チェーンが作成されます。
RAM: 誰がクラスターにアクセスできるかを制御します。クラウドリソースレベルで動作し、ACK およびその依存サービスへの API コールの権限を管理します。
RBAC: ユーザーがクラスター内で何ができるかを制御します。Kubernetes 内できめ細かな認可を提供し、どのユーザーがどのタイプのリソース (Pod や Deployment など) に対して特定の操作 (create や delete など) を実行できるかを定義します。
Kubernetes RBAC のメカニズム
RBAC 権限は、2 組のオブジェクトを通じて管理します。
ClusterRoleとClusterRoleBinding:ClusterRoleは、クラスター全体に適用される権限のセットを定義します。これはClusterRoleBindingを使用してユーザーまたはロールにバインドされます。RoleとRoleBinding:Roleは、単一の名前空間にスコープが限定された権限を定義します。これはRoleBindingを使用してその名前空間内のユーザーまたはロールにバインドされます。
ユースケース 1: Alibaba Cloud アカウントを使用した RBAC 権限の付与
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[権限付与] をクリックします。
RAM ユーザーまたは RAM ロールに権限を付与します。
RAM ユーザーに権限を付与する場合: [RAM ユーザー] タブで、権限を付与するユーザーを見つけ、[操作] 列の [権限の変更] をクリックします。
RAM ロールに権限を付与する場合: [RAM ロール] タブで、権限を付与するロールを選択し、[権限の変更] をクリックします。
[権限管理] パネルで、[+ 権限の追加] をクリックし、スコープ (特定のクラスターまたは名前空間) を選択し、事前定義されたロールを選択して目的のアクセスレベルを付与します。
ユースケース 2: RAM ユーザーまたは RAM ロールを使用した RBAC 権限の付与
デフォルトでは、RAM ユーザーまたは RAM ロールは他の ID に RBAC 権限を付与できません。この責務を委任するために、RAM ユーザーまたは RAM ロールを権限管理者として指定し、他のユーザーに RBAC 権限を付与させることができます。
ステップ 1: RAM ユーザーまたは RAM ロールを権限管理者として指定
1. 必要な RAM 権限の付与
方法 1: システムポリシーによる権限付与
AliyunRAMReadOnlyAccess および AliyunCSFullAccess システムポリシーは広範な権限を付与します。詳細な権限管理が必要な場合は、「方法 2: カスタムポリシーによる詳細な権限付与」を利用してください。
Alibaba Cloud アカウントを使用して RAM コンソールにログインします。
RAM ユーザーの場合: 左側のナビゲーションウィンドウで、 を選択し、権限を付与するユーザーを見つけ、[操作] 列の [権限の追加] をクリックします。
RAM ロールの場合: 左側のナビゲーションウィンドウで、 を選択し、権限を付与するロールを見つけ、[操作] 列の [権限の付与] をクリックします。
[リソーススコープ] を [アカウント] に設定します。[ポリシー] セクションで、
AliyunRAMReadOnlyAccessおよびAliyunCSFullAccessシステムポリシーを選択し、権限付与を完了します。
方法 2: カスタムポリシーによる詳細な権限付与
権限管理者は、以下の操作を実行する権限が必要です。
他の RAM ID に関する情報を表示する。
クラスターのリストと詳細を表示する。
クラスターの既存の RBAC 設定を表示する。
クラスターで RBAC 権限を付与する。
RAM コンソールにログインし、対象の RAM ユーザーまたは RAM ロールに以下のカスタムポリシーをアタッチします。詳細については、「カスタムポリシーを使用した権限付与」をご参照ください。
{
"Statement": [{
"Action": [
"ram:Get*",
"ram:List*",
"cs:Get*",
"cs:Describe*",
"cs:List*",
"cs:GrantPermission"
],
"Resource": "*",
"Effect": "Allow"
}
],
"Version": "1"
}2. RBAC 管理者権限の付与
Alibaba Cloud アカウントを使用して ACK コンソールにログインします。クラスターのスコープで、指定された RAM ユーザーまたは RAM ロールに事前定義された Administrator ロールを付与します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[権限付与] をクリックします。
RAM ユーザーまたは RAM ロールに権限を付与します。
RAM ユーザーに権限を付与する: [RAM ユーザー] タブで、権限を付与するユーザーを見つけ、[操作] 列の [権限の変更] をクリックします。
RAM ロールに権限を付与する: [RAM ロール] タブで、権限を付与するロールを選択し、[権限の変更] をクリックします。
[権限管理] パネルで、[+ 権限の追加] をクリックし、スコープ (特定のクラスターまたは名前空間) を選択し、事前定義されたロールから [Administrator] を選択します。
この権限をすべてのクラスターに付与すると、今後作成される新しいクラスターにも自動的に適用されます。
ステップ 2: 他の RAM ユーザーまたは RAM ロールに RBAC 権限の付与
設定が完了すると、権限管理者は ACK コンソールにログインし、[権限付与] ページで他の RAM ユーザーまたは RAM ロールに RBAC 権限を付与できます。
本番運用時の注意点
権限管理のセキュリティと保守性を向上させるために、以下のベストプラクティスに従うことを推奨します。
最小権限の原則
RAM ユーザーまたは RAM ロールには、タスクの実行に必要な最小限の権限セットのみを付与します。管理者などの高い権限を持つロールを無差別に付与することは避けてください。
きめ細かな認可
階層化された権限付与: RAM によるクラウドリソースへのアクセスと、RBAC によるクラスターリソースへのアクセスの責務を区別します。
スコープの収束: 可能な限り、クラスター全体に適用される
ClusterRoleBindingではなく、RoleBindingを使用して特定の名前空間内に権限を限定します。ロールの的確な選択: 事前定義された ACK ロールから始めます。カスタムロールを作成する場合は、ルールを具体的に定義し、ワイルドカード (
*) の使用を避けてください。
継続的なガバナンス
定期的に権限を監査し、冗長または過剰な権限を取り消します。権限管理者などの高い権限を持つアカウントによって実行されるすべてのアクションを監視およびログに記録します。
付録: 事前定義された RBAC ロール
権限管理を簡素化し、一般的なユーザーシナリオをサポートするために、ACK は RBAC のメカニズムに基づいたさまざまな標準化された事前定義ロールを提供しています。
事前定義されたロール | クラスターリソースに対する RBAC 権限 |
Administrator | すべての名前空間のリソースに対する RBAC の読み取りおよび書き込み権限、ならびにノード、ボリューム、名前空間、およびクォータに対する読み取りおよび書き込み権限。 |
Read-only Administrator | すべての名前空間における Kubernetes リソースに対する RBAC の読み取り専用権限。 |
O&M エンジニア | 以下の RBAC 権限を付与します。
|
開発者 | 指定された名前空間またはすべての名前空間におけるコンソールで表示可能な Kubernetes リソースに対する RBAC の読み取りおよび書き込み権限。 |
制限付きユーザー | 指定された名前空間またはすべての名前空間におけるコンソールで表示可能な Kubernetes リソースに対する RBAC の読み取り専用権限。 |
Custom | カスタムロールの権限は、選択した ClusterRole によって決まります。ClusterRole を選択する前に、その権限を確認し、RAM ユーザーまたは RAM ロールに必要な権限のみを付与するようにしてください。カスタム権限の詳細については、「クラスター内のリソース操作を制限するためのカスタムRBACロールの使用」をご参照ください。 重要 cluster-admin ロールを RAM ユーザーまたは RAM ロールに割り当てると、そのユーザーまたはロールは、所属する Alibaba Cloud アカウントと同じ権限を取得します。これにより、クラスター内のすべてのリソースに対する完全な制御が可能になります。cluster-admin ロールを RAM ユーザーまたは RAM ロールに割り当てる際は、注意してください。 |
よくある質問
権限エラーが発生した場合はどうすればよいですか?
コンソールまたは OpenAPI での操作が、RBAC 権限の不足により失敗した場合、システムは権限拒否のエラーコードを返します。一般的なエラーとその解決策については、次の表を参照してください。
エラーコード/メッセージ | 説明 | 解決策 |
| コントロールプレーンのログを表示する権限がありません。 | ユーザーに Administrator または O&M エンジニアロールを付与します。 |
| Helm 操作を実行する権限がありません。 | ユーザーに Administrator ロールを付与します。 |
| 証明書をローテーションする権限がありません。 | ユーザーに Administrator ロールを付与します。 |
| ノードを追加する権限がありません。 | ユーザーに Administrator または O&M エンジニアロールを付与します。 |
| クラスターの KMS 保存時暗号化ステータスを変更する権限がありません。 | ユーザーに Administrator または O&M エンジニアロールを付与します。 |
| アプリケーションのトリガー情報を取得する権限がありません。 | ユーザーに Administrator、O&M エンジニア、または開発者ロールを付与します。 |
| クラスターの名前空間をクエリする権限がありません。 | ユーザーに Administrator、O&M エンジニア、開発者、または制限付きユーザーロールを付与します。 |
事前定義された RBAC ロールがニーズを満たさない場合、カスタム権限を作成するにはどうすればよいですか?
YAML マニフェストを使用して、カスタムの Role または ClusterRole を作成できます。 たとえば、Pod の表示のみを許可する ClusterRole などです。 その後、権限を割り当てる際に、カスタム権限タイプを選択し、新しく作成した ClusterRole にバインドします。 詳細については、「カスタム RBAC を使用してクラスターリソースに対する操作を制限する」をご参照ください。
Kubernetes RBAC ポリシーは加算的であり、Allow (許可) ルールのみをサポートします。明示的な Deny (拒否) ルールはありません。
関連ドキュメント
事前定義されたロールが不十分な場合は、「カスタム RBAC を使用してクラスターリソースへのアクセスを制限する」をご参照ください。
さまざまなユーザーロールに対する完全な権限付与ガイド (RAM と RBAC の両方を含む) については、以下のトピックをご参照ください。
ACK で使用されるサービスロールの一覧については、「ACK ロール」をご参照ください。
その他の権限付与関連の問題のトラブルシューティングについては、「権限管理に関するよくある質問」をご参照ください。