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:

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:

  1. Crea los recursos de la KSA y ClusterRoleBinding para vincular el RBAC ClusterRoles de Kubernetes view y cloud-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 recurso view ClusterRoleBinding; puedes ponerle el nombre que quieras, pero puede que sea más fácil asignarle el nombre de la KSA
    • CLOUD_CONSOLE_READER_BINDING_NAME: el nombre que eliges para el recurso cloud-console-reader ClusterRoleBinding. También puedes asignarle el nombre que desees.
  2. 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:

  1. Vincula la view y las ClusterRoles 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 Kubernetes
    • VIEW_BINDING_NAME: el nombre que elijas para el recurso view 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 recurso view ClusterRoleBinding. También puedes asignarle el nombre que desees.
  2. 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.