Autentícate en GKE on AWS con identidades externas

La federación de identidades de personal otorga a las identidades que no son de Google acceso a los servicios de Google Cloud. En el contexto de GKE on AWS, esto significa que puedes usar identidades externas preexistentes para crear o acceder a un clúster de GKE sin depender de las credenciales de Google.

Los beneficios de usar la federación de identidades de personal son los siguientes:

  • Eliminas la necesidad de tener cuentas duplicadas en diferentes plataformas o proveedores.
  • Configuras los permisos solo una vez, sin necesidad de configurar parámetros en varias plataformas.
  • Simplificas el acceso de los usuarios, ya que se requieren menos accesos y contraseñas.

Antes de comenzar

Antes de permitir que los usuarios o grupos externos accedan a los clústeres de GKE, debes realizar los siguientes pasos:

  1. Para que los usuarios o grupos externos puedan usar la API de GKE on AWS, configura la federación de identidades de personal:

  2. Asigna a tus usuarios o grupos externos la función gkemulticloud.viewer para que puedan acceder a los clústeres. Asigna el rol container.clusterViewer para ver los clústeres en la consola de Google Cloud.

    Ten en cuenta que los roles son colecciones de permisos. Cuando asignas un rol a una entidad (usuario, grupo o cuenta de servicio), le otorgas a esa entidad todos los permisos que contiene el rol.

    Usuarios

    Para los usuarios individuales, debes asignar el rol gkemulticloud.viewer:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.viewer" \
      --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • WORKFORCE_POOL_ID: Es el ID que identifica de forma única tu grupo de identidad de personal en Google Cloud. Cuando le des formato al ID, asegúrate de seguir los lineamientos recomendados que se proporcionan en la documentación de IAM en Parámetros de consulta.
    • SUBJECT_VALUE: Es el ID que identifica de forma única a un usuario externo. Por ejemplo, el ID puede ser una dirección de correo electrónico, como alex@cymbalgroup.com.

    Grupos

    Para los grupos, debes asignar la función gkemulticloud.viewer:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.viewer" \
      --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • WORKFORCE_POOL_ID: Es el ID que identifica de forma única tu grupo de identidad de personal en Google Cloud. Cuando le des formato al ID, asegúrate de seguir los lineamientos recomendados que se proporcionan en la documentación de IAM en Parámetros de consulta.
    • GROUP_ID: Es un ID que identifica de forma exclusiva un grupo externo.
  3. Opcional: Asigna a tus usuarios o grupos externos las funciones adecuadas de Identity and Access Management (IAM). Este paso solo es necesario si deseas otorgar a los usuarios o grupos la capacidad de crear o actualizar clústeres; no es necesario para acceder a un clúster.

    Usuarios

    Para los usuarios individuales, debes asignar el rol gkemulticloud.admin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.admin" \
      --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • WORKFORCE_POOL_ID: Es el ID que identifica de forma única tu grupo de identidad de personal en Google Cloud. Cuando le des formato al ID, asegúrate de seguir los lineamientos recomendados que se proporcionan en la documentación de IAM en Parámetros de consulta.
    • SUBJECT_VALUE: Es el ID que identifica de forma única a un usuario externo. Por ejemplo, el ID puede ser una dirección de correo electrónico, como alex@cymbalgroup.com.

    Grupos

    Para los grupos, debes asignar la función gkemulticloud.admin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.admin" \
      --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • WORKFORCE_POOL_ID: Es el ID que identifica de forma única tu grupo de identidad de personal en Google Cloud. Cuando le des formato al ID, asegúrate de seguir los lineamientos recomendados que se proporcionan en la documentación de IAM en Parámetros de consulta.
    • GROUP_ID: Es un ID que identifica de forma exclusiva un grupo externo.

Si deseas obtener más información sobre qué funciones y permisos de la API se requieren para GKE on AWS, consulta Funciones y permisos de la API.

Otorga acceso externo a los clústeres de GKE

Existen dos métodos para configurar la federación de identidades de personal, de modo que los usuarios o grupos externos puedan acceder a tus clústeres de GKE.

El método 1 requiere que definas un archivo RBAC y lo apliques al clúster. Este método ofrece un control detallado sobre los permisos, como permitir a los usuarios acceso de solo lectura a los recursos sin otorgarles un acceso más amplio.

El método 2 requiere que especifiques el acceso para las identidades externas cuando creas o actualizas un clúster. Este método otorga privilegios administrativos completos a los usuarios o grupos especificados.

Elige el método que mejor se adapte al nivel de control de acceso que deseas: el método 1 para obtener permisos más detallados o el método 2 para otorgar todos los derechos de administrador del clúster.

Método n.o 1: Usa un archivo RBAC

El primer método para otorgar acceso externo a los clústeres de GKE implica el uso de un archivo RBAC. Lleva a cabo los pasos siguientes:

  1. Define un archivo YAML de RBAC que incluya los sujetos (usuarios o grupos) y los permisos que deseas otorgarles dentro del clúster de GKE. A continuación, se muestran ejemplos de configuraciones de YAML de RBAC para usuarios individuales y grupos:

    Usuarios

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: gateway-cluster-admin-user
    subjects:
    - kind: User
      name: principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE
    roleRef:
      kind: ClusterRole
      name: cluster-admin
      apiGroup: rbac.authorization.k8s.io
    

    Reemplaza lo siguiente:

    • WORKFORCE_POOL_ID: Es el ID que identifica de forma única tu grupo de identidad de personal en Google Cloud. Cuando le des formato al ID, asegúrate de seguir los lineamientos recomendados que se proporcionan en la documentación de IAM en Parámetros de consulta.
    • SUBJECT_VALUE: Es el ID que identifica de forma única a un usuario externo. Por ejemplo, el ID puede ser una dirección de correo electrónico, como alex@cymbalgroup.com.

    Grupos

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: gateway-cluster-admin-group
    subjects:
    - kind: Group
      name: principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID
    roleRef:
      kind: ClusterRole
      name: cluster-admin
      apiGroup: rbac.authorization.k8s.io
    

    Reemplaza lo siguiente:

    • WORKFORCE_POOL_ID: Es el ID que identifica de forma única tu grupo de identidad de personal en Google Cloud. Cuando le des formato al ID, asegúrate de seguir los lineamientos recomendados que se proporcionan en la documentación de IAM en Parámetros de consulta.
    • GROUP_ID: Es un ID que identifica de forma exclusiva un grupo externo.
  2. Identifica el clúster de GKE que deseas configurar y establécelo como el contexto activo con el siguiente comando:

      kubectl config use-context CLUSTER_CONTEXT
    

    Reemplaza CLUSTER_CONTEXT por el nombre del contexto adecuado para tu clúster.

  3. Con el clúster de GKE deseado establecido como el contexto activo, aplica la configuración de RBAC al clúster con el siguiente comando:

    kubectl apply -f RBAC_PATH
    

    Reemplaza RBAC_PATH por la ruta de acceso al archivo RBAC que creaste o editaste.

    Cuando ejecutas este comando, los usuarios o grupos especificados en la configuración de RBAC ahora tienen los permisos para acceder al clúster de GKE orientado y administrarlo, como se define en las reglas de RBAC.

  4. Si necesitas realizar cambios posteriores en los permisos, modifica el archivo RBAC y vuelve a aplicarlo al clúster con la repetición de los pasos anteriores.

Método n.o 2: Otorga acceso a identidades externas durante la creación o actualización del clúster

El método 2 otorga acceso a identidades externas durante el proceso de creación o actualización del clúster.

Para crear un clúster, sigue los pasos que se indican en Crea un clúster. Para actualizar un clúster, sigue los pasos que se indican en Cómo actualizar un clúster.

Cuando ejecutes el comando gcloud para crear o actualizar un clúster, especifica los parámetros admin-users o admin-groups de la siguiente manera:

gcloud container aws clusters [create|update] CLUSTER_NAME \
    --location=LOCATION
    --admin-users=principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject SUBJECT_VALUE \
    --admin-groups=principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre de tu clúster.
  • LOCATION: Es la región de Google Cloud en la que se administra tu clúster.
  • WORKFORCE_POOL_ID: Es el ID que identifica de forma única tu grupo de identidad de personal en Google Cloud. Cuando le des formato al ID, asegúrate de seguir los lineamientos recomendados que se proporcionan en la documentación de IAM en Parámetros de consulta.
  • SUBJECT_VALUE: Es el ID que identifica de forma única a un usuario externo. Por ejemplo, el ID puede ser una dirección de correo electrónico, como alex@cymbalgroup.com.
  • GROUP_ID: Es un ID que identifica de forma exclusiva un grupo externo.

Resumen de cómo otorgar acceso de IDs externos a clústeres de GKE

Después de realizar el método 1 o 2, los usuarios o grupos externos especificados pueden usar la consola de Google Cloud para conectarse y ver los detalles del clúster. Como alternativa, pueden usar kubectl con identidad desde la CLI de gcloud para administrar, manipular y comunicarse con el clúster.

Para ejecutar comandos kubectl en clústeres de GKE, consulta cómo generar una entrada kubeconfig.