Container Service for Kubernetes (ACK) クラスター内の Kubernetes リソースを操作するには、Resource Access Management (RAM) と Kubernetes のロールベースアクセス制御 (RBAC) からなる二層の認可モデルを使用します。Alibaba Cloud アカウントはデフォルトで両方の権限を持っていますが、RAM ユーザーと RAM ロールがクラスターリソースにアクセスするには、両方の権限を明示的に付与する必要があります。
仕組み
ACK 認可システムは、Alibaba Cloud RAM と Kubernetes RBAC の 2 つのレイヤーで構成されており、クラウドリソースからクラスター内リソースまでの完全な認可チェーンを形成します。
RAM: 誰がクラスターにアクセスできるかを決定します。クラウドリソースレベルで動作し、ACK クラスターおよびそれに依存するクラウドサービスでの API 操作に対するプリンシパルの権限を制御します。
RBAC: プリンシパルがクラスター内で何ができるか を決定します。きめ細かな認可を提供し、プリンシパルが特定の Kubernetes リソース (Pod や Deployment など) に対して実行できる操作 (作成や削除など) を定義します。
Kubernetes RBAC の仕組み
ClusterRoleは、クラスター全体に適用される一連の権限を定義します。ClusterRoleBindingは、それをプリンシパルにバインドすることで、権限をクラスター全体で有効にします。Roleは、単一の名前空間にスコープが限定された権限のセットを定義します。RoleBindingはそれをプリンシパルにバインドし、その権限をその名前空間内でのみ有効にします。
シナリオ 1:Alibaba Cloud アカウントによる認可
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[権限付与] をクリックします。
承認 ページで、権限を設定します。
RAMユーザーに権限を付与するには、RAM ユーザー タブをクリックし、対象のRAMユーザーを見つけ、操作 列にある アクセス権限の管理 をクリックして 権限管理 ページに移動します。
RAM ロールに権限を付与するには、RAM ロール タブをクリックし、対象の RAM ロールを見つけ、アクセス権限の管理 をクリックして権限管理ページに移動します。
+ 権限の追加 をクリックします。 画面の指示に従い、対象の RAM ユーザーまたは RAM ロールに対し、クラスターレベルまたは名前空間レベルで権限を追加し、事前定義されたロールを選択します。 ユーザーの職責に基づいてロールを選択します。 各事前定義ロールの権限詳細については、「付録: 事前定義されたロール」をご参照ください。
シナリオ 2:RAM ユーザーまたはロールによる認可
デフォルトでは、RAM ユーザーまたは RAM ロールは他のプリンシパルに RBAC 権限を付与できません。権限管理を簡素化するために、RAM ユーザーまたは RAM ロールを権限管理者として指定します。管理者は、他のプリンシパルに RBAC 権限を付与できるようになります。
ステップ 1:RAM ユーザーまたはロールを管理者として設定
1. 認可のための RAM 権限の付与
方法 1:システムポリシーの使用
システムポリシー AliyunRAMReadOnlyAccess および AliyunCSFullAccess は、広範な権限を付与します。 よりきめ細かい制御については、「方法 2: カスタムポリシーを使用してきめ細かい権限を付与する」をご参照ください。
Alibaba Cloud アカウントでRAM コンソールにログインし、対象の RAM ユーザーまたは RAM ロールを見つけます。
RAM ユーザーの場合: を選択します。 ユーザーリストで対象のユーザーを見つけ、操作 列にある ロール権限の追加 をクリックします。
RAM ロールの場合、 を選択します。 ロールリストで目的のロールを見つけ、操作 列の ロール権限の追加 をクリックします。
Resource Scope を Account に設定します。 Policies セクションで、システムポリシーの AliyunRAMReadOnlyAccess と AliyunCSFullAccess を見つけて選択します。 プロンプトに従って権限付与を完了します。
方法 2:カスタムポリシーの使用
権限管理者には、以下の権限が必要です。
他の RAM プリンシパルに関する情報の表示。
クラスターリストと詳細の表示。
クラスターの既存の RBAC 設定の表示。
クラスター内での RBAC 認可操作の実行。
RAM コンソールにログオンし、次のサンプルポリシーを使用して、対象の 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 ロールに事前定義されたAdmin ロールを付与します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[権限付与] をクリックします。
承認 ページで、権限を設定します。
RAM ユーザーに権限を付与するには、RAM ユーザー タブをクリックし、目的の RAM ユーザーを見つけ、操作 列の アクセス権限の管理 をクリックして 権限管理 ページに移動します。
RAM ロールに権限を付与するには、RAM ロール タブをクリックし、対象の RAM ロールを見つけ、アクセス権限の管理 をクリックして権限管理ページに移動します。
+ 権限の追加 をクリックし、プロンプトに従ってクラスターまたは名前空間レベルで権限を追加して、事前定義されたロールとして Admin を選択します。
「すべてのクラスター」をスコープとして権限を付与すると、権限管理者のアクセス権が新しいクラスターにも自動的に拡張され、繰り返し認可する必要がなくなります。
ステップ 2:他のユーザーへの RBAC 権限の付与
承認されると、権限管理者はシナリオ 1の手順に従って、承認 ページで他の RAM ユーザーまたは RAM ロールに RBAC 権限を付与できます。 承認後、対象の RAM ユーザーまたはロールは、自身の権限スコープ内で Kubernetes リソースを操作できます。
本番環境のベストプラクティス
権限管理のセキュリティと保守性を向上させるために、以下のベストプラクティスに従ってください。
最小権限の原則の遵守
RAM ユーザーやロールなどのプリンシパルには、タスクを実行するために必要な最小限の権限セットのみを付与します。管理者などの高権限ロールを無差別に付与することは避けてください。
きめ細かな認可の実装
階層化された認可の使用:クラウドリソースアクセスのための RAM と、クラスター内リソースアクセスのための RBAC の役割を区別します。
スコープの制限: クラスター全体にわたる
ClusterRoleBindingではなく、可能な限りRoleBindingを使用して、権限を特定のネームスペースに制限します。ロールは的確に選択し、ACK が提供する定義済みのロールを使用してください。カスタムロールを作成する必要がある場合は、権限ルールを正確に定義し、ワイルドカード (
*) の使用は避けてください。
継続的ガバナンスの実践
権限管理は動的なプロセスです。定期的な監査の仕組みを導入し、冗長または過剰な権限を速やかに取り消します。権限管理者などの高権限ロールの操作を記録および監視します。
付録:定義済みロール
権限管理を簡素化し、一般的なユースケースに対応するために、ACK は RBAC の仕組みに基づいた標準の定義済みロールをいくつか提供しています。
事前定義ロール | クラスター内の RBAC 権限 |
[管理者] | クラスターノード、PV、Namespace、リソースクォータなど、すべての Namespace にわたるすべての Kubernetes リソースへの 完全な読み取り/書き込みアクセス権。 |
[読み取り専用管理者] | クラスターノード、PV、Namespace、リソースクォータなど、すべての Namespace にわたるすべての Kubernetes リソースへの 読み取り専用アクセス権。 |
[O&M エンジニア] | すべての Namespace にわたるコンソール公開リソースへのアクセス権です。これには、クラスターノード、PV、Namespace への 読み取り/更新アクセス権 と、その他すべてのリソースへの 読み取り専用アクセス権 が含まれます。 |
[デベロッパー] | クラスターのすべてまたは 指定された Namespace のコンソール公開リソースへの 読み取り/書き込みアクセス権。 |
[制限付きユーザー] | クラスターのすべてまたは 指定された Namespace のコンソール公開リソースへの 読み取り専用アクセス権。 |
[カスタム] | 権限は指定された ClusterRole に依存します。ユーザーやロールが意図しないアクセス権を取得するのを防ぐため、割り当てる前に ClusterRole の権限を確認してください。詳細については、「カスタム RBAC でリソース操作を制限する」をご参照ください。 重要
|
よくある質問
権限エラーの処理
コンソールまたは API を通じて実行された操作に必要な RBAC 権限がない場合、権限エラーが返されます。解決策については、以下の表をご参照ください。
エラーコードまたはメッセージ | 説明 | 解決策 |
| コントロールプレーンログを表示する権限がありません。 | ユーザーに管理者または運用保守エンジニアロールを付与してください。 |
| Helm 操作を実行する権限がありません。 | ユーザーに管理者ロールを付与してください。 |
| 証明書をローテーションする権限がありません。 | ユーザーに管理者ロールを付与してください。 |
| ノードを追加する権限がありません。 | ユーザーに管理者ロールを付与してください。 |
| クラスターの保管時の暗号化ステータスを変更する権限がありません。 | ユーザーに管理者または運用保守エンジニアロールを付与してください。 |
| アプリケーショントリガー情報を取得する権限がありません。 | ユーザーに管理者、運用保守エンジニア、または開発者ロールを付与してください。 |
| クラスターの名前空間をクエリする権限がありません。 | ユーザーに管理者、読み取り専用管理者、運用保守エンジニア、開発者、または制限付きユーザーロールを付与してください。 |
カスタム権限の作成
YAML マニフェストを記述して、カスタムの Role または ClusterRole を作成します。たとえば、Pod の表示のみを許可する ClusterRole を作成し、権限を付与する際にこのカスタムロールを選択します。詳細については、カスタム RBAC を使用してクラスター内リソースでの操作を制限するをご参照ください。
Kubernetes RBAC ポリシーは加算的なもので、許可 (Allow) ルールのみをサポートします。明示的な拒否 (Deny) ルールはありません。
関連トピック
事前定義されたロールがニーズを満たさず、クラスター内リソースへのアクセスにカスタム RBAC 権限が必要な場合は、カスタム RBAC を使用してクラスター内リソースに対する操作を制限するをご参照ください。
さまざまな運用ロールに対する完全な認可ワークフロー (RAM と RBAC 認可の両方を含む) については、以下のトピックをご参照ください。
詳細については、「ACK サービスロール」をご参照ください。
承認中に問題が発生した場合は、「承認管理 FAQ」をご参照ください。