Verificando autenticación…

Saltar al contenido principal

Wrapper Utils Resources

Propósito y Alcance

Este proyecto, wrapper-utils-resources, tiene como propósito principal proporcionar las configuraciones y plantillas necesarias para desplegar el gsuite-auth-wrapper en entornos Google Kubernetes Engine (GKE). El gsuite-auth-wrapper actúa como un proxy de autenticación que permite asegurar aplicaciones mediante la autenticación con G Suite.

El alcance de este proyecto incluye:

  • Definición de manifiestos de Kubernetes (Deployment, Service, ConfigMap) para el gsuite-auth-wrapper utilizando plantillas ERB.
  • Gestión de configuraciones específicas por entorno (desarrollo, integración, producción) a través de archivos YAML.
  • Integración con pipelines de Jenkins para el despliegue automatizado utilizando Krane.

Este proyecto no contiene el código fuente del gsuite-auth-wrapper en sí, sino los recursos para su despliegue y configuración.

Arquitectura

El proyecto está diseñado para desplegar el gsuite-auth-wrapper como un componente dentro de un clúster de GKE. La arquitectura se basa en:

  1. Google Kubernetes Engine (GKE): Plataforma de orquestación de contenedores donde se despliega el wrapper.
  2. gsuite-auth-wrapper: Un contenedor Docker que maneja la autenticación con G Suite. Se despliega como un Pod en Kubernetes.
  3. ConfigMaps: Para gestionar la configuración de la aplicación y del entorno.
  4. Secrets de Kubernetes: Para gestionar información sensible como las credenciales de la cuenta de servicio de G Suite.
  5. Service de Kubernetes: Para exponer el gsuite-auth-wrapper dentro del clúster.

El deployment.yaml.erb define un Deployment que gestiona los Pods del gsuite-auth-wrapper y un Service de tipo ClusterIP para la comunicación interna.

(Nota: Confluence puede requerir un plugin para renderizar diagramas Mermaid. Alternativamente, enlazar a una imagen del diagrama.)

Enlace a Diagrama de Arquitectura (si existe externamente)

Tecnologías y Dependencias

  • Orquestación de Contenedores: Google Kubernetes Engine (GKE)
  • Contenerización: Docker (para la imagen gsuite_auth_wrapper)
  • Integración Continua/Despliegue Continuo (CI/CD): Jenkins
    • Pipeline: pipelineLatam("gke-krane-deploy")
    • Herramienta de despliegue: Krane
  • Lenguaje de Plantillas: ERB (Embedded Ruby) para manifiestos de Kubernetes.
  • Formato de Configuración: YAML
  • Control de Versiones: Git (GitLab)
  • Autenticación: G Suite

Configuración Local

Este proyecto consiste principalmente en archivos de configuración y plantillas para despliegue, por lo que no hay una "ejecución local" de una aplicación. La configuración local se centra en obtener y entender el código.

Prerrequisitos

  • Git instalado.
  • Acceso al repositorio del proyecto en GitLab.
  • (Opcional) Ruby instalado si se desea pre-procesar localmente las plantillas ERB (normalmente lo hace el pipeline).
  • (Opcional) kubectl configurado si se desea interactuar con un clúster de GKE.

Pasos de Configuración

  1. Clonar el repositorio: Sigue los siguientes pasos

  2. Explorar la estructura del proyecto:

    • deploy/gke/deployment.yaml.erb: Plantilla principal del manifiesto de Kubernetes.
    • deploy/env/: Contiene archivos YAML (dev.yaml, intg.yaml, prod.yaml) con configuraciones específicas por entorno.
    • Jenkinsfile: Define el pipeline de despliegue.

Despliegue

El despliegue de este proyecto se realiza a través de un pipeline de Jenkins que utiliza Krane para aplicar los manifiestos de Kubernetes en el clúster GKE correspondiente.

Pipeline de Jenkins

El Jenkinsfile define el pipeline a utilizar:

#!/usr/bin/env groovy

pipelineLatam("gke-krane-deploy")

Este pipeline se encarga de:

  1. Obtener el código fuente.
  2. Procesar la plantilla deployment.yaml.erb con las variables de entorno y del pipeline (ej. <%= environment %>, <%= git_commit %>).
  3. Aplicar los manifiestos generados al clúster GKE utilizando Krane.

Configuración por Entorno

Los archivos en deploy/env/ especifican la versión de la imagen gsuite_auth_wrapper para cada entorno:

  • deploy/env/dev.yaml:
    gsuite_auth_wrapper: us-docker.pkg.dev/pipeline-corporativo/application-develop/ltmdev/gsuite-auth-wrapper:12
  • deploy/env/intg.yaml:
    gsuite_auth_wrapper: us-docker.pkg.dev/pipeline-corporativo/application-develop/ltmdev/gsuite-auth-wrapper:12
  • deploy/env/prod.yaml:
    gsuite_auth_wrapper: us-docker.pkg.dev/pipeline-corporativo/component-images/gsuite-auth-wrapper:201

Estas configuraciones son utilizadas por el pipeline para seleccionar la imagen correcta del gsuite_auth_wrapper durante el despliegue.

Endpoints de la API

Este proyecto en sí no define una API. Despliega el gsuite-auth-wrapper, el cual expone una interfaz para la autenticación. El servicio de Kubernetes creado por este proyecto es:

  • Nombre del Servicio: gsuite-auth-wrapper-acl
  • Tipo: ClusterIP
  • Puerto del Servicio: 80
  • Puerto del Contenedor (targetPort): 8080

Cualquier API expuesta por el gsuite-auth-wrapper será accesible a través de este servicio en el puerto 8080 dentro del clúster. Para detalles específicos de la API del gsuite-auth-wrapper, se debe consultar su documentación particular.

Componentes Específicos

gsuite-auth-wrapper

Este es el componente principal que se despliega.

  • Configuración General: Definida en deploy/gke/deployment.yaml.erb.
  • Imagen Docker: Especificada por entorno en los archivos deploy/env/*.yaml. Ejemplo: us-docker.pkg.dev/pipeline-corporativo/application-develop/ltmdev/gsuite-auth-wrapper:12
  • Variables de Entorno:
    • ENVIRONMENT: Entorno actual (e.g., dev, intg, prod).
    • APPLICATION: Nombre de la aplicación propietaria (inyectado como <%= owner_name %>).
    • IS_PROD_DEPLOY: Booleano indicando si es un despliegue a producción.
    • SERVICE_ACCOUNT: ID de la cuenta de servicio de G Suite (desde secret gsuite-account-id).
    • SERVICE_USER: Usuario de la cuenta de servicio de G Suite (desde secret gsuite-account-user).
    • SERVICE_PRIVATE_KEY: Ruta al archivo de clave privada de la cuenta de servicio (/secrets/gsuite/gsuite-account).
  • Montaje de Secretos:
    • Se monta el secret de Kubernetes gsuite-account en /secrets/gsuite dentro del contenedor, que debe contener la clave gsuite-account con el JSON de la clave privada.
  • Puertos: Expone el puerto 8080 para tráfico HTTP.

Fragmento del deployment.yaml.erb para el contenedor:

containers:
- name: gsuite-auth
image: "<%= gsuite_auth_wrapper %>" # Variable de entorno
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: "utils-<%= environment %>-configmap"
ports:
- containerPort: 8080
name: http
env:
- name: SERVICE_ACCOUNT
valueFrom:
secretKeyRef:
name: gsuite-account-id
key: gsuite-account-id
# ... otras variables ...
volumeMounts:
- name: gsuite-account
mountPath: /secrets/gsuite
readOnly: true

Configuración de Deployment (ERB)

El archivo deploy/gke/deployment.yaml.erb es una plantilla Ruby ERB que genera los manifiestos de Kubernetes. Utiliza variables inyectadas por el pipeline de despliegue, como:

  • <%= environment %>: El entorno de despliegue (dev, intg, prod).
  • <%= owner_name %>: Nombre del propietario o aplicación.
  • <%= git_commit %>: Hash del commit de Git.
  • <%= build_id %>: ID de la construcción de Jenkins.
  • <%= gsuite_auth_wrapper %>: URL de la imagen Docker del wrapper.
  • <%= is_prod_deploy %>: Booleano indicando si es un despliegue a producción.

Pruebas

Este proyecto se enfoca en la infraestructura como código para el despliegue del gsuite-auth-wrapper. Las pruebas específicas para este proyecto se centrarían en:

  • Validación de plantillas ERB: Asegurar que las plantillas generan YAML válido.
  • Pruebas de despliegue (Dry-run): Verificar que krane deploy puede interpretar correctamente los manifiestos.
  • Pruebas de integración post-despliegue: Verificar que el gsuite-auth-wrapper se despliega correctamente y es accesible en el clúster.

Las pruebas funcionales del gsuite-auth-wrapper en sí mismo están fuera del alcance de este proyecto y deben ser cubiertas por el equipo desarrollador de dicho wrapper.

Actualmente, no hay scripts de prueba automatizados incluidos en este repositorio.

Consideraciones de Seguridad

  • Gestión de Credenciales: Las credenciales de la cuenta de servicio de G Suite (gsuite-account, gsuite-account-id, gsuite-account-user) deben ser gestionadas de forma segura como Secrets de Kubernetes. Nunca deben almacenarse directamente en el repositorio Git.
  • Tokens de Acceso: Evitar comitear tokens de acceso personal (PAT) o claves API en archivos de configuración del repositorio (como .git/config). Estos deben ser gestionados a través de variables de entorno del sistema de CI/CD o configuraciones locales seguras.
  • Imágenes Docker: Utilizar imágenes de fuentes confiables y versiones específicas (evitar latest). Las imágenes se obtienen de us-docker.pkg.dev, un registro privado de Google Cloud, lo cual es una buena práctica.
  • Principio de Menor Privilegio: La cuenta de servicio de G Suite utilizada por el wrapper debe tener solo los permisos estrictamente necesarios.
  • Network Policies: Considerar la implementación de Network Policies en Kubernetes para restringir el tráfico hacia y desde los pods del gsuite-auth-wrapper.