Configurar la puerta de enlace de conexión

Esta guía está dirigida a los administradores de la plataforma que necesitan configurar la puerta de enlace de Connect para que la usen los usuarios y las cuentas de servicio de su proyecto. Antes de leer esta guía, debes familiarizarte con los conceptos de nuestra descripción general.

Esta configuración permite a los usuarios usar la puerta de enlace de conexión directamente y conectarse a clústeres registrados fuera de Google Cloud con su identidad de Google Cloud en Cloud Console, como se describe en Acceder a un clúster desde Cloud Console.

Esta configuración solo permite la autorización de usuarios y servicios en función de sus ID individuales, no de su pertenencia a Grupos de Google. Para configurar la asistencia de grupo adicional, consulta Configura la puerta de enlace de Connect mediante Grupos de Google.

Antes de comenzar

  • Asegúrate de tener instaladas las siguientes herramientas de línea de comandos:

    • La versión más reciente del SDK de Cloud, que incluye gcloud, la herramienta de línea de comandos para interactuar con Google Cloud.
    • kubectl

    Si usas Cloud Shell como entorno de shell para interactuar con Google Cloud, estas herramientas están instaladas.

  • Asegúrate de haber inicializado la herramienta de gcloud para usarla en tu proyecto.

  • En esta guía, se supone que tienes roles/owner en tu proyecto. Si no eres propietario de un proyecto, es posible que necesites permisos adicionales para realizar algunos de los pasos de configuración.

Habilite las API

Para agregar la puerta de enlace al proyecto, habilita la API de puerta de enlace de Connect y las API de dependencia requeridas. Si tus usuarios solo desean autenticarse en los clústeres mediante Cloud Console, no necesitas habilitar connectgateway.googleapis.com, pero sí debes habilitar las API restantes.

PROJECT_ID=example_project
gcloud services enable --project=${PROJECT_ID}  \
connectgateway.googleapis.com \
anthos.googleapis.com \
gkeconnect.googleapis.com \
gkehub.googleapis.com \
cloudresourcemanager.googleapis.com

Verifica los clústeres registrados

Solo se puede acceder a los clústeres registrados en la flota de tu proyecto a través de la puerta de enlace de Connect. Los clústeres de Anthos locales y en otras nubes públicas se registran automáticamente cuando se crean. Sin embargo, los clústeres de GKE en Google Cloud y los clústeres adjuntos deben registrarse por separado. Si necesitas registrar un clúster, sigue las instrucciones en Registra un clúster. Ten en cuenta que los clústeres de GKE deben registrarse con el agente de Connect para usar la puerta de enlace.

Para verificar que se hayan registrado los clústeres, ejecuta el siguiente comando:

gcloud container hub memberships list

Deberías ver una lista de todos tus clústeres registrados, como en este resultado de ejemplo:

NAME         EXTERNAL_ID
cluster-1    0192893d-ee0d-11e9-9c03-42010a8001c1
cluster-2    f0e2ea35-ee0c-11e9-be79-42010a8400c2

Otorga funciones de IAM a los usuarios.

Los usuarios y las cuentas de servicio necesitan las siguientes funciones adicionales de Google Cloud para interactuar con los clústeres conectados a través de la puerta de enlace, a menos que el usuario o la cuenta tenga roles/owner en el proyecto:

  • roles/gkehub.gatewayAdmin: Esta función permite que un usuario acceda a la API de la puerta de enlace de Connect.
    • Si un usuario solo necesita acceso de solo lectura a clústeres conectados, se puede usar roles/gkehub.gatewayReader en su lugar.
  • roles/gkehub.viewer: Esta función le permite a un usuario recuperar las credenciales del clúster.

Debes otorgar estas funciones mediante el comando gcloud projects add-iam-policy-binding, de la siguiente manera:


# [PROJECT_ID] is the project's unique identifier.
# [ACCOUNT_ADDRESS] is an email address, which can belong to either a user account or a service account

PROJECT_ID=example_project

# MEMBER should be of the form `user|serviceAccount:$ACCOUNT_ADDRESS`, for example:
# MEMBER=user:foo@example.com
# MEMBER=serviceAccount:test@example-project.iam.gserviceaccount.com

MEMBER=user:foo@example.com

# GATEWAY_ROLE should be `roles/gkehub.gatewayAdmin` or `roles/gkehub.gatewayReader`.
GATEWAY_ROLE=roles/gkehub.gatewayAdmin

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member ${MEMBER} \
--role ${GATEWAY_ROLE}
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member ${MEMBER} \
--role roles/gkehub.viewer

Para obtener más información sobre cómo otorgar permisos y funciones de IAM, consulta Otorga, cambia y revoca el acceso a los recursos.

Otorga funciones para acceder a través de Cloud Console

Para los usuarios que solo desean interactuar con clústeres conectados mediante Cloud Console, se requieren las siguientes funciones:

  • roles/gkehub.viewer: Esta función le permite al usuario ver los clústeres en la página de la consola de GKE.
  • roles/container.viewer: Esta función le permite al usuario ver los recursos del contenedor en Cloud Console.

Configura políticas de control de acceso basado en funciones (RBAC)

Por último, el servidor de la API de Kubernetes de cada clúster debe poder autorizar los comandos de kubectl que provienen de la puerta de enlace de los usuarios y las cuentas de servicio que especificaste. Para garantizar esto, debes actualizar las políticas de RBAC en cada clúster que quieras que sea accesible mediante la puerta de enlace. Debes actualizar o agregar dos políticas:

  • Una política de robo de identidad que autorice al agente de Connect a enviar solicitudes al servidor de la API de Kubernetes en nombre de un usuario. En el siguiente ejemplo, se muestra cómo crear y aplicar esa política para un usuario (foo@example.com) y una cuenta de servicio (test@example-project.iam.gserviceaccount.com), guardar el archivo de política como /tmp/impersonate.yaml y aplicarlo al clúster asociado con el contexto actual:
cat <<EOF > /tmp/impersonate.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: gateway-impersonate
rules:
- apiGroups:
  - ""
  resourceNames:
  - foo@example.com
  - test@example-project.iam.gserviceaccount.com
  resources:
  - users
  verbs:
  - impersonate
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: gateway-impersonate
roleRef:
  kind: ClusterRole
  name: gateway-impersonate
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: connect-agent-sa
  namespace: gke-connect
EOF
# Apply impersonation policy to the cluster.
kubectl apply -f /tmp/impersonate.yaml

Ten en cuenta que esto no garantiza que el servidor de la API autorice la solicitud. Para ello, también debes otorgarle a cada cuenta los permisos de RBAC adecuados de forma explícita para realizar operaciones de Kubernetes, como se describe a continuación.

  • Una política de permisos que especifique qué permisos tiene el usuario en el clúster. En el siguiente ejemplo, se muestra cómo otorgar permisos a un usuario y una cuenta de servicio cluster-admin en el clúster, lo que guarda el archivo de política como /tmp/admin-permission.yaml y lo aplica al clúster asociado con el contexto actual.
cat <<EOF > /tmp/admin-permission.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: gateway-cluster-admin
subjects:
- kind: User
  name: foo@example.com
- kind: User
  name: test@example-project.iam.gserviceaccount.com
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
EOF
# Apply permission policy to the cluster.
kubectl apply -f /tmp/admin-permission.yaml

Puedes obtener más información sobre cómo especificar permisos RBAC en Usa la autorización RBAC.

Asistencia para los Controles del servicio de VPC

Los Controles del servicio de VPC proporcionan una capa adicional de defensa de seguridad para los servicios de Google Cloud, que es independiente de la administración de identidades y accesos (IAM). Si bien IAM habilita un control de acceso basado en la identidad detallado, los Controles del servicio de VPC permiten una seguridad perimetral basada en el contexto más amplia, que incluye el control de salida de datos en todo el perímetro. Por ejemplo, puedes especificar que solo ciertos proyectos puedan acceder a tus datos de BigQuery. Puedes encontrar más información sobre cómo funcionan los Controles del servicio de VPC para proteger tus datos en la Descripción general de los Controles del servicio de VPC.

Puedes usar los Controles del servicio de VPC con la puerta de enlace de Connect para obtener seguridad adicional de los datos, una vez que te asegures de que se puede acceder a las API necesarias para usar la puerta de enlace desde el perímetro de servicio especificado.

Próximos pasos