Implementa una app en GKE y consulta estadísticas de seguridad
Aprende a implementar un contenedor vulnerable de forma intencional en un clúster de GKE y obtener estadísticas de seguridad sobre la vulnerabilidad en el panel de postura de seguridad. El plan de el panel de postura de seguridad muestra información sobre sistemas operativos conocidos vulnerabilidades. Si también quieres analizar el lenguaje en busca de vulnerabilidades en Go o paquetes de Java, consulta Compila una aplicación y visualiza estadísticas de seguridad.
Objetivos
- Compila y envía una aplicación alojada en contenedores a Artifact Registry con Cloud Build.
- Crea una canalización de entrega en Cloud Deploy.
- Implementa la aplicación en un clúster de GKE de pruebas y promuévela a un clúster de producción.
- Visualiza estadísticas sobre las vulnerabilidades en la aplicación implementada con el panel de postura de seguridad en la consola de Google Cloud.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com containeranalysis.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com containeranalysis.googleapis.com
Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.
Prepare el entorno
Configura el ID del proyecto como una variable de entorno:
export PROJECT_ID=$(gcloud config get project)
Configura la región predeterminada de Google Cloud para Cloud Deploy:
gcloud config set deploy/region us-central1
Clona el repositorio de GitHub que contiene el código de muestra para esta tarea:
git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git cd ~/software-delivery-shield-demo-java/backend
Crea una cuenta de servicio de IAM para tu GKE
clústeres que se usarán:
gcloud iam service-accounts create sds-runtime \ --display-name="SDS with GKE service account"
Otorga permisos a la cuenta de servicio de IAM:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/container.nodeServiceAccount" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/container.developer" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/artifactregistry.reader"
Otorga acceso a la cuenta de servicio predeterminada de Compute Engine a los clústeres de GKE. Cloud Deploy usa este acceso para implementar apps en los clústeres de tu canalización de entrega.
PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')" gcloud projects add-iam-policy-binding ${PROJECT_NUMBER} \ --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \ --role=roles/container.developer
Crea el repositorio de Artifact Registry para tu imagen
Crea el repositorio:
gcloud artifacts repositories create containers \ --repository-format=docker \ --location=us-central1 \ --description="SDS with GKE repository"
Verifica que el repositorio exista:
gcloud artifacts repositories list \ --location=us-central1 \ --filter="REPOSITORY:containers"
El resultado muestra el repositorio
containers
que creaste.
Crea los clústeres de GKE
Crea dos clústeres de GKE, un clúster de etapa de pruebas llamado dev-cluster
.
y un clúster de producción llamado prod-cluster
. En Autopilot,
el análisis de vulnerabilidades de las cargas de trabajo se habilita automáticamente para los clústeres nuevos en ejecución
versión 1.27 y posteriores. Si usas un clúster estándar, especifica la marca --workload-vulnerability-scanning=standard
.
gcloud container clusters create-auto dev-cluster \
--region=us-central1 \
--release-channel=rapid \
--service-account=sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
gcloud container clusters create-auto prod-cluster \
--region=us-central1 \
--release-channel=rapid \
--service-account=sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
La creación del clúster puede tardar hasta cinco minutos en completarse. También puedes habilitar el análisis de vulnerabilidades de las cargas de trabajo actualizando los clústeres de GKE existentes.
Compila la imagen
Compila y envía la imagen con Cloud Build:
gcloud builds submit --region us-central1 --config cloudbuild.yaml
Cuando se completa la compilación, el resultado es similar al siguiente:
DONE
-----------------------------------------------------------------------------
ID: 3e23094f-7f57-4449-bc68-51c37hn34d03
CREATE_TIME: 2022-09-19T15:41:07+00:00
DURATION: 54S
SOURCE: gs://my-project_cloudbuild/source/1663602066.777581-6ebe4b2d6fd741ffa18936d7f.tgz
IMAGES: us-central1-docker.pkg.dev/PROJECT_ID/containers/java-guestbook-backend:quickstart
STATUS: SUCCESS
Implementa la imagen en GKE con Cloud Deploy
Actualiza el archivo de configuración de Cloud Deploy con el ID de tu proyecto:
sed -i "s/PROJECT_ID/${PROJECT_ID}/g" clouddeploy.yaml
Registra la canalización y los destinos:
gcloud deploy apply --file=clouddeploy.yaml
Para verificar que tu canalización exista, ve a la página Canalizaciones de entrega en la consola de Google Cloud:
Ir en las canalizaciones de entrega.
La lista de canalizaciones muestra tu nueva canalización,
guestbook-app-delivery
.Haz clic en el nombre de la canalización para supervisar el progreso. La canalización de entrega detalles.
Crea una versión nueva en Cloud Deploy:
gcloud deploy releases create guestbook-release-001 \ --delivery-pipeline=guestbook-app-delivery \ --images=java-guestbook-backend=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart
El nuevo lanzamiento aparecerá en la sección Lanzamientos en la página Publicación detalles de la canalización.
En la página Detalles de la canalización de entrega, supervisa la Canalización visualización hasta que aparezca el botón Promover para
dev-cluster
Es posible que debas actualizar la página.Haz clic en Promote (Ascender) en la visualización
dev-cluster
.En el panel Promover versión, haz clic en Ascender para confirmar la promoción. en el clúster de producción.
Para verificar si tu versión se realizó correctamente, consulta la sección Versiones. La columna Estado del último lanzamiento muestra
Successfully deployed to prod-cluster
.
Ver vulnerabilidades
En esta sección, podrás ver las estadísticas de vulnerabilidades del SO con la de seguridad en la nube. En el panel, se muestra información sobre en tus cargas de trabajo en ejecución después de implementarlas en tu entre los clústeres de Kubernetes.
Ve a la página Postura de seguridad de GKE en la consola de Google Cloud.
Actualiza la página para ver los resultados del análisis. El análisis inicial puede tardar hasta 15 minutos en completarse.
En la página Postura de seguridad de GKE, revisa la sección Vulnerabilidad del SO de la carga de trabajo. En esta sección, se enumeran los CVE principales que afectan a tu carga de trabajo implementada.
Para obtener más información, haz clic en Ver todos los problemas de vulnerabilidad. La pestaña Problemas se abre y aplica un filtro para el tipo de problema Vulnerabilidad. La tabla muestra una descripción general de cada vulnerabilidad y su impacto.
Para obtener detalles sobre una vulnerabilidad específica, haz clic en el nombre del problema en la tabla. Se abrirá el panel Vulnerabilidad. En este panel, puedes hacer lo siguiente:
- Lee una descripción detallada de la CVE, incluidas las versiones y los paquetes afectados, y la puntuación de CVSS.
- Consulta las acciones recomendadas para mitigar la inquietud, como la documentación y la información de la versión del parche.
- Consulta las cargas de trabajo específicas afectadas por la vulnerabilidad en la pestaña Cargas de trabajo afectadas.
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que se usaron en esta página, borra el proyecto de Cloud que tiene los recursos.
Borra los recursos individuales
Borra la canalización de Cloud Deploy:
gcloud deploy delivery-pipelines delete guestbook-app-delivery --force
Borra los clústeres de GKE:
gcloud container clusters delete dev-cluster \ --region=us-central1 gcloud container clusters delete prod-cluster \ --region=us-central1
Borra el repositorio de Artifact Registry:
gcloud artifacts repositories delete containers \ --location=us-central1
Borra la cuenta de servicio de IAM:
gcloud iam service-accounts delete sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
Borra el proyecto
- 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.