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

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

最終更新日:Jun 23, 2026

Container Service for Kubernetes (ACK) コンソールに事前定義されている ClusterRole が要件を満たさない場合は、カスタムの Role と ClusterRole を作成できます。これにより、きめ細かいロールベースアクセス制御 (RBAC) を実装し、ニーズに合わせて権限を調整できます。このトピックでは、これらのカスタム権限を設定する方法について説明します。

カスタム RBAC ポリシー

Role と ClusterRole のカスタム YAML マニフェストを作成して、ご利用の ACK クラスター内のリソースに対するきめ細かいアクセス制御を実装できます。以下のリソースのポリシー情報をガイドとして使用してください。

Role (名前空間スコープ)

次の YAML の例では、my-role という名前の Role を定義しています。この Role は、デフォルトの名前空間内の Pod に対する読み取り専用権限を付与します。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: my-role
rules:                               # 権限ルールのリスト。
  - apiGroups: [""]                    # リソースの API グループ。空の文字列 "" はコア API グループを示します。
    resources: ["pods"]                # ルールが適用されるリソースタイプ。
    verbs: ["get", "list"]             # リソースに対して許可される操作。

ClusterRole (クラスター-スコープ)

次の YAML の例では、my-clusterrole という名前の ClusterRole を定義しています。この ClusterRole は、クラスター全体にわたる Pod と Service に対する読み取り専用権限を付与します。

ClusterRole はクラスター-スコープのリソースです。YAML で名前空間を指定しても、それは無視されます。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# namespace: default                     # ClusterRole には名前空間は不要です。
  name: my-clusterrole
rules:                                 # 権限ルールのリスト。
  - apiGroups: [""]                    # リソースの API グループ。
    resources: ["pods"]                # リソースタイプ。
    verbs: ["get", "list"]             # 許可される操作。
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["get", "list"]

これにより、RAM ユーザーまたは RAM ロールにクラスターリソースに対するきめ細かいアクセス制御を付与できます。

一般的なリソースポリシー

  • 読み取り権限

    • get:特定のリソースの詳細を読み取ります。

    • list:リソースのコレクションを一覧表示します。

    • watch:リソースの変更を監視し、リアルタイムの更新を受け取ります。

  • 書き込み権限

    • create:新しいリソースインスタンスを作成します。

    • update:既存リソースを変更します。

    • patch:既存リソースに部分的な変更を適用します。

    • delete:指定されたリソースを削除します。

リソース名

リソースタイプ (resources)

API グループ (apiGroups)

権限(動詞

Pod

resources: ["pods"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete", "exec", "proxy"]

Service

resources: ["services"]

apiGroups: [""]

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

ConfigMap

resources: ["configmaps"]

apiGroups: [""]

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

Secret

resources: ["secrets"]

apiGroups: [""]

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

PersistentVolume

resources: ["persistentvolumes"]

apiGroups: [""]

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

PersistentVolumeClaim

resources: ["persistentvolumeclaims"]

apiGroups: [""]

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

Namespace

resources: ["namespaces"]

apiGroups: [""]

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

Deployment

resources: ["deployments"]

apiGroups: ["apps"]

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

DaemonSet

resources: ["daemonsets"]

apiGroups: ["apps"]

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

StatefulSet

resources: ["statefulsets"]

apiGroups: ["apps"]

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

Ingress

resources: ["ingresses"]

apiGroups: ["networking.k8s.io"]

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

NetworkPolicy

resources: ["networkpolicies"]

apiGroups: ["networking.k8s.io"]

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

Job

resources: ["jobs"]

apiGroups: ["batch"]

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

CronJob

resources: ["cronjobs"]

apiGroups: ["batch"]

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

StorageClass

resources: ["storageclasses"]

apiGroups: ["storage.k8s.io"]

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

HorizontalPodAutoscaler

resources: ["horizontalpodautoscalers"]

apiGroups: ["autoscaling"]

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

操作手順

カスタム RBAC 権限は、ACK コンソールまたは kubectl を使用して適用できます。

重要

Container Service for Kubernetes (ACK) コンソールは、カスタム ClusterRole のバインドのみをサポートしています。カスタム Role をバインドするには、kubectl コマンドラインツールを使用してください。

コンソール

ステップ 1:カスタム ClusterRole の作成

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

  2. クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、Security > 役割 をクリックします。

  3. 役割 ページで、Cluster Role タブをクリックします。 次に、作成する をクリックします

  4. Create YAML パネルで、カスタムポリシーの YAML マニフェストを入力し、OK をクリックして ClusterRole を作成します。

    このステップでは、ClusterRole (クラスター-スコープ) の YAML を例として使用します。ClusterRole が作成された後、Cluster Role タブでカスタム ClusterRole my-clusterrole を表示できます。

ステップ 2:カスタム ClusterRole の割り当て

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

  2. 承認 ページで権限を設定します。

    • RAM ユーザーに権限を付与する場合:RAM ユーザー タブをクリックし、対象の RAM ユーザーを見つけて、操作 列の アクセス権限の管理 をクリックして 権限管理 ページに移動します。

    • RAM ロールに権限を付与する場合:RAM ロール タブをクリックし、対象の RAM ロールを見つけて、アクセス権限の管理 をクリックして権限管理ページに移動します。

  3. +権限の追加 をクリックします。ダイアログボックスで、ClusterRole を作成した クラスター と、権限を付与したい 名前空間 を選択します。権限管理 セクションで Custom を選択します。表示されるドロップダウンリストから my-clusterrole を選択し、送信 をクリックします。

kubectl

ステップ 1:カスタム ClusterRole の作成

  1. 次の YAML マニフェストを含む my-clusterrole.yaml という名前のファイルを作成します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: my-clusterrole
    # namespace: default        # ClusterRole には名前空間は不要で、指定されても無視されます。
    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 ユーザーに権限を付与するには、そのユーザー ID を取得する必要があります。詳細については、「RAM ユーザーの詳細の表示」をご参照ください。

  • RAM ロールに権限を付与するには、そのロール ID を取得する必要があります。詳細については、「RAM ロールの情報の表示」をご参照ください。

ステップ 3:カスタム ClusterRole の割り当て

  1. 次の YAML マニフェストを含む my-clusterrole-binding.yaml という名前のファイルを作成します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: my-clusterrole-binding
    subjects:
    - kind: User
      name: "20811XXXXXXXXX2288"  # ステップ 2 で取得したサブジェクトのユーザー ID またはロール ID。
    roleRef:
      kind: ClusterRole
      name: my-clusterrole
      apiGroup: rbac.authorization.k8s.io
  2. 次のコマンドを実行して ClusterRoleBinding をデプロイします。

    kubectl apply -f my-clusterrole-binding.yaml

対象の RAM ユーザーまたは RAM ロールにカスタム権限を付与した後、クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続して権限を検証します。

よくある質問

コンソールターミナルへのアクセスを許可する方法

デフォルトでは、RAM ユーザーまたは RAM ロールは、Pod に対する get および list の読み取り専用権限を持っていても、ACK コンソールからコンテナのターミナルにアクセスできません。この操作には、pods/exec Pod サブリソースに対する get および create 権限が必要です。

したがって、Role または ClusterRole の rulespods/exec リソースに対する get および create 権限を付与し、そのロールを対象のユーザーまたはユーザーグループにバインドする必要があります。以下に例を示します。

ターミナルにアクセスするには:ACK コンソールにログインします。クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、ワークロード > ポッド を選択します。Actions 列で、端末 をクリックします。

Role

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: ns-role 
rules:                               
- apiGroups: [""]                   
  resources: ["pods"]                
  verbs: ["get", "list"]           
# 名前空間内の pods/exec に対する権限を付与します。
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["get", "create"]

ClusterRole

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# namespace: default                     
  name: my-clusterrole
rules:                                 
  - apiGroups: [""]                   
    resources: ["pods"]               
    verbs: ["get", "list"]             
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["get", "list"]
# クラスター内の pods/exec に対する権限を付与します。
  - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["get", "create"]