VKS クラスターに対する Kubernetes RBAC の設定
search cancel

VKS クラスターに対する Kubernetes RBAC の設定

book

Article ID: 435453

calendar_today

Updated On:

Products

VMware vSphere Kubernetes Service

Issue/Introduction

免責事項: これは英文の記事「How to Configure Kubernetes RBAC for VKS Cluster」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。

本ガイドは、VKS公式ドキュメントを補完し、ロールベースアクセス制御(RBAC)を実装するための実践的な例を提供するものです。
VKSクラスター内のユーザーやグループに対して、権限を定義する際にご活用ください。

Environment

vSphere Kubernetes Service

Resolution

本セクションでは、特定のロールに基づいてVKSクラスターへユーザーを追加するための設定例を示します。
以下のコマンドを実行する前に、管理者権限を持つユーザーで対象のVKSクラスターへ kubectl コンテキストを切り替えてください。

kubectl vsphere login --insecure-skip-tls-verify --server=${SUPERVISOR_VIP} --tanzu-kubernetes-cluster-namespace=${VSPHERE_NAMESPACE} --tanzu-kubernetes-cluster-name=${TARGET_VKS_CLUSTER} -u [email protected]

Read Only (読み取り専用)

  • 実際の用途に合わせて、ClusterRole のルールをカスタマイズ
  • データのセキュリティ保護のため、Secret へのアクセスはデフォルトで無効
# --------------------------------------------------------------------------
# 1. ClusterRole の作成
# --------------------------------------------------------------------------
CLUSTER_ROLE_NAME=cluster-view-no-secrets
cat > ${CLUSTER_ROLE_NAME}.yaml <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: ${CLUSTER_ROLE_NAME}
rules:
  - apiGroups: [""]
    resources: ["nodes", "persistentvolumes", "namespaces", "pods", "services", "events", "configmaps", "serviceaccounts"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["apps", "extensions", "batch", "storage.k8s.io", "networking.k8s.io", "rbac.authorization.k8s.io"]
    resources: ["*"]
    verbs: ["get", "list", "watch"]
EOF

kubectl apply -f ${CLUSTER_ROLE_NAME}.yaml


# --------------------------------------------------------------------------
# 2. ClusterRoleBinding の作成
# --------------------------------------------------------------------------
[email protected]
BINDING_NAME=grant-cluster-view-no-secrets-test

cat > ${BINDING_NAME}.yaml <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: ${BINDING_NAME}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: ${CLUSTER_ROLE_NAME}
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: sso:${VCENTER_USER}
EOF

kubectl apply -f ${BINDING_NAME}.yaml


# --------------------------------------------------------------------------
# 3. 確認
# --------------------------------------------------------------------------
kubectl auth can-i get pods --as "sso:${VCENTER_USER}"    # yes
kubectl auth can-i get secrets --as "sso:${VCENTER_USER}" # no

特定の Namespace へのアクセス

  • 指定 Namespace 内での限定的な操作の許可
  • 組み込みの "edit" ClusterRole を利用
# --------------------------------------------------------------------------
# 1. RoleBinding の作成
# --------------------------------------------------------------------------
[email protected]
NAMESPACE=default
BINDING_NAME=edit-binding-${NAMESPACE}-test-developer

cat > ${BINDING_NAME}.yaml <<EOF
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: ${BINDING_NAME}
  namespace: ${NAMESPACE}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: edit # Using the built-in "edit" ClusterRole
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: "sso:${VCENTER_USER}"
EOF

kubectl apply -f ${BINDING_NAME}.yaml

# --------------------------------------------------------------------------
# 2. 確認
# --------------------------------------------------------------------------
kubectl auth can-i get pods -n ${NAMESPACE} --as "sso:${VCENTER_USER}"    # yes
kubectl auth can-i create pods -n ${NAMESPACE} --as "sso:${VCENTER_USER}" # yes
kubectl auth can-i get pods -n kube-system --as "sso:${VCENTER_USER}"     # no

管理者権限

  • 組み込みの cluster-admin ロールを使用して、クラスターに対するフルコントロールを付与します。
  • 警告: 本設定はシステム全体に影響を及ぼす特権となるため、信頼できる管理者のみ制限してください。
# --------------------------------------------------------------------------
# 1. ClusterRoleBinding の作成
# --------------------------------------------------------------------------
VCENTER_USER="[email protected]"
BINDING_NAME="grant-cluster-admin-test"

cat > ${BINDING_NAME}.yaml <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: ${BINDING_NAME}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin # Using the built-in "cluster-admin" ClusterRole
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: "sso:${VCENTER_USER}"
EOF

kubectl apply -f ${BINDING_NAME}.yaml

# --------------------------------------------------------------------------
# 2. 確認
# --------------------------------------------------------------------------
kubectl auth can-i get pods -A --as "sso:${VCENTER_USER}"     # yes
kubectl auth can-i delete nodes --as "sso:${VCENTER_USER}"    # yes
kubectl auth can-i edit secrets -A --as "sso:${VCENTER_USER}" # yes

Additional Information

KB - VKS における vSphere 名前空間の権限について