En esta página, se proporcionan instrucciones para proteger las implementaciones de imágenes en Cloud Run y Google Kubernetes Engine con Cloud Build.
Aprende a configurar la autorización binaria para verificar las certificaciones de compilación y bloquear las implementaciones de imágenes que no genera Cloud Build. Este proceso puede reducir el riesgo de implementar software no autorizado.
Antes de comenzar
Habilita las APIs de Cloud Build, autorización binaria y Artifact Registry.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (
roles/serviceusage.serviceUsageAdmin), que contiene el permisoserviceusage.services.enable. Obtén más información para otorgar roles.Para usar los ejemplos de la línea de comandos de esta guía, instala y configura el SDK de Google Cloud.
Controla las implementaciones con la autorización binaria
En la autorización binaria, una política es un conjunto de reglas que rigen la implementación de imágenes. Puedes configurar una regla para que exija certificaciones con firma digital .
Cloud Build genera y firma certificaciones en el momento de la compilación. Con
la autorización binaria, puedes usar el built-by-cloud-build certificador para
verificar las certificaciones y solo implementar imágenes compiladas por Cloud Build.
Para crear el certificador built-by-cloud-build en tu proyecto, ejecuta una compilación en ese proyecto.
Para permitir que solo se implementen imágenes compiladas por Cloud Build, sigue estos pasos:
Console
Ve a la página Autorización binaria en la Google Cloud consola:
En la pestaña Política, haz clic en Editar política.
En el cuadro de diálogo Editar política, selecciona Permitir solo las imágenes aprobadas por todos los certificadores que se indican a continuación.
Haz clic en Agregar certificadores.
En el cuadro de diálogo Agregar certificadores, haz lo siguiente:
- Selecciona Agregar por proyecto y nombre del certificador y realiza los siguientes pasos:
- En el campo Nombre del proyecto, ingresa el proyecto en el que ejecutas Cloud Build.
- Haz clic en el campo Nombre del certificador y verifica que el certificador
built-by-cloud-buildesté disponible. - Haz clic en
built-by-cloud-build.
Como alternativa, selecciona Agregar por ID de recurso del certificador. En ID del recurso del certificador, ingresa
projects/PROJECT_ID/attestors/built-by-cloud-buildReemplaza
PROJECT_IDpor el proyecto en el que ejecutas Cloud Build.
- Selecciona Agregar por proyecto y nombre del certificador y realiza los siguientes pasos:
Haz clic en Agregar 1 certificador.
Haga clic en Save Policy.
gcloud
Exporta tu política existente a un archivo con el siguiente comando:
gcloud container binauthz policy export > /tmp/policy.yamlEdita el archivo de política.
Edita una de las siguientes reglas:
defaultAdmissionRuleclusterAdmissionRulesistioServiceIdentityAdmissionRuleskubernetesServiceAccountAdmissionRules
Agrega un bloque
requireAttestationsBya la regla si aún no hay uno.En el bloque
requireAttestationsBy, agrega lo siguiente:projects/PROJECT_ID/attestors/built-by-cloud-buildReemplaza
PROJECT_IDpor el proyecto en el que ejecutas Cloud Build.Guarda el archivo de políticas.
Importa el archivo de políticas.
gcloud container binauthz policy import /tmp/policy.yamlEl siguiente es un archivo de política de ejemplo que contiene la referencia a
built-by-cloud-build-attestor:defaultAdmissionRule: evaluationMode: REQUIRE_ATTESTATION enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG requireAttestationsBy: - projects/PROJECT_ID/attestors/built-by-cloud-build name: projects/PROJECT_ID/policyReemplaza
PROJECT_IDpor el ID del proyecto en el que ejecutas Cloud Build.
Puedes ver los errores de política en los mensajes de registro de la autorización binaria para GKE o Cloud Run
Usa el modo de ejecución de prueba
En el modo de ejecución de prueba, la autorización binaria verifica el cumplimiento de la política sin bloquear la implementación. En cambio, los mensajes de estado del cumplimiento de políticas se registran en Cloud Logging. Puedes usar estos registros para determinar si tu política de bloqueo funciona correctamente y para identificar falsos positivos.
Para habilitar la prueba de validación, sigue estos pasos:
Console
Ve a la página Autorización binaria en la Google Cloud consola.
Haz clic en Editar política.
En Regla predeterminada o en una regla específica, selecciona Modo de ejecución de prueba.
Haga clic en Save Policy.
gcloud
Exporta la política de la autorización binaria a un archivo YAML:
gcloud container binauthz policy export > /tmp/policy.yamlEn un editor de texto, configura
enforcementModecomoDRYRUN_AUDIT_LOG_ONLYy guarda el archivo.Para actualizar la política, importa el archivo con el comando siguiente:
gcloud container binauthz policy import /tmp/policy.yaml
Puedes ver los errores de política en los mensajes de registro de la autorización binaria para GKE o Cloud Run
Limitaciones
Cloud Build y la autorización binaria deben estar en el mismo proyecto. Si ejecutas tu plataforma de implementación en otro proyecto, configura los roles de IAM para una configuración de varios proyectos, y consulta el proyecto de Cloud Build cuando agregues el
built-by-cloud-buildcertificador en la autorización binaria.Cloud Build no genera certificaciones cuando envías imágenes a Artifact Registry con un paso de compilación
docker pushexplícito. Asegúrate de enviar a Artifact Registry con el campoimagesen tu paso de compilacióndocker build. Para obtener más información sobreimages, consulta Diferentes formas de almacenar imágenes en Artifact Registry.Debes usar archivos de configuración de compilación separados para tu canalización de compilación y tu canalización de implementación. Esto se debe a que Cloud Build produce certificaciones solo después de que la canalización de compilación se completa correctamente. Luego, la autorización binaria verificará la certificación antes de implementar la imagen.
Habilita las certificaciones en grupos privados
De forma predeterminada, Cloud Build no genera certificaciones de autorización binaria
para compilaciones en grupos privados. Para generar
certificaciones, agrega la opción requestedVerifyOption: VERIFIED a tu
archivo de configuración de compilación:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
options:
requestedVerifyOption: VERIFIED
Después de agregar el requestedVerifyOption, Cloud Build habilita la
generación de certificaciones y los metadatos de procedencia para tu
imagen.
Visualiza los metadatos del certificador
Un certificador se crea la primera vez que ejecutas una compilación en un proyecto. El
ID del certificador tiene el formato
projects/PROJECT_ID/attestors/built-by-cloud-build,
en el que PROJECT_ID es el ID de tu proyecto.
Puedes verificar los metadatos del certificador de compilación con el siguiente comando:
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://binaryauthorization.googleapis.com/v1beta1/projects/PROJECT_ID/attestors/built-by-cloud-build
Reemplaza PROJECT_ID por el proyecto en el que ejecutas Cloud Build.
El resultado contiene información sobre el certificador y las claves públicas correspondientes. Por ejemplo:
name": "projects/PROJECT_ID/attestors/built-by-cloud-build",
"userOwnedDrydockNote": {
"noteReference": "projects/PROJECT_ID/notes/built-by-cloud-build",
"publicKeys": [
{
"id": "//cloudkms.googleapis.com/v1/projects/verified-builder/locations/asia/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1",
"pkixPublicKey": {
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMMvFxZLgIiWOLIXsaTkjTmOKcaK7\neIZrgpWHpHziTFGg8qyEI4S8O2/2wh1Eru7+sj0Sh1QxytN/KE5j3mTvYA==\n-----END PUBLIC KEY-----\n",
"signatureAlgorithm": "ECDSA_P256_SHA256"
}
},
...
}
],
"delegationServiceAccountEmail": "service-942118413832@gcp-binaryauthorization.iam.gserviceaccount.com"
},
"updateTime": "2021-09-24T15:26:44.808914Z",
"description": "Attestor autogenerated by build ID fab07092-30f4-4f70-caf7-4545cbc404d6"
¿Qué sigue?
- Obtén información sobre la autorización binaria.