Container Service for Kubernetes (ACK) コンソールで定義済みのClusterRolesが権限要件を満たさない場合は、詳細なロールベースのアクセス制御 (RBAC) 権限のためにClusterRolesとRolesをカスタマイズできます。 これにより、ビジネス要件とセキュリティポリシーに基づいて権限ポリシーを柔軟に設定できます。 このトピックでは、カスタムRBAC権限を作成する方法について説明します。
RBAC の権限
Role
は特定の名前空間内の権限を定義し、ClusterRole
はクラスターレベルで権限を定義します。 次のリソースのポリシーの説明に基づいて、カスタムのRole
およびClusterRole
YAMLマニフェストを作成し、ACKクラスターリソースの詳細なアクセス制御を行うことができます。
ロール
次のYAMLテンプレートは、デフォルトの名前空間内のポッドリソースに対する読み取り権限を持つmy-Role
という名前のロールを定義します。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: my-role
rules: # A list of permission rules.
- apiGroups: [""] # The API group to which the resource belongs.
resources: ["pods"] # The pod resource types.
verbs: ["get", "list"] # The get and list permission policies.
ClusterRole
次のYAMLテンプレートでは、クラスター内のポッドとサービスリソースに対する読み取り権限を持つ、my-ClusterRole
という名前のclusterroleを定義します。
ClusterRoleはクラスタースコープのリソースであり、YAML設定ファイルで名前空間パラメーターを指定することはできません。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# namespace: default
name: my-clusterrole
rules: # A list of permission rules.
- apiGroups: [""] # The API group to which the resource belongs.
resources: ["pods"] # The pod resource types.
verbs: ["get", "list"] # The get and list permission policies.
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list"]
クラスターリソースのResource access Management (RAM) ユーザーまたはロールの詳細なアクセス制御を実現するには、以下の一般的なリソースタイプのポリシーの説明に基づいて、さまざまなリソースに対してカスタムRBAC権限を作成します。
共通リソースタイプのポリシーの説明
読み取り権限
get
: 指定されたリソースの詳細情報を取得します。list
: リソースコレクションのリストを取得します。watch
: リソースの変更を監視し、リアルタイムの更新を受信します。
書き込み権限
create
: リソースインスタンスを作成します。update
: 既存のリソースを変更します。patch
: 既存のリソースを部分的に変更します。delete
: 指定したリソースを削除します。
リソース名 | リソースタイプ | APIグループ | 権限ポリシー |
ポッド | リソース: ["pods"] | apiGroups: [""] |
|
サービス | リソース: ["services"] | apiGroups: [""] |
|
設定マップ | resources: ["configmaps"] | apiGroups: [""] |
|
シークレット | リソース: ["secrets"] | apiGroups: [""] |
|
PersistentVolumes | resources: ["persistentvolumes"] | apiGroups: [""] |
|
PersistentVolumeClaim | resources: ["persistentvolumeclaims"] | apiGroups: [""] |
|
名前スペース | resources: ["namespaces"] | apiGroups: [""] |
|
デプロイメント | リソース: ["deployments"] | apiGroups: ["apps"] |
|
DaemonSet | リソース: ["daemonsets"] | apiGroups: ["apps"] |
|
StatefulSet | リソース: ["statefulsets"] | apiGroups: ["apps"] |
|
イングレス | リソース: ["ingresses"] | apiGroups: ["networking.k8s.io"] |
|
ネットワークポリシー | リソース: ["networkpolicies"] | apiGroups: ["networking.k8s.io"] |
|
Jobs | リソース: ["jobs"] | apiGroups: ["batch"] |
|
CronJobs | リソース: ["cronjobs"] | apiGroups: ["batch"] |
|
StorageClasses | resources: ["storageclasses"] | apiGroups: ["storage.k8s.io"] |
|
HorizontalPodAutoscalers | リソース: ["horizontalpodautoscalers"] | apiGroups: ["autoscaling"] |
|
手順
コンソールまたはkubectl
からRBAC権限をカスタマイズできます。
ACKコンソールは、クラスター内でRBAC権限を持つカスタムClusterRolesのバインドのみをサポートします。 カスタムロールを特定の権限にバインドするには、kubectl
コマンドを使用します。
コンソール
ステップ1: カスタムRBAC権限を作成する
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
On the役割ページを選択し、クラスターの役割タブをクリックします。 次に、[OK] をクリックします。
[Create YAML] パネルで、ClusterRoleのYAMLコンテンツを入力し、[OK] をクリックしてClusterRoleを作成します。
この手順では、例としてClusterRoleのYAMLテンプレートを使用します。 作成後、[クラスターの役割] タブでカスタム権限my-clusterroleを表示できます。
手順2: 認証にカスタムRBAC権限を使用する
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[権限付与] をクリックします。
On the承認ページ、権限を付与します。
RAM ユーザーへの権限付与
[RAMユーザー] タブをクリックし、リストで管理するRAMユーザーを見つけ、[権限の変更] をクリックして [権限管理] パネルを開きます。 複数のRAMユーザーを選択して権限を付与することもできます。
RAMロールに権限を付与する
[RAMロール] タブをクリックし、[RAMロール名] を指定し、[権限の変更] をクリックして [権限管理] パネルを開きます。
説明RAMロールを手動で入力するか、ドロップダウンリストからRAMロールを選択できます。 [RAMロール名] フィールドの横にある空白のボックスをクリックできます。 既存のRAMロールのリストが表示されます。 次に、リストから既存のRAMロールを選択して権限を付与します。
[権限管理] パネルで、[権限の追加] をクリックします。 [権限の追加] セクションで、作成したClusterRoleに関連付けられている [クラスター] と承認する名前空間を選択します。 [権限管理] で [カスタム] を選択し、右側のドロップダウンリストから [my-clusterrole] を選択し、[送信] をクリックします。
kubectl
手順1: カスタムRBAC権限の作成
次のYAMLテンプレートを使用して、my-clusterrole.yamlという名前のファイルを作成します。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: my-clusterrole namespace: default rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["services"] verbs: ["get", "list", "watch"]
次のコマンドを実行して、ClusterRoleを作成します。
kubectl apply -f my-clusterrole.yaml
ステップ2: 認可オブジェクトIDの取得
RAMユーザーを認証するには、RAMユーザー名を照会してUserIdを取得します。 詳細については、「GetUser」をご参照ください。
RAMロールを許可するには、RAMロール名を照会してRoleIdを取得します。 詳細については、「GetRole」をご参照ください。
ステップ3: 認証にカスタムRBAC権限を使用する
次のYAMLテンプレートを使用して、my-clusterrole-binding.yamlという名前のファイルを作成します。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: my-clusterrole-binding subjects: - kind: User name: "20811XXXXXXXXX2288" # UserId or RoleId of the authorization object obtained in Step 2. roleRef: kind: ClusterRole name: my-clusterrole apiGroup: rbac.authorization.k8s.io
次のコマンドを実行して、ClusterRoleBindingを作成します。
kubectl apply -f my-clusterrole-binding.yaml
RAMユーザーにカスタムRBAC権限が付与されたら、ターゲットクラスターのKubeConfigを取得し、kubectlツールを使用してクラスターに接続することでアクセスを確認します。