すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:カスタムRBACロールを使用してクラスター内のリソース操作を制限する

最終更新日:Dec 17, 2024

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: [""]

動詞: ["get" 、"list" 、"watch" 、"update" 、"create" 、"patch" 、"delete" 、"exec" 、"proxy"]

サービス

リソース: ["services"]

apiGroups: [""]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

設定マップ

resources: ["configmaps"]

apiGroups: [""]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

シークレット

リソース: ["secrets"]

apiGroups: [""]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

PersistentVolumes

resources: ["persistentvolumes"]

apiGroups: [""]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

PersistentVolumeClaim

resources: ["persistentvolumeclaims"]

apiGroups: [""]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

名前スペース

resources: ["namespaces"]

apiGroups: [""]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

デプロイメント

リソース: ["deployments"]

apiGroups: ["apps"]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

DaemonSet

リソース: ["daemonsets"]

apiGroups: ["apps"]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

StatefulSet

リソース: ["statefulsets"]

apiGroups: ["apps"]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

イングレス

リソース: ["ingresses"]

apiGroups: ["networking.k8s.io"]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

ネットワークポリシー

リソース: ["networkpolicies"]

apiGroups: ["networking.k8s.io"]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

Jobs

リソース: ["jobs"]

apiGroups: ["batch"]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

CronJobs

リソース: ["cronjobs"]

apiGroups: ["batch"]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

StorageClasses

resources: ["storageclasses"]

apiGroups: ["storage.k8s.io"]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

HorizontalPodAutoscalers

リソース: ["horizontalpodautoscalers"]

apiGroups: ["autoscaling"]

動詞: ["get", "list", "watch", "update", "create", "patch", "delete"]

手順

image

コンソールまたはkubectlからRBAC権限をカスタマイズできます。

重要

ACKコンソールは、クラスター内でRBAC権限を持つカスタムClusterRolesのバインドのみをサポートします。 カスタムロールを特定の権限にバインドするには、kubectlコマンドを使用します。

コンソール

ステップ1: カスタムRBAC権限を作成する

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[セキュリティ] > [ロール] を選択します。

  3. On the役割ページを選択し、クラスターの役割タブをクリックします。 次に、[OK] をクリックします。

  4. [Create YAML] パネルで、ClusterRoleのYAMLコンテンツを入力し、[OK] をクリックしてClusterRoleを作成します。

    この手順では、例としてClusterRoleのYAMLテンプレートを使用します。 作成後、[クラスターの役割] タブでカスタム権限my-clusterroleを表示できます。

手順2: 認証にカスタムRBAC権限を使用する

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[権限付与] をクリックします。

  2. On the承認ページ、権限を付与します。

    • RAM ユーザーへの権限付与

      [RAMユーザー] タブをクリックし、リストで管理するRAMユーザーを見つけ、[権限の変更] をクリックして [権限管理] パネルを開きます。 複数のRAMユーザーを選択して権限を付与することもできます。

    • RAMロールに権限を付与する

      [RAMロール] タブをクリックし、[RAMロール名] を指定し、[権限の変更] をクリックして [権限管理] パネルを開きます。

      説明

      RAMロールを手動で入力するか、ドロップダウンリストからRAMロールを選択できます。 [RAMロール名] フィールドの横にある空白のボックスをクリックできます。 既存のRAMロールのリストが表示されます。 次に、リストから既存のRAMロールを選択して権限を付与します。

  3. [権限管理] パネルで、[権限の追加] をクリックします。 [権限の追加] セクションで、作成したClusterRoleに関連付けられている [クラスター] と承認する名前空間を選択します。 [権限管理][カスタム] を選択し、右側のドロップダウンリストから [my-clusterrole] を選択し、[送信] をクリックします。

kubectl

手順1: カスタムRBAC権限の作成

  1. 次の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"]
  2. 次のコマンドを実行して、ClusterRoleを作成します。

    kubectl apply -f  my-clusterrole.yaml

ステップ2: 認可オブジェクトIDの取得

  • RAMユーザーを認証するには、RAMユーザー名を照会してUserIdを取得します。 詳細については、「GetUser」をご参照ください。

  • RAMロールを許可するには、RAMロール名を照会してRoleIdを取得します。 詳細については、「GetRole」をご参照ください。

ステップ3: 認証にカスタムRBAC権限を使用する

  1. 次の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
  2. 次のコマンドを実行して、ClusterRoleBindingを作成します。

    kubectl apply -f  my-clusterrole-binding.yaml

RAMユーザーにカスタムRBAC権限が付与されたら、ターゲットクラスターのKubeConfigを取得し、kubectlツールを使用してクラスターに接続することでアクセスを確認します。