Información general
Google Cloud Policy Intelligence ayuda a las empresas a comprender y gestionar sus políticas para reducir el riesgo. Gracias al aumento de la visibilidad y la automatización, los clientes pueden mejorar su seguridad sin incrementar la carga de trabajo.
Recommender te permite obtener recomendaciones para los Google Cloud recursos, lo que te ayuda a mejorar la seguridad en la nube, ahorrar costes y más. Para ver una lista de las recomendaciones admitidas, consulta la documentación del recomendador. En este tutorial se describe cómo usar las recomendaciones de tamaño para instancias de VM y las recomendaciones de gestión de identidades y accesos (IAM). Recomendador usa el aprendizaje automático para ofrecer a los administradores recomendaciones sobre cómo eliminar el acceso innecesario a los recursos de Google Cloud y cambiar el tamaño de las instancias de Compute Engine para que el uso de los recursos sea más eficiente.
Cada recomendación incluye una acción sugerida y su impacto. Después de revisar las recomendaciones sobre los impactos identificados y otras consideraciones específicas de tu entorno, puedes seleccionar las que quieras aplicar. Puedes aplicar las recomendaciones manualmente desde la Google Cloud consola o de forma programática integrándolas en tu canalización de infraestructura como código (IaC).
La IaC te permite automatizar la creación de tus Google Cloud recursos.Debes mantener actualizado tu repositorio de IaC y dirigir a través de él los cambios que se hagan en laGoogle Cloud organización. Las estrategias de IaC en las organizaciones suelen ser beneficiosas cuando se implementan con rigor y sirven como única fuente de información fiable para la infraestructura en la nube. Es fundamental mantener actualizado el repositorio de IaC para evitar que haya diferencias entre la versión de la infraestructura que refleja el repositorio de IaC y lo que tienes en la organización.
Recomendaciones de gestión de identidades y accesos
Entre otras prácticas recomendadas, una de las más habituales es el principio de seguridad de los privilegios mínimos y la consideración de cómo se implementan los cambios en tu organización y se sincronizan con tu repositorio de IaC.
Recomendación de tamaño para máquinas virtuales
Las recomendaciones de tamaño te ayudan a reducir los costes, ya que te sugieren cómo cambiar el tamaño del tipo de máquina de tus instancias para usar los recursos de las instancias de forma más eficiente.
En este tutorial se describe cómo diseñar y crear una canalización de automatización para aplicar una recomendación de Estadísticas de políticas mediante programación. Como parte de esta canalización de automatización, aprenderá a mantener actualizado su repositorio de IaC con los cambios que decida hacer en su organización, en función del tamaño de las VMs y de la recomendación de enlaces de políticas de gestión de identidades y accesos que Recommender pone a su disposición. Google Cloud
En este tutorial se usa HashiCorp Terraform como herramienta de IaC. Sin embargo, los patrones de arquitectura y los componentes que se usan en la canalización de automatización descrita se pueden aprovechar aunque uses otra herramienta de gestión de IaC, como Deployment Manager. Deberá modificar el código base de código abierto que se proporciona en este tutorial para adaptarlo a su implementación específica de IaC.
Esta guía está dirigida a arquitectos, propietarios de productos y desarrolladores que puedan ser responsables de la administración, la seguridad y la planificación de la infraestructura de suGoogle Cloud.
Arquitectura de la automatización del flujo de procesamiento
En el siguiente diagrama se muestran los componentes que se usan en esta pipeline de automatización.
Una tarea programada de Cloud Scheduler ejecuta el servicio RecommenderParser. El servicio llama a la API Recommender para obtener recomendaciones de Recommender para los proyectos que especifiques. A continuación, analiza estas recomendaciones de tamaño de VM y de IAM para asignarlas a la configuración que tenga en sus manifiestos de Terraform. El servicio actualiza los manifiestos de IaC para reflejar estas recomendaciones. Genera una solicitud de extracción con los cambios para que puedas revisar las actualizaciones. Una vez que hayas revisado y combinado la solicitud de extracción, un trabajo de Cloud Build implementará los cambios en tu infraestructura en tuGoogle Cloud organización.
En la canalización se usan varios servicios auxiliares Google Cloud para hacer un seguimiento de las recomendaciones procesadas, generar notificaciones cuando se completa la compilación y almacenar el estado de Terraform. A lo largo de este tutorial, obtendrás más información sobre estos servicios.
En la siguiente lista se describe la finalidad de los componentes y los requisitos de control de acceso:
- Recomendaciones de Platform Intelligence
- Propósito: generar recomendaciones de seguridad y de tamaño de las VMs
Control de acceso: la cuenta de servicio Google Cloud debe tener los permisos de gestión de identidades y accesos necesarios para obtener recomendaciones mediante la API Recommender.
Consulta los roles y permisos de Recommender para seleccionar el rol más adecuado para la cuenta de servicio que usas para ejecutar el servicio recommender-parser.
- Cloud Scheduler
Propósito: Cloud Scheduler activa el servicio Recommender Parser. Cloud Scheduler te permite configurar varias tareas que invocan tantas instancias del servicio de análisis como necesites. Cada invocación debe incluir las siguientes entradas:
- Lista de proyectos para los que se deben procesar las recomendaciones
- Tipo de recomendación
- Nombre del repositorio de IaC
Control de acceso: crea o identifica una Google Cloud cuenta de servicio que se usará para las llamadas de Cloud Scheduler a tu servicio Recommender Parser.
Concede a la cuenta de servicio el rol Agente de servicio de Cloud Scheduler para que pueda ejecutar tareas de Cloud Scheduler. Además, asigna a la cuenta de servicio el rol de invocador de Cloud Run, ya que esa cuenta invoca un servicio de Cloud Run.
Para obtener más información, consulta la documentación sobre cómo configurar el acceso autenticado para las tareas del programador.
- Servicio Cloud Run
Finalidad: El servicio recommender-parser es donde reside toda la lógica de procesamiento. Tiene varias rutas, cada una de las cuales cumple un propósito específico:
- Analiza las recomendaciones de cada tipo.
- Actualizar el estado de las recomendaciones que se están procesando
Control de acceso: usa la gestión de identidades y accesos para gestionar el acceso a este servicio.
Además, asigna el servicio a una cuenta de servicio específica. De esta forma, solo el servicio podrá invocar otros servicios, como Firestore.
- HashiCorp Terraform
Propósito: Terraform 0.12 es la herramienta de IaC.
Se usa un compilador de Cloud Build para Terraform con el fin de invocar comandos de Terraform y la cuenta de servicio de Cloud Build se usa para ese propósito.
- Cloud Build
Finalidad: Google Cloud Build automatiza el despliegue de la infraestructura en función de los cambios realizados en los manifiestos de IaC según las recomendaciones de la inteligencia de las políticas.
Control de acceso: la cuenta de servicio de Cloud Build debe tener el conjunto de permisos adecuado para interactuar con los recursos de tu proyecto de prueba.
Consulta la documentación sobre cómo configurar una cuenta de servicio de Cloud Build.
- GitHub
Finalidad: el repositorio de IaC usa GitHub para el control de código fuente. El repositorio de IaC en GitHub está integrado con Cloud Build. Cuando se hacen confirmaciones en la rama principal, se activa una tarea de Cloud Build para ejecutar un conjunto de tareas preconfiguradas.
Control de acceso: tendrás que generar claves SSH para habilitar el acceso a tu repositorio de IaC.
Además, debes generar un token de acceso personal para enviar confirmaciones a GitHub.
- Firestore
Firestore es una base de datos NoSQL de documentos totalmente gestionada y escalable que se usa en esta arquitectura para conservar la información relacionada con los IDs de recomendación que analiza el servicio Recommender Parser, junto con los detalles correspondientes pertinentes para las confirmaciones de Git.
Los detalles que se conservan en Firestore desempeñan un papel fundamental en el bucle de comentarios que forma parte de la canalización de extremo a extremo. Después de recoger una recomendación generada por la API Recommender y antes de procesarla, el servicio marca el estado de la recomendación como
CLAIMED
. Una vez que se haya aplicado la recomendación correctamente, el servicio consulta la base de datos para obtener los IDs de las recomendaciones que se han aplicado correctamente mediante el trabajo de Cloud Build y cambia el estado de la recomendación aSUCCEEDED
. Si el trabajo de Cloud Build falla, el estado de la recomendación cambia aFAILED
.Control de acceso: consulta los roles de Firestore para obtener más información. El servicio recommender-parser lee datos de Firestore y necesita el rol roles/datastore.user para hacerlo.
- Pub/Sub
Finalidad: Cloud Build publica mensajes en un tema de Pub/Sub cuando cambia el estado de tu compilación, por ejemplo, cuando se crea, cuando pasa a un estado de trabajo y cuando se completa.
El tema de Pub/Sub en el que Cloud Build publica mensajes se llama "cloud-builds" y se crea automáticamente cuando habilitas la API Cloud Build en tu proyecto.
Control de acceso: las suscripciones push se pueden configurar para proporcionar un encabezado de autenticación que permita al servicio autorizar la solicitud. Consulta más información en Usar las suscripciones de inserción.
Objetivos
- Crea un flujo de automatización para
- Monitorizar de forma proactiva las recomendaciones de la función Estadísticas de políticas de la plataforma
- Analizar recomendaciones y aplicar actualizaciones a un repositorio de IaC
- Descubre cómo puedes usar un conjunto de Google Cloud servicios, HashiCorp Terraform y GitHub para crear esta canalización.
- Conocer las suposiciones y las prácticas recomendadas que debes tener en cuenta para crear esta canalización
- Probar el flujo de procesamiento
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
- Cloud Run
- Cloud Build
- Compute Engine
- Cloud Storage
- Firestore
- Pub/Sub
- Cloud Scheduler
- Recommender
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Antes de empezar
En este tutorial se da por hecho que tienes una cuenta de GitHub y que conoces Git, Node.js, Terraform y Docker.
Notas de la versión y supuestos
Hay mucha variabilidad en la forma en que se usan las herramientas y los manifiestos de IaC.
Consulta la siguiente información para determinar cómo se puede adaptar este tutorial a tu canalización de IaC y qué tipos de cambios pueden ser necesarios.
- Esta canalización usa Terraform ver. 0.12. Los cambios significativos en la sintaxis de configuración de HCL o en la estructura del archivo de estado de Terraform pueden provocar problemas.
- Esta canalización da por hecho que las estructuras de directorios de IaC no están anidadas y que un repositorio de IaC gestiona recursos en uno o varios proyectos de Google Cloud .
- No se admiten las variables de Terraform que se transfieren como variables de entorno ni como argumentos de línea de comandos. El prototipo presupone la configuración declarativa de las variables de Terraform en un archivo tfvars.
- Recomendador genera recomendaciones de gestión de identidades y accesos cuando un subconjunto de permisos de un rol no se ha usado durante 60 días. Las recomendaciones de tamaño de las máquinas virtuales siguen un patrón similar. Para este tutorial, se han proporcionado cargas útiles de recomendaciones de ejemplo que se pueden usar para probar la canalización.
- Los bucles de Terraform no se admiten en esta versión
- No se admiten módulos de Terraform. El código base es de código abierto y se da por hecho que harás las mejoras específicas necesarias en el flujo de análisis para adaptarlo a tu estructura de directorios y al uso de módulos.
La versión actual del servicio de análisis de recomendaciones de código abierto se ajusta a las siguientes limitaciones conocidas de las recomendaciones de IAM:
- Las recomendaciones solo se pueden hacer para las vinculaciones de políticas de gestión de identidades y accesos que cumplan los siguientes requisitos:
- A nivel de proyecto
- Asociado a cuentas de usuario y cuentas de servicio gestionadas por el usuario
- Las recomendaciones de gestión de identidades y accesos solo admiten roles básicos y roles predefinidos. No se pueden evaluar ni recomendar roles personalizados ni enlaces condicionales.
- Los roles recomendados solo contienen un subconjunto de los permisos del rol actual. Los roles recomendados no introducen permisos nuevos.
Requisitos previos
- Selecciona o crea dos Google Cloud proyectos.
Ir a la página del selector de proyectos
- Un proyecto de compilación que aloja y ejecuta la canalización de automatización.
- Un proyecto de prueba que aloja Google Cloud recursos usados para probar la canalización de automatización.
-
Verify that billing is enabled for your Google Cloud project.
- En el proyecto test, habilita las APIs Recommender y Compute Engine.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - En el proyecto build, habilita las APIs Cloud Run, Firestore, Pub/Sub, Cloud Scheduler, IAM y Cloud Resource Manager.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.
Cuando termines este tutorial, puedes evitar que se te siga facturando eliminando los recursos que has creado. Consulta más información en la sección Limpieza.
Configurar un entorno
- En la consola de Google Cloud , selecciona tu proyecto de
build
. En la Google Cloud consola, ve a Cloud Shell.
En la parte inferior de la consola Google Cloud , se abre una sesión de Cloud Shell y se muestra un mensaje de la línea de comandos. Cloud Shell es un entorno de shell con la CLI de Google Cloud ya instalada y con los valores ya definidos para tu proyecto actual. La sesión puede tardar unos segundos en inicializarse.
Usa Cloud Shell para todos los comandos de terminal de este tutorial.
Crea una variable de entorno para almacenar el número del proyecto
build
con el siguiente comando:export BUILD_PROJECT_ID=$DEVSHELL_PROJECT_ID
Crea una variable de entorno que contenga el número del proyecto
test
. Copia manualmente el ID del proyecto de prueba y sustitúyelo por PROJECT-ID.export TEST_PROJECT_ID=PROJECT-ID
Asigna ajustes predeterminados a los valores que se usan en todo el tutorial, como región y zona. En este tutorial, usas us-central1 como región predeterminada y us-central1-b como zona predeterminada.
Define la región y la zona predeterminadas para este tutorial ejecutando el siguiente comando:
gcloud config set compute/zone us-central1-b --project $BUILD_PROJECT_ID gcloud config set compute/zone us-central1-b --project $TEST_PROJECT_ID
Configura tu proyecto
build
como proyecto predeterminado:gcloud config set project $BUILD_PROJECT_ID
Crea una variable de entorno llamada
BUILD_PROJECT_NUMBER
para tubuild
número de proyecto.export BUILD_PROJECT_NUMBER=$(gcloud projects describe $DEVSHELL_PROJECT_ID --format='value(projectNumber)')
Clona el repositorio de GitHub de este tutorial:
Crear un segmento para el estado de Terraform
Crea un segmento de Cloud Storage en tu proyecto de compilación para almacenar el archivo de estado de Terraform.
gcloud storage buckets create gs://recommender-tf-state-$BUILD_PROJECT_ID \
--project=${BUILD_PROJECT_ID} --location=us-central1
Crear un repositorio de GitHub
Crea un repositorio de GitHub que sirva como repositorio de IaC de muestra
Crea un repositorio privado de GitHub. Este repositorio de IAC-REPO-NAME se utiliza como repositorio de IaC en este tutorial.
En los siguientes pasos, enviarás los archivos del subdirectorio
sample-iac
del repositorio clonado a tu cuenta de GitHub.En Cloud Shell, copia el directorio
sample-iac
en tu directorio principal. Usarás este directorio para crear un repositorio local y subirlo a GitHub.cp -r recommender-iac-pipeline-nodejs-tutorial/sample-iac $HOME
Ve al nuevo directorio.
cd $HOME/sample-iac
Inicializa el repositorio en tu máquina local.
git init
Añade IAC-REPO-NAME como repositorio remoto y sustituye IAC-REPO-NAME y GITHUB-ACCOUNT por los valores que correspondan.
git remote add origin https://github.com/GITHUB-ACCOUNT/IAC-REPO-NAME
Sustituye los marcadores de posición de los archivos de este repositorio por el ID de tu proyecto
test
y el nombre del segmento de Cloud Storage de Terraform.sed -i "s|__PROJECT_ID__|${TEST_PROJECT_ID}|g" ./terraform.tfvars sed -i "s|__STATE_BUCKET_NAME__|recommender-tf-state-$BUILD_PROJECT_ID|g" ./backend.tf
Añade, confirma y envía los cambios a GitHub.
git add . git commit -m "First Commit" git push origin master
Cuando se te solicite, inicia sesión en tu cuenta de GitHub.
Generar claves SSH para tu repositorio
Configura la autenticación con clave SSH en tu repositorio de IaC en GitHub y sube las claves a Cloud Storage.
Genera claves SSH para tu repositorio de GitHub.
Genera un par de claves SSH. Sustituye your_email@example.com por tu dirección de correo de GitHub. En Cloud Shell:
ssh-keygen -t rsa -b 4096 -m PEM -C "your_email@example.com"
Cuando se te pida que introduzcas un archivo en el que guardar la clave, pulsa Intro. De esta forma, se acepta la ubicación predeterminada del archivo.
Cuando se te pida que introduzcas una contraseña, pulsa Intro.
Apunta el directorio SSH-KEYS-DIR en el que guardes las claves SSH descargadas. De forma predeterminada, la ubicación es
$HOME/.ssh/
.Copia la clave pública SSH que has generado en tu repositorio de GitHub como clave de implementación.
Copia la clave pública SSH que has generado en Cloud Shell. Sustituye SSH-KEYS-DIR por la ruta del directorio.
cat SSH-KEYS-DIR/id_rsa.pub
En tu cuenta de GitHub, ve al repositorio IAC-REPO-NAME.
Haz clic en Configuración > Claves de implementación.
Haz clic en Añadir clave de implementación y pega la clave pública SSH que has copiado. Elige un título para la clave.
Marca la casilla Permitir acceso de escritura.
Haz clic en Guardar.
Vuelve a tu sesión de Cloud Shell
Crea el archivo
known_hosts
para GitHub. En tu sesión de Cloud Shell, ejecuta el comando:ssh-keyscan github.com >> ~/.ssh/known_hosts
Crea un segmento de Cloud Storage en tu proyecto de
build
y sube a él tus claves SSH y el archivoknown_hosts
. Sustituye SSH-KEYS-DIR por la ruta del directorio en el que has generado las claves SSH.gcloud storage buckets create gs://github-keys-$BUILD_PROJECT_ID --project=${BUILD_PROJECT_ID} --location=us-central1 gcloud storage cp SSH-KEYS-DIR/id_rsa* gs://github-keys-$BUILD_PROJECT_ID gcloud storage cp SSH-KEYS-DIR/known_hosts gs://github-keys-$BUILD_PROJECT_ID
Genera un token de acceso personal para GitHub. Este token se usa al realizar operaciones de Git mediante llamadas a la API que el servicio recommender-parser hace para generar solicitudes de extracción y registrar manifiestos de IaC actualizados.
En tu cuenta de GitHub, en la esquina superior derecha de cualquier página, haz clic en tu foto de perfil y, a continuación, en Configuración.
En la barra lateral de la izquierda, haz clic en Configuración para desarrolladores.
En la barra lateral de la izquierda, haz clic en Tokens de acceso personales.
Haz clic en Generar token nuevo.
Asigna un nombre descriptivo al token.
Selecciona los permisos repo.
Haz clic en Generate token (Generar token).
Copia el token en el portapapeles.
En tu sesión de Cloud Shell, crea una variable de entorno.
export GITHUB_PAT=personal-access-token-you-copied
Configurar Cloud Build
Conecta tu repositorio de Git de IAC-REPO-NAME para integrarlo con Cloud Build.
- Ve a la página de la aplicación Cloud Build en GitHub Marketplace.
- Desplázate hacia abajo y haz clic en Configurar con Google Cloud Build en la parte inferior de la página.
- Si se te solicita, inicia sesión en GitHub.
- Selecciona Solo repositorios seleccionados. Usa la lista desplegable Seleccionar repositorios para habilitar el acceso solo a tus IAC-REPO-NAME en la aplicación Cloud Build.
- Haz clic en Instalar.
Inicia sesión en Google Cloud.
Se mostrará la página de autorización, donde se te pedirá que autorices a la aplicación Google Cloud Build para que se conecte a Google Cloud.
Haz clic en Autorizar Google Cloud Build por GoogleCloudBuild. Se te redirigirá a la consola de Google Cloud .
Selecciona tu proyecto de Google Cloud .
Marca la casilla de consentimiento y haz clic en Siguiente.
En la página Seleccionar repositorio que aparece, selecciona el repositorio de GitHub IAC-REPO-NAME.
Haz clic en Conectar repositorio.
Haz clic en Create a Trigger (Crear un activador). De esta forma, se creará una definición de activador.
Haz clic en Crear para guardar el activador de compilación.
Para obtener más información, consulta Ejecutar compilaciones en GitHub.
El directorio que has copiado tiene un archivo
cloudbuild.yaml
. Este archivo de configuración describe los pasos que ejecuta un trabajo de Cloud Build cuando se activa.steps: - name: hashicorp/terraform:0.12.0 args: ['init'] - name: hashicorp/terraform:0.12.0 args: ['apply', '-auto-approve']
Añade permisos a tu cuenta de servicio de Cloud Build para que pueda crear cuentas de servicio, asociar roles y máquinas virtuales (instancias de Compute Engine) en el proyecto de prueba.
gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:$BUILD_PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role roles/compute.admin \ --project $TEST_PROJECT_ID gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:$BUILD_PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role roles/iam.serviceAccountAdmin \ --project $TEST_PROJECT_ID gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:$BUILD_PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role roles/iam.securityAdmin \ --project $TEST_PROJECT_ID
Abre la página Activadores de compilación en la consola deGoogle Cloud .
Selecciona el proyecto
build
y haz clic en Abrir.Actualiza la definición del activador:
- Haz clic en el menú y, a continuación, en Editar.
- En Configuration (Configuración), selecciona la opción Cloud Build configuration file (yaml or json) (Archivo de configuración de Cloud Build [yaml o json]) y escribe
cloudbuild.yaml
en el campo de texto. - Haz clic en Guardar.
Para probar manualmente el activador de compilación, haz clic en Ejecutar en la entrada del activador de la lista de activadores.
Verifica que el trabajo de Cloud Build que has ejecutado en el paso anterior haya creado una instancia de Compute Engine llamada
tf-compute-1
y una cuenta de servicio llamadaTerraform Recommender Test
en tu proyecto de prueba.
Desplegar el servicio de Cloud Run recommender-parser
En Cloud Shell, cambia al directorio creado al clonar el repositorio.
cd $HOME/recommender-iac-pipeline-nodejs-tutorial/parser-service
Configura Google Cloud para usar una región predeterminada en los servicios de Cloud Run. En este tutorial, se usa la región us-central1, pero puedes elegir otra región admitida si lo prefieres.
gcloud config set run/region us-central1
El directorio
parser-service
tiene un subdirectorio de stub que contiene algunos archivos JSON de carga útil de ejemplo para que pruebes el servicio recommender-parser. Ejecuta los siguientes comandos sed para sustituir los marcadores de posición PROJECT_ID de estos archivos JSON por el ID de tu proyecto de prueba.sed -i "s|__PROJECT_ID__|${TEST_PROJECT_ID}|g" ./stub/iam.json sed -i "s|__PROJECT_ID__|${TEST_PROJECT_ID}|g" ./stub/vm.json
Ejecuta el siguiente comando para crear una variable de entorno para tu imagen de Docker.
export IMAGE=gcr.io/$BUILD_PROJECT_ID/recommender-parser:1.0
Crea la imagen y súbela a Container Registry.
gcloud builds submit --tag $IMAGE .
Crea una cuenta de servicio para que el servicio recommender-parser interactúe con otros Google Cloud servicios de la canalización. Es recomendable conceder permisos granulares a tus servicios de Cloud Run. Consulta más información en el artículo sobre la identidad de servicio de Cloud Run.
gcloud beta iam service-accounts create recommender-parser-sa \ --description "Service account that the recommender-parser service uses to invoke other Google Cloud services" \ --display-name "recommender-parser-sa" \ --project $BUILD_PROJECT_ID
El servicio recommender-parser necesita acceder a las claves SSH de GitHub y al estado de Terraform que has subido a los buckets de Cloud Storage creados anteriormente. Añade la cuenta de servicio como miembro al segmento de Cloud Storage.
gcloud storage buckets add-iam-policy-binding gs://github-keys-$BUILD_PROJECT_ID \ --member=serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role=roles/storage.objectUser gcloud storage buckets add-iam-policy-binding gs://recommender-tf-state-$BUILD_PROJECT_ID \ --member=serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role=roles/storage.objectUser
Da acceso a la cuenta de servicio del servicio recommender-parser a Firestore, Recommender y la API Service Usage.
gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \ --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/datastore.user gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/recommender.iamAdmin gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/recommender.iamViewer gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/recommender.computeAdmin gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/serviceusage.serviceUsageConsumer
Despliega el servicio de Cloud Run, llamado recommender-parser, ejecutando el comando. Sustituye GITHUB-ACCOUNT por tu nombre de usuario de la cuenta de GitHub, no por tu correo. Acepta las peticiones del sistema.
gcloud run deploy \ --image=${IMAGE} \ --no-allow-unauthenticated \ --region us-central1 \ --platform managed \ --service-account recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --set-env-vars="GITHUB_ACCOUNT=github.com:GITHUB-ACCOUNT,GITHUB_PAT=${GITHUB_PAT},SSH_KEYS_BUCKET=github-keys-${BUILD_PROJECT_ID},TERRAFORM_STATE_BUCKET=recommender-tf-state-$BUILD_PROJECT_ID" \ --project $BUILD_PROJECT_ID \ recommender-parser
Configurar Firestore
- En la Google Cloud consola
build
, ve a la página de Firestore de tu proyecto. - Cuando se te pida que selecciones un modo, haz clic en Seleccionar modo nativo.
- Selecciona
us-east1
como ubicación predeterminada. - Haz clic en Crear base de datos.
El servicio recommender-parser
escribe documentos en esta base de datos con los siguientes fines:
- Para hacer un seguimiento de las recomendaciones que ha obtenido de la API Recommender
- Llama a la API Recommender una vez que se hayan procesado las recomendaciones para actualizar el estado de cada recomendación procesada a
SUCCEEDED
oFAILED
, según corresponda. Este es un paso clave que hace que la canalización sea idempotente, ya que garantiza que las recomendaciones no se procesen de forma incompleta ni varias veces.
Configurar una tarea de Cloud Scheduler
Crea una cuenta de servicio que usen las tareas de Cloud Scheduler para ejecutar el servicio recommender-parser.
gcloud beta iam service-accounts create recommender-scheduler-sa \ --description "Service Account used by Cloud Scheduler to invoke the recommender-parser service" \ --display-name "recommender-scheduler-sa" \ --project $BUILD_PROJECT_ID
Asigna el rol de ejecución o invocador a la cuenta de servicio para poder invocar el servicio de Cloud Run.
gcloud beta run services add-iam-policy-binding recommender-parser \ --member=serviceAccount:recommender-scheduler-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker \ --region=us-central1
Obtén la URL de tu servicio de recomendaciones:
gcloud beta run services list --platform managed --project $BUILD_PROJECT_ID
Tu trabajo de Cloud Scheduler invoca la ruta /recommendation/iam del servicio recommender-parser para analizar las recomendaciones de gestión de identidades y accesos, y la ruta /recommender/vm para analizar las recomendaciones de tamaño de las máquinas virtuales.
Crea una variable para el endpoint que invocan las tareas de Cloud Scheduler. Sustituye RECOMMENDER-SERVICE-URL por la URL del servicio de recomendaciones que has copiado en el paso anterior.
export RECOMMENDER_ROUTE_TO_INVOKE_IAM=RECOMMENDER-SERVICE-URL/recommendation/iam
La URL debería tener un aspecto similar a esta URL de ejemplo después de añadir la información de la ruta:
RECOMMENDER-SERVICE-URL/recommendation/iam
Crea una tarea de Cloud Scheduler llamada
recommender-iam-scheduler.
.- Cambia la zona horaria seleccionada en función de tu ubicación.
- Sustituye IAC-REPO-NAME por el nombre del repositorio de GitHub que has creado.
El cuerpo del mensaje recibe tres entradas y debes crearlo como se indica a continuación:
repo
: es el nombre del repositorio de GitHub IAC-REPO-NAME que has creado en Crear un repositorio de GitHub.projects
: lista o matriz de IDs de proyectos a los que se asigna este repositorio de GitHub de IaC. Google Cloud En este tutorial, es tu proyectotest
.stub
: el recomendador genera recomendaciones de gestión de identidades y accesos cuando no se ha usado un subconjunto de permisos de un rol durante 60 días. Las recomendaciones de tamaño de las VMs siguen un patrón similar. Para probar esta canalización bajo demanda, se puede pasarstub
comotrue
para que la canalización se pruebe con las cargas útiles de ejemplo de Recommender proporcionadas en el repositorio que has clonado para este tutorial.
gcloud beta scheduler jobs create http recommender-iam-scheduler \ --project $BUILD_PROJECT_ID \ --time-zone "America/Los_Angeles" \ --schedule="0 */3 * * *" \ --uri=$RECOMMENDER_ROUTE_TO_INVOKE_IAM \ --description="Scheduler job to invoke recommendation pipeline" \ --oidc-service-account-email="recommender-scheduler-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com" \ --headers="Content-Type=application/json" \ --http-method="POST" \ --message-body="{ \"repo\": \"IAC-REPO-NAME\", \"projects\": [\"$TEST_PROJECT_ID\"], \"location\": \"global\", \"stub\": true }"
Pasos adicionales
Cloud Build publica información de compilación en un tema de Pub/Sub llamado cloud-builds, que se crea automáticamente cuando habilitas la API Cloud Build en tu proyecto de compilación.
Ejecuta el siguiente comando para verificar que el tema cloud-builds existe en tu proyecto
build
:gcloud pubsub topics describe cloud-builds
Si el tema existe, verás el siguiente resultado, donde BUILD-PROJECT-ID es el ID de tu proyecto de compilación:
name: projects/BUILD-PROJECT-ID/topics/cloud-builds
Si recibes un mensaje de error que indica que no se ha encontrado el recurso, sigue las instrucciones para suscribirte a las notificaciones de compilación y crear el tema manualmente.
Crea una cuenta de servicio que Pub/Sub use para invocar el endpoint del servicio recommender-parser.
gcloud beta iam service-accounts create recommender-ci-subscription-sa \ --description "Service Account used by Cloud Pub/Sub to push Cloud Build events to the recommender-parser service" \ --display-name "recommender-ci-subscription-sa" \ --project $BUILD_PROJECT_ID
La cuenta de servicio de Pub/Sub debe estar asociada a los roles que necesita para publicar mensajes e invocar el servicio recommender-parser.
gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \ --member serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/pubsub.publisher \ --project $BUILD_PROJECT_ID gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \ --member serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/pubsub.subscriber \ --project $BUILD_PROJECT_ID gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \ --member serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role roles/run.invoker \ --project $BUILD_PROJECT_ID
Añade la
recommender-ci-subscription-sa
cuenta de servicio que has creado al servicio recommender-parser como miembro con el rolinvoker
.gcloud beta run services add-iam-policy-binding recommender-parser \ --member=serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker --region=us-central1
Ve a Pub/Sub en la consola de Google Cloud .
Haz clic en el tema de compilaciones en la nube.
Haz clic en Crear suscripción.
En ID de suscripción, escribe
recommender-service-build-events
.En Tipo de envío, selecciona Envío.
En Endpoint, escribe la URL de tu servicio de recomendaciones seguida de
/ci
.Selecciona Habilitar autenticación.
- Selecciona la cuenta de servicio
recommender-ci-subscription-sa
que has creado. - Haga clic en Conceder en respuesta al mensaje.
- Selecciona la cuenta de servicio
Selecciona Plazo límite de confirmación de 60 segundos.
Mantén el resto de los valores predeterminados.
Haz clic en Crear.
Probar el flujo de procesamiento
Recomendador genera recomendaciones de gestión de identidades y accesos cuando un subconjunto de permisos de un rol no se ha usado en 60 días. Las recomendaciones de tamaño de las máquinas virtuales siguen un patrón similar. Para probar esta
pipeline bajo demanda, usarás las cargas útiles JSON de recomendaciones de ejemplo
proporcionadas en el subdirectorio stub
del repositorio que clonaste para
este tutorial. De esta forma, puedes probar la canalización, excepto las llamadas a la API que el analizador de recomendaciones hace al endpoint de la API Recommender para actualizar el estado de las recomendaciones que ha aplicado correctamente.
Si tiene recomendaciones activas en sus proyectos de Google Cloud, puede probar la canalización de principio a fin sin necesidad de usar stubs. El resultado que se describe a continuación es pertinente cuando se usan las cargas útiles de ejemplo para probar la canalización. Sin embargo, los pasos para probar esta canalización sin muestras siguen siendo los mismos.
En la Google Cloud consola, ve a tu proyecto de prueba y revisa los recursos que se han creado. Debes tener lo siguiente:
- Una instancia de Compute Engine llamada
tf-compute-1
con el tipo de máquinag1-small
. - Una cuenta de servicio llamada
Terraform Recommender Test
con el roleditor
para tu proyecto de prueba.
- Una instancia de Compute Engine llamada
En la página de la consola Cloud Scheduler de tu proyecto
build
, haz clic en Ejecutar ahora en el trabajo recommender-iam-scheduler.Haz clic en el trabajo para ver los registros. También puedes ver los registros del servicio recommender-parser para obtener una vista detallada de los pasos que ejecuta el servicio.
Una vez que el servicio haya terminado de ejecutarse, ve a tu repositorio de GitHub IAC-REPO-NAME. El
recommender-parser
servicio habría generado una solicitud de extracción por ti. Revisa los manifiestos de IaC modificados que componen esta solicitud de extracción y haz clic en Combinar solicitud de extracción si estás conforme con los cambios en tus manifiestos de IaC.Cuando combinas la solicitud de extracción, se crea una nueva confirmación en la rama principal. De esta forma, se activa una tarea de Cloud Build que implementa las modificaciones en los Google Cloud recursos de tu proyecto
test
. Espera unos instantes a que se complete el trabajo de Cloud Build. Puedes consultar su estado en la consola de Google Cloud .Una vez que se haya completado el trabajo, ve al proyecto de prueba. Las cargas útiles de ejemplo proporcionadas hacen los siguientes cambios en los recursos de tu proyecto de prueba.
- La cuenta de servicio de prueba de Terraform, que antes tenía el rol
editor
cuando se implementó, se ha cambiado aviewer
.
- La cuenta de servicio de prueba de Terraform, que antes tenía el rol
Limpieza
Para evitar que se apliquen cargos en tu cuenta de Google Cloud por los recursos utilizados en este tutorial, elimina los dos proyectos que has creado.
La forma más fácil de evitar que te cobren es eliminar el proyecto que has creado para el tutorial.
Para ello, sigue las instrucciones que aparecen a continuación:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Siguientes pasos
- Consulta arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Centro de arquitectura de Cloud.
- Consulta más información sobre Google Cloud Policy Intelligence en la documentación.