Configure el control de acceso basado en roles (RBAC)

La autenticación se suele combinar con el control de acceso basado en funciones (RBAC) de Kubernetes para proporcionar un control de acceso más preciso a clústeres para usuarios autenticados y cuentas de servicio. Se recomienda crear políticas de RBAC que usen nombres de grupo en lugar de identificadores de usuario. Si vinculas las políticas de RBAC de forma explícita a grupos, puedes administrar los privilegios de acceso de los usuarios por completo con tu proveedor de identidad, por lo que el clúster no necesita actualizarse cada vez que cambian los privilegios de los usuarios. Ten en cuenta que, para configurar el control de acceso en función de la membresía de los grupos de seguridad con OIDC, debes asegurarte de que GKE Identity Service esté configurado para admitir la obtención de información de membresía de grupo de tu proveedor de identidad.

Ejemplo

Si deseas que ciertos usuarios autenticados tengan acceso a los pods del clúster, crea una ClusterRole que otorgue acceso a estos recursos, como se muestra en el siguiente ejemplo:

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"]

Luego, crea una ClusterRoleBinding correspondiente para otorgar los permisos en ClusterRole a los usuarios relevantes; en este caso, los miembros del grupo de seguridad us-east1-cluster-admins y el usuario con el ID u98523-4509823:

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

En el siguiente ejemplo, este ClusterRoleBinding otorga permisos en ClusterRole al grupo relevante con el ID 12345678-BBBb-cCCCC-0000-123456789012. Ten en cuenta que esta configuración es relevante solo para los proveedores de Azure AD y está disponible para los clústeres de 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

Para obtener más información sobre el uso del RBAC, consulta Configura el control de acceso basado en roles y Usa la autorización de RBAC.

Crea un rol de RBAC para el acceso a la consola de Google Cloud

Los usuarios autenticados a través de proveedores de OIDC pueden acceder a los clústeres desde la consola de Google Cloud y desde la línea de comandos.

Los usuarios autenticados que desean acceder a los recursos de un clúster en la consola de Google Cloud deben tener los permisos relevantes de Kubernetes para hacerlo. Si no deseas otorgar a esos usuarios permisos más extensos, como los de un administrador de clústeres, puedes crear un rol de RBAC personalizado que incluya los permisos mínimos para ver los nodos, los volúmenes persistentes, los Pods y las clases de almacenamiento del clúster. Puedes definir este conjunto de permisos si creas un recurso RBAC ClusterRole, cloud-console-reader, en el clúster.

cloud-console-reader otorga a sus usuarios los permisos get, list y watch en los nodos, los volúmenes persistentes y las clases de almacenamiento del clúster, lo que les permite ver detalles sobre estos recursos.

kubectl

Para crear el ClusterRole de cloud-console-reader y aplicarlo al clúster, ejecuta el siguiente comando:

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

Luego, puedes otorgar este ClusterRole a los usuarios cuando configures tus políticas de permisos, como se describe en la sección anterior. Ten en cuenta que los usuarios también necesitan permisos de IAM para ver clústeres en la consola de Google Cloud.