Autentica mediante un token del portador
En esta página, se explica cómo configurar la autenticación mediante un token del portador para acceder a clústeres registrados fuera de Google Cloud. Después de la configuración, los administradores de clústeres podrán acceder a los clústeres desde la consola de Google Cloud. Se admiten muchos tipos de tokens del portador, como se especifica en autenticación de Kubernetes. El método más fácil es crear una cuenta de servicio de Kubernetes (KSA) en el clúster y usar su token del portador para acceder.
Otros métodos de autenticación
Como alternativa a la configuración de la autenticación con un token del portador, puedes configurar uno de los siguientes métodos de autenticación según las necesidades de tu organización:
Google Identity, que permite a los usuarios acceder con su identidad de Google Cloud. Usa esta opción si tus usuarios ya tienen acceso a Google Cloud con Google Identity.
Si el clúster está configurado para usar un proveedor de identidad de OIDC, puedes usarlo a fin de autenticarte en el clúster desde la consola de Google Cloud. Puedes obtener información para configurar OIDC para tus clústeres de GKE en las siguientes guías:
- Configura clústeres para GKE Identity Service con OIDC En esta guía, se muestra cómo configurar la autenticación OIDC por clúster para todos los tipos de clústeres de GKE.
- Configura GKE Identity Service para una flota. Esta opción te permite configurar OIDC a nivel de flota para los tipos de clúster compatibles. La configuración a nivel de flota es compatible con los clústeres de GKE en Google Cloud, todos los tipos de clústeres de GKE y los clústeres de EKS adjuntos en AWS.
Si estos métodos de autenticación proporcionados por Google no son adecuados para tu organización, sigue las instrucciones de esta página para configurar la autenticación con un token del portador.
Otorga roles de IAM para acceder a través de la consola de Google Cloud
Los usuarios que desean ver los clústeres conectados mediante la consola de Google Cloud necesitan los siguientes roles de IAM como mínimo:
roles/container.viewer
Este rol permite que los usuarios vean los recursos del contenedor en la consola de Google Cloud, incluida la página Clústeres de GKE. Para obtener más información sobre los permisos incluidos en este rol, consulta funciones de Kubernetes Engine en la documentación de IAM.roles/gkehub.viewer
Este rol permite que los usuarios vean los clústeres fuera de Google Cloud en la consola de Google Cloud. Los usuarios no necesitan este rol si tu flota no incluye clústeres fuera de Google Cloud. Para obtener detalles sobre los permisos incluidos en este rol, consulta Funciones de GKE Hub en la documentación de IAM.
Ejecuta los siguientes comandos para otorgar estos roles:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/container.viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/gkehub.viewer
Reemplaza lo siguiente:
PROJECT_ID
: el ID del proyecto host de la flota.EMAIL_ADDRESS
: la dirección de correo electrónico asociada a la cuenta de Google Cloud del usuario.
Para obtener más información sobre cómo asignar los roles de IAM, consulta Administra el acceso a los proyectos, las carpetas y las organizaciones en la documentación de IAM.
Configurar el control de acceso basado en roles
El acceso a los clústeres se controla mediante el control de acceso basado en roles (RBAC) de Kubernetes.
Te recomendamos que tú o un administrador de clústeres creen una KSA para cada usuario que acceda al clúster. Usar un token del portador es como usar una contraseña, por lo que cada usuario debe tener su propia cuenta. Acceder con el token del portador de la KSA genera que todas las operaciones se ejecuten como la KSA, restringidas por los roles de RBAC que mantiene la KSA.
El KSA debe tener al menos los siguientes roles de RBAC en el clúster para acceder a ella a través de la consola:
Crea y aplica el rol de RBAC cloud-console-reader
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 rol a las KSA como se describe en la siguiente sección.
Crea y autoriza una KSA
kubectl
Para crear una KSA y vincular permisos a ella, sigue estos pasos:
Crea los recursos de la KSA y
ClusterRoleBinding
para vincular el RBACClusterRoles
de Kubernetesview
ycloud-console-reader
a la KSA:KSA_NAME=KSA_NAME kubectl create serviceaccount ${KSA_NAME} kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${KSA_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${KSA_NAME}
Reemplaza lo siguiente:
KSA_NAME
: el nombre que elijas para la KSA.VIEW_BINDING_NAME
: el nombre que eliges para el recursoview
ClusterRoleBinding
; puedes ponerle el nombre que quieras, pero puede que sea más fácil asignarle el nombre de la KSACLOUD_CONSOLE_READER_BINDING_NAME
: el nombre que eliges para el recursocloud-console-reader
ClusterRoleBinding
. También puedes asignarle el nombre que desees.
Según el acceso que tenga la cuenta de servicio, vincula funciones adicionales a la KSA. Para ver las opciones, consulta las funciones predeterminadas de Kubernetes.
Por ejemplo, si deseas implementar una aplicación de Kubernetes desde Cloud Marketplace, vincula la función
cluster-admin
a la KSA:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:KSA_NAME
Reemplaza
BINDING_NAME
por el nombre de la vinculación de la función de clúster para la cuenta de servicio.
Autoriza otras cuentas
kubectl
Para cada otro usuario o cuenta de servicio que obtenga acceso al clúster, crea recursos ClusterRoleBinding
a fin de vincular las funciones view
y cloud-console-reader
a su cuenta:
Vincula la
view
y lasClusterRoles
cloud-console-reader
:ACCOUNT_NAME=ACCOUNT_NAME kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${ACCOUNT_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${ACCOUNT_NAME}
Reemplaza lo siguiente:
ACCOUNT_NAME
: la cuenta de servicio de KubernetesVIEW_BINDING_NAME
: el nombre que elijas para el recursoview
ClusterRoleBinding
. Puedes usar el nombre que desees, pero puede que te resulte más fácil asignarle el nombre que tenga el usuario o la cuenta de servicio.CLOUD_CONSOLE_READER_BINDING_NAME
: el nombre que eliges para el recursoview
ClusterRoleBinding
. También puedes asignarle el nombre que desees.
Vincula funciones adicionales, según el acceso que tenga la cuenta. Para ver las opciones, consulta las funciones predeterminadas de Kubernetes.
Por ejemplo, para vincular la función
cluster-admin
, ejecuta el siguiente comando:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:ACCOUNT_NAME
Reemplaza
BINDING_NAME
por el nombre de la vinculación de la función de clúster para la cuenta de servicio.
Obtén el token del portador de la KSA
kubectl
Para adquirir el token del portador de la KSA, ejecuta el comando siguiente:
SECRET_NAME=KSA_NAME-token kubectl apply -f - << __EOF__ apiVersion: v1 kind: Secret metadata: name: "${SECRET_NAME}" annotations: kubernetes.io/service-account.name: "${KSA_NAME}" type: kubernetes.io/service-account-token __EOF__ until [[ $(kubectl get -o=jsonpath="{.data.token}" "secret/${SECRET_NAME}") ]]; do echo "waiting for token..." >&2; sleep 1; done kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 --decode
Reemplaza KSA_NAME
por el nombre que elijas para la KSA.
Copia el token del resultado de este comando y guárdalo para que los usuarios puedan usarlo para acceder a la consola de Google Cloud.