権限昇格を許可する RBAC ロール

bind と escalate は、それぞれロールの関連付けと定義に関する権限昇格防止の制約を緩和します。

説明

RBAC の bind と escalate は特に注意が必要な権限です。bind は、自分が持っていない権限を含むロールの関連付けを許可します。別途、バインディングの作成・更新権限も必要です。escalate はロールの作成・更新権限と併せて使うことで、自分が持っていない権限をロールに含められるようにします。

これらはアクセス権の管理そのものを委任する権限です。一般の利用者やサービスアカウントではなく、少数の信頼できる管理者に限定してください。

想定される影響

  • 元の権限を超えるロールを定義したり関連付けたりできるおそれがあります。
  • 侵害されたアカウントが短時間で管理者権限を得る可能性があります。
  • 広い許可により、クラスター全体の RBAC 制御が損なわれるおそれがあります。

対処方法

  • bind と escalate は必要最小限の管理者だけに許可してください。
  • 一般利用者向けと管理者向けのロールを分けてください。
  • clusterroles、roles、rolebindings、clusterrolebindings の作成・更新権限と、特に注意が必要な操作を併せて確認してください。

例

ロール定義の比較です。主体にこれらの権限を付与するバインディングは省略しています。

変更前

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: rbac-binder
rules:
  - apiGroups: ["rbac.authorization.k8s.io"]
    resources: ["clusterroles"]
    verbs: ["bind"]
  - apiGroups: ["rbac.authorization.k8s.io"]
    resources: ["clusterrolebindings"]
    verbs: ["create"]

変更後

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: not-rbac-binder
rules:
  - apiGroups: ["rbac.authorization.k8s.io"]
    resources: ["clusterrolebindings"]
    verbs: ["create"]

説明:

  • 変更前: bind と ClusterRoleBinding の作成権限を組み合わせると、自分より強い権限を持つロールを関連付けられます。
  • 変更後: このロールから bind を削除します。バインディングの作成権限は残りますが、別途 bind が許可されていなければ、関連付けるロールの権限をすでに持っている必要があります。

参考資料