Autenticarse mediante un token de portador

En esta página se explica cómo configurar la autenticación mediante un token de portador para iniciar sesión en clústeres registrados fuera de Google Cloud. Una vez completada la configuración, los administradores del clúster podrán iniciar sesión en los clústeres desde la consolaGoogle Cloud . Se admiten muchos tipos de tokens de portador, tal como se especifica en la autenticación de Kubernetes. El método más sencillo es crear una cuenta de servicio de Kubernetes (KSA) en el clúster y usar su token de portador para iniciar sesión.

Otros métodos de autenticación

Como alternativa a la configuración de la autenticación mediante un token de portador, puedes configurar uno de los siguientes métodos de autenticación en función de las necesidades de tu organización:

  • Identidad de Google: permite a los usuarios iniciar sesión con su Google Cloud identidad. Usa esta opción si tus usuarios ya tienen acceso a Google Cloud con una identidad de Google.

  • Si tu clúster está configurado para usar un proveedor de identidades OIDC, puedes usarlo para autenticarte en el clúster desde la consola de Google Cloud . Puedes consultar cómo configurar OIDC para clústeres de GKE en las siguientes guías:

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 mediante un token de portador.

Conceder roles de gestión de identidades y accesos para acceder a través de la Google Cloud consola

Los usuarios que quieran ver los clústeres conectados mediante la Google Cloud consola deben tener al menos los siguientes roles de gestión de identidades y accesos:

  • roles/container.viewer. Este rol permite a los usuarios ver recursos de contenedores en la consola, incluida la página Clústeres de GKE. Google Cloud Para obtener más información sobre los permisos incluidos en este rol, consulta Roles de Kubernetes Engine en la documentación de gestión de identidades y accesos.

  • roles/gkehub.viewer. Este rol permite a los usuarios ver los clústeres externos Google Cloud en la Google Cloud consola. Los usuarios no necesitan este rol si tu flota no incluye clústeres externos a Google Cloud. Para obtener información sobre los permisos incluidos en este rol, consulta Roles de GKE Hub en la documentación de gestión de identidades y accesos.

Ejecuta los siguientes comandos para conceder 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

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto host de la flota.

  • EMAIL_ADDRESS: la dirección de correo asociada a la cuenta del usuario. Google Cloud

Para obtener más información sobre cómo conceder roles de gestión de identidades y accesos, consulta el artículo Administra el acceso a proyectos, carpetas y organizaciones de la documentación de gestión de identidades y accesos.

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 del clúster creéis un KSA para cada usuario que inicie sesión en el clúster. Usar un token de portador es como usar una contraseña, por lo que cada usuario debe tener su propia cuenta. Al iniciar sesión con el token de portador de la KSA, todas las operaciones se ejecutan como la KSA, restringidas por los roles de RBAC que tenga la KSA.

El KSA debe tener al menos los siguientes roles de RBAC en el clúster para acceder a él a través de la consola:

Crear y aplicar el cloud-console-reader rol de RBAC

Los usuarios autenticados que quieran acceder a los recursos de un clúster en la Google Cloud consola deben tener los permisos de Kubernetes pertinentes. Si no quieres conceder a esos usuarios permisos más amplios, como los de un administrador del clúster, puedes crear un rol 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 creando un recurso ClusterRole RBACcloud-console-reader en el clúster.

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

kubectl

Para crear el cloud-console-reader ClusterRole 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

A continuación, puede conceder este rol a los administradores de claves de servicio tal como se describe en la siguiente sección.

Crear y autorizar una KSA

kubectl

Para crear una KSA y vincularle permisos, sigue estos pasos:

  1. Crea los recursos de KSA y ClusterRoleBinding para vincular los recursos de view y cloud-console-reader de RBAC de Kubernetes ClusterRoles al 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}
    

    Haz los cambios siguientes:

    • KSA_NAME: el nombre que elijas para la KSA
    • VIEW_BINDING_NAME: el nombre que elijas para el recurso view ClusterRoleBinding. Puedes ponerle el nombre que quieras, pero quizá te resulte más fácil ponerle el nombre de la KSA.
    • CLOUD_CONSOLE_READER_BINDING_NAME: el nombre que elijas para el recurso cloud-console-reader ClusterRoleBinding. Puedes ponerle el nombre que quieras.
  2. En función del acceso que deba tener la cuenta de servicio, asigna roles adicionales a la KSA. Para ver las opciones, consulta los roles predeterminados de Kubernetes.

    Por ejemplo, si quieres desplegar una aplicación de Kubernetes desde Cloud Marketplace, vincula el rol cluster-admin al KSA:

    kubectl create clusterrolebinding BINDING_NAME \
       --clusterrole cluster-admin --serviceaccount default:KSA_NAME
    

    Sustituye BINDING_NAME por el nombre de la vinculación de rol de clúster de la cuenta de servicio.

Autorizar otras cuentas

kubectl

Para cada usuario o cuenta de servicio que obtenga acceso al clúster, crea recursos ClusterRoleBinding para vincular los roles view y cloud-console-reader a su cuenta:

  1. Vincula view y cloud-console-reader ClusterRoles:

    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}
    

    Haz los cambios siguientes:

    • ACCOUNT_NAME: la cuenta de servicio de Kubernetes
    • VIEW_BINDING_NAME: el nombre que elijas para el recurso view ClusterRoleBinding. Puedes ponerle el nombre que quieras, pero te resultará más fácil si le pones el nombre del usuario o de la cuenta de servicio.
    • CLOUD_CONSOLE_READER_BINDING_NAME: el nombre que elijas para el recurso view ClusterRoleBinding. Puedes ponerle el nombre que quieras.
  2. Asigna roles adicionales en función del acceso que deba tener la cuenta. Para ver las opciones, consulta los roles predeterminados de Kubernetes.

    Por ejemplo, para vincular el rol cluster-admin, ejecuta el siguiente comando:

    kubectl create clusterrolebinding BINDING_NAME \
       --clusterrole cluster-admin --serviceaccount default:ACCOUNT_NAME
    

    Sustituye BINDING_NAME por el nombre de la vinculación de rol de clúster de la cuenta de servicio.

Obtener el token de portador de la KSA

kubectl

Para obtener el token de portador de la KSA, ejecuta el siguiente comando:

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

Sustituye KSA_NAME por el nombre que elijas para la KSA.

En el resultado de este comando, copia el token y guárdalo para que los usuarios puedan usarlo para iniciar sesión en la Google Cloud consola.