ロールベース アクセス制御(RBAC)を設定する

多くの場合、認証では、Kubernetes のロールベース アクセス制御(RBAC)と組み合わせて、認証済みユーザーとサービス アカウントに対する、より細かいアクセス制御が提供されます。ユーザー ID ではなく、グループ名を使用する RBAC ポリシーを作成することをおすすめします。RBAC ポリシーをグループに明示的にリンクすることで、ID プロバイダでユーザー アクセスを完全に管理できるようになるため、ユーザーの権限が変更されるたびにクラスタを更新する必要がなくなります。なお、OIDC のセキュリティ グループのメンバーシップに基づいたアクセス制御を構成するには、ID プロバイダからグループ メンバー情報を取得できるように GKE Identity Service を設定する必要があります。

特定の認証済みユーザーにクラスタの Pod へのアクセス権を付与する場合は、次の例のように、これらのリソースへのアクセス権を付与する ClusterRole を作成します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-reader
rules:
- apiGroups: [""]
  # The resource type for which access is granted
  resources: ["pods"]
  # The permissions granted by the ClusterRole
  verbs: ["get", "watch", "list"]

対応する ClusterRoleBinding を作成して、関連するユーザー(ここでは、us-east1-cluster-admins セキュリティ グループのメンバーおよび ID が u98523-4509823 のユーザー)に ClusterRole での権限を付与します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-pods-admins
subjects:
  # Grants anyone in the "us-east1-cluster-admins" group
  # read access to Pods in any namespace within this cluster.
- kind: Group
  name: gid-us-east1-cluster-admins # Name is case-sensitive
  apiGroup: rbac.authorization.k8s.io
  # Grants this specific user read access to Pods in any
  # namespace within this cluster
- kind: User
  name: uid-u98523-4509823
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

次の例では、この ClusterRoleBinding により、ClusterRole の権限が ID 12345678-BBBb-cCCCC-0000-123456789012 の関連グループに付与されています。この設定は Azure AD プロバイダにのみ関連し、Google Distributed Cloud クラスタで使用できます。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: pod-reader-binding
subjects:
  # Retrieves group information for the group ID mentioned
- kind: Group
  name: 12345678-BBBb-cCCCC-0000-123456789012
  apiGroup: rbac.authorization.k8s.io

RBAC の使用の詳細については、ロールベース アクセス制御を構成すると、RBAC 認証の使用をご覧ください。

Google Cloud コンソールでアクセスするための RBAC ロールを作成する

OIDC プロバイダを使用して認証されたユーザーは、コマンドラインだけでなく、Google Cloud コンソールからクラスタにログインできます。

Google Cloud コンソールでクラスタ リソースにアクセスする認証済みユーザーは、関連する Kubernetes 権限を持っている必要があります。そうしたユーザーにクラスタ管理者などのより広範な権限を付与しない場合は、クラスタのノード、永続ボリューム、Pod、ストレージ クラスを表示するために必要な最小限の権限を含むカスタム RBAC ロールを作成します。この一連の権限を定義するには、クラスタに ClusterRole RBAC リソース(cloud-console-reader)を作成します。

cloud-console-reader は、クラスタのノード、永続ボリューム、Pod、ストレージ クラスに対する getlistwatch の権限をユーザーに付与し、これらのリソースの詳細情報を確認できるようにします。

kubectl

cloud-console-reader ClusterRole を作成してクラスタに適用するには、次のコマンドを実行します。

cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cloud-console-reader
rules:
- apiGroups: [""]
  resources: ["nodes", "persistentvolumes", "pods"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
  resources: ["storageclasses"]
  verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml

次に、前のセクションで説明したように、権限ポリシーの設定時にこの ClusterRole をユーザーに付与できます。Google Cloud コンソールでクラスタを表示するための IAM 権限も必要です。