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

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

最終更新日:Mar 26, 2026

Container Service for Kubernetes (ACK) の事前定義された ClusterRole で権限要件が満たされない場合は、カスタムの Role または ClusterRole を作成して、クラスターリソースに対してきめ細かいロールベースアクセス制御 (RBAC) を実現します。

カスタムロールを作成する前に、組み込みの ClusterRole (cluster-adminadmineditview) がニーズを満たしているかどうかを確認してください。カスタムロールは、組み込みロールの権限が広すぎる、または制限が厳しすぎる場合にのみ必要です。

組み込み ClusterRoleアクセスレベル
cluster-adminクラスター全体のすべてのリソースへのフルアクセス
admin名前空間内のほとんどのリソースへの読み取り/書き込みアクセス
edit名前空間内のほとんどのオブジェクトへの読み取り/書き込みアクセス (RBAC リソースを除く)
view名前空間内のほとんどのオブジェクトへの読み取り専用アクセス

前提条件

開始する前に、以下が準備できていることを確認してください:

  • ACK クラスター

  • クラスターに接続するように設定された kubectl

  • クラスター内で RBAC リソースを作成するための十分な権限

基本概念

Kubernetes RBAC では、スコープが異なる 2 種類のロールを使用します:

  • Role:特定の名前空間内で権限を付与します。

  • ClusterRole:クラスターレベルで、すべての名前空間にわたって権限を付与します。ClusterRole の YAML マニフェストでは名前空間を指定できません。

どちらのロールタイプも、apiGroupsresourcesverbs という同じ 3 つのフィールドからなるルール構造を使用します。

権限 verb

カテゴリ動詞説明
読み取りget特定のリソースの詳細を取得
読み取りlistリソースのコレクションを一覧表示
読み取りwatchリソースの変更に関するリアルタイムの更新をストリーミング
書き込みcreate新しいリソースインスタンスを作成
書き込みupdate既存のリソースを置換
書き込みpatch既存のリソースを部分的に変更
書き込みdeleteリソースを削除
重要

resources または verbs でワイルドカード (["*"]) を使用しないでください。ワイルドカードは、現在および将来のすべてのリソースまたは verb (後で追加される新しいものを含む) へのアクセスを許可します。最小権限の原則に従うために、常に特定のリソースと verb をリストアップしてください。

サポートされるリソース

次の表を使用して、rules フィールドを構築します。各行は、リソースタイプをその resources の値、apiGroups の値、およびサポートする verb にマッピングします。

リソースresourcesapiGroupsサポートされている動詞
Pod["pods"][""]getlistwatchupdatecreatepatchdeleteexecproxy
Service["services"][""]getlistwatchupdatecreatepatchdelete
ConfigMap["configmaps"][""]getlistwatchupdatecreatepatchdelete
Secret["secrets"][""]getlistwatchupdatecreatepatchdelete
PersistentVolume["persistentvolumes"][""]getlistwatchupdatecreatepatchdelete
PersistentVolumeClaim["persistentvolumeclaims"][""]getlistwatchupdatecreatepatchdelete
Namespace["namespaces"][""]getlistwatchupdatecreatepatchdelete
Deployment["deployments"]["apps"]getlistwatchupdatecreatepatchdelete
DaemonSet["daemonsets"]["apps"]getlistwatchupdatecreatepatchdelete
StatefulSet["statefulsets"]["apps"]getlistwatchupdatecreatepatchdelete
Ingress["ingresses"]["networking.k8s.io"]getlistwatchupdatecreatepatchdelete
NetworkPolicy["networkpolicies"]["networking.k8s.io"]getlistwatchupdatecreatepatchdelete
Job["jobs"]["batch"]getlistwatchupdatecreatepatchdelete
CronJob["cronjobs"]["batch"]getlistwatchupdatecreatepatchdelete
StorageClass["storageclasses"]["storage.k8s.io"]getlistwatchupdatecreatepatchdelete
HorizontalPodAutoscaler["horizontalpodautoscalers"]["autoscaling"]getlistwatchupdatecreatepatchdelete

サブリソース

一部のリソースは、個別の権限付与が必要なサブリソースを公開します。サブリソースを指定するには、スラッシュ (/) を使用します。たとえば、Pod に加えて Pod のログの読み取りを許可するには、次のようにします:

rules:
  - apiGroups: [""]
    resources: ["pods", "pods/log"]
    verbs: ["get", "list"]

一般的な Pod のサブリソース: pods/logpods/execpods/portforwardpods/proxy

カスタム RBAC ロールの作成とバインド

ACK コンソールは、カスタム ClusterRole のバインドのみをサポートしています。特定の名前空間にスコープが限定されたカスタム Role をバインドするには、kubectl を使用します。

  • ACK コンソール:ClusterRole を作成し、RAM ユーザーまたは RAM ロールにバインドする

  • kubectl:ClusterRole または Role を作成し、対応するバインディングを作成する

コンソール

ステップ 1:ClusterRole の作成

次の手順では、クラスター全体の Pod と Service への読み取り専用アクセスを許可する my-clusterrole という名前の ClusterRole を作成します。

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

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

  3. [ロール] ページで、[Cluster Role] タブを選択し、[OK] をクリックします。

  4. [YAML の作成] パネルで、ClusterRole のマニフェストを入力し、[OK] をクリックします。次のマニフェストは、Pod と Service への読み取り専用アクセス (getlistwatch) を許可します:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: my-clusterrole
    rules:
      - apiGroups: [""]
        resources: ["pods"]
        verbs: ["get", "list", "watch"]
      - apiGroups: [""]
        resources: ["services"]
        verbs: ["get", "list", "watch"]

    作成後、my-clusterrole が [Cluster Role] タブに表示されます。

ステップ 2:ClusterRole を RAM ユーザーまたは RAM ロールにバインドする

  1. 左側のナビゲーションウィンドウで、[権限付与] をクリックします。

  2. [権限付与] ページで、権限付与の対象を選択します:

    • RAM ユーザー:[RAM ユーザー] タブをクリックし、対象の RAM ユーザーを見つけて、[権限の変更] をクリックします。

    • RAM ロール:[RAM ロール] タブをクリックし、[RAM ロール名] フィールドに対象の RAM ロール名を入力または選択して、[権限の変更] をクリックします。

  3. [権限管理] パネルで、[+ 権限の追加] をクリックします。[権限の追加] セクションで、次の操作を行います:

    1. my-clusterrole に関連付けられている [クラスター] を選択します。

    2. 対象の [Namespace] を選択します。

    3. [権限管理] で [カスタム] を選択し、ドロップダウンリストから [my-clusterrole] を選択します。

    4. [送信] をクリックします。

kubectl

ステップ 1:カスタムロールの作成

ClusterRole — クラスター全体に権限を付与します。

次のマニフェストは、Pod と Service への読み取り専用アクセス権を持つ my-clusterrole という名前の ClusterRole を作成します:

# my-clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: my-clusterrole
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["get", "list", "watch"]

Role — 特定の名前空間内で権限を付与します。

次のマニフェストは、default 名前空間の Pod への読み取りアクセス権を持つ my-role という名前の Role を作成します:

# my-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: my-role
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "list"]

マニフェストを適用します:

kubectl apply -f my-clusterrole.yaml

ステップ 2:権限付与オブジェクト ID の取得

ロールを RAM ユーザーまたは RAM ロールにバインドするには、対応する ID が必要です:

  • RAM ユーザー: RAM ユーザー名を指定して GetUser API を呼び出して UserId を取得します。

  • RAM ロール: RAM ロール名を指定して GetRole API を呼び出して、RoleId を取得します。

ステップ 3:バインディングの作成

次のマニフェストは、my-clusterrole を RAM ユーザーまたは RAM ロールにバインドします。20811XXXXXXXXX2288 を前のステップで取得した UserId または RoleId に置き換えてください。

# my-clusterrole-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: my-clusterrole-binding
subjects:
  - kind: User
    name: "20811XXXXXXXXX2288"    # ステップ 2 で取得した UserId または RoleId
roleRef:
  kind: ClusterRole
  name: my-clusterrole
  apiGroup: rbac.authorization.k8s.io

バインディングを適用します:

kubectl apply -f my-clusterrole-binding.yaml

権限の検証

バインド後、RAM ユーザーが期待どおりのアクセス権を持っていることを確認します。クラスターの kubeconfig を取得して kubectl を使用して接続し、ロールで許可されているコマンドを実行します:

kubectl get pods

付与された権限外のアクセスが正しく拒否されることを確認するには、ロールでカバーされていないコマンドを実行します。たとえば、Pod アクセスのみが付与されている場合に Deployment を一覧表示します:

kubectl get deployments

期待される出力は次のとおりです:

Error from server (Forbidden): deployments.apps is forbidden: User "20811XXXXXXXXX2288" cannot list resource "deployments" in API group "apps" at the cluster scope

このエラーは、権限の境界が正しく機能していることを示しています。

次のステップ