VPC環境で利用できます。
クラスタを作成する場合、クラスタを作成した SubAccountアカウントとメインアカウントはクラスタ RBAC構成に system:mastersグループとして自動設定され、この設定はクラスタ情報や ConfigMapに表示されません。IAMユーザーにクラスタの使用権限を追加するには、kube-system名前空間に ncp-auth ConfigMapを登録する必要があります。
参考
ncp-iam-authenticatorがインストールされ、kubeconfigが作成されたステータスで設定できます。ncp-iam-authenticatorインストール、IAM認証 kubeconfig作成をご参照ください。
IAMユーザーをクラスタに追加
- クラスタを作成した SubAccountユーザーまたはメインアカウントで、kubectl認証情報が構成される必要があります。
ncp-authConfigMapを作成します。
$ cat <<EOF | kubectl --kubeconfig $KUBE_CONFIG apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
name: ncp-auth
namespace: kube-system
data:
mapSubAccounts: |
- subAccountIdNo: <iam-user-idno>
username: <username>
groups:
- <groups>
EOF
- ConfigMapの IAMユーザーパラメータは、次の通りです。
- subaccountIdNo: SubAccountコンソールで確認できる追加する SubAccountユーザーの ID
- username: Kubernetes内で IAMユーザーにマッピングするユーザー名。
- groups: Kubernetes内でユーザーにマッピングするグループリスト。詳細は、Default roles and role bindingsをご参照ください。
ncp-authConfigMapに ncloud.com/applied-ncp-authアノテーションを通じて適用されたユーザーリストを確認します。
$ kubectl --kubeconfig $KUBE_CONFIG -n kube-system get configmap ncp-auth -o yaml
...
metadata:
annotations:
ncloud.com/applied-ncp-auth: '[{"SubAccountIdNo":"<iam-user-idno>","Username":"<username>","Groups":["<groups>"]}]'
...
- IAMユーザーまたはロールをマッピングした Kubernetesユーザーまたはグループが、RoleBindingまたは ClusterRoleBindingを使用して Kubernetesロールにバインドされているか確認します。詳細内容は、Kubernetes文書の Using RBAC Authorizationをご参照ください。
- すべての名前空間のリソース閲覧権限 - グループ名は full-access-groupであり、これを
ncp-authConfigMapで IAMユーザーの groupsとマッピングします。
参考
- full-access-groupは多くの権限を持っていますが、クラスタ管理者が使用するマスター権限ではありません。
- クラスタマスター権限が必要な場合、デフォルトで提供する system:mastersグループにユーザーをマッピングします。
$ cat <<EOF | kubectl --kubeconfig $KUBE_CONFIG apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: full-access-clusterrole
rules:
- apiGroups:
- ""
resources:
- nodes
- namespaces
- pods
verbs:
- get
- list
- apiGroups:
- apps
resources:
- deployments
- daemonsets
- statefulsets
- replicasets
verbs:
- get
- list
- apiGroups:
- batch
resources:
- jobs
verbs:
- get
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: full-access-binding
subjects:
- kind: Group
name: full-access-group
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: full-access-clusterrole
apiGroup: rbac.authorization.k8s.io
EOF
- 特定の名前空間のリソース閲覧権限 - ファイルに設定された名前空間は defaultなので、希望する名前空間を指定して変更します。グループ名は restricted-access-groupであり、これを
ncp-authConfigMapで IAMユーザーの groupsとマッピングします。
$ cat <<EOF | kubectl --kubeconfig $KUBE_CONFIG apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: restricted-access-clusterrole
rules:
- apiGroups:
- ""
resources:
- nodes
- namespaces
verbs:
- get
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: restricted-access-clusterrole-binding
subjects:
- kind: Group
name: restricted-access-group
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: restricted-access-clusterrole
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: restricted-access-role
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- apiGroups:
- apps
resources:
- deployments
- daemonsets
- statefulsets
- replicasets
verbs:
- get
- list
- apiGroups:
- batch
resources:
- jobs
verbs:
- get
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: restricted-access-role-binding
namespace: default
subjects:
- kind: Group
name: restricted-access-group
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: restricted-access-role
apiGroup: rbac.authorization.k8s.io
EOF
mapSubAccountsにユーザー登録せずに全体認証
ncp-authConfigMapに authenticateAll値を「true」で追加するとすべての SubAccountアカウントが mapSubAccountsに追加されなくても認証できます。
$ cat <<EOF | kubectl --kubeconfig $KUBE_CONFIG apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
name: ncp-auth
namespace: kube-system
data:
authenticateAll: "true"
EOF
- 認証されたユーザーは SubAccountユーザーをクラスタに追加と同様に Kubernetesユーザーまたはグループが RoleBindingまたは ClusterRoleBindingを使用して Kubernetesロールにバインドされている必要があります。
SubAccountグループを Kubernetesグループとして使用
- SubAccountグループに属している SubAccountユーザーは ncp-sub-account-group:が prefixで追加された Kubernetesグループに含まれるようになります。
- full-accessという SubAccountグループに属しているユーザー全体に full-access-clusterroleを付与する例は以下のようです。
$ cat <<EOF | kubectl --kubeconfig $KUBE_CONFIG apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: full-access-clusterrole
rules:
- apiGroups:
- ""
resources:
- nodes
- namespaces
- pods
verbs:
- get
- list
- apiGroups:
- apps
resources:
- deployments
- daemonsets
- statefulsets
- replicasets
verbs:
- get
- list
- apiGroups:
- batch
resources:
- jobs
verbs:
- get
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: full-access-binding
subjects:
- kind: Group
name: ncp-sub-account-group:full-access
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: full-access-clusterrole
apiGroup: rbac.authorization.k8s.io
EOF