En este tutorial se muestra cómo crear una certificación de autorización binaria en una canalización de Cloud Build. Esta configuración ayuda a asegurarse de que solo las imágenes de contenedor compiladas y firmadas como parte del proceso de compilación de Cloud Build se autoricen automáticamente para ejecutarse en tu entorno de despliegue.
Información general de Cloud Build
Cloud Build (descripción general) toma el código fuente almacenado en Cloud Source Repositories u otro repositorio alojado, ejecuta tus compilaciones y pruebas, y almacena los resultados de software en Container Registry u otro servicio de almacenamiento en Google Cloud Platform.
Información general sobre la autorización binaria
La autorización binaria (información general) es un Google Cloud producto que aplica restricciones en el momento de la implementación de las aplicaciones. Su integración con Google Kubernetes Engine (GKE) permite a los usuarios asegurarse de que los contenedores desplegados en un clúster de Kubernetes estén firmados criptográficamente por una autoridad de confianza y verificados por un attestor de autorización binaria.
Puedes configurar la autorización binaria para que requiera atestaciones basadas en la ubicación del código fuente para evitar que se desplieguen imágenes de contenedor creadas a partir de una fuente no autorizada.
Para obtener más información al respecto:
- Introducción general a la autorización binaria
- Codelab: protege tus implementaciones de GKE con la autorización binaria
Arquitectura
En el siguiente diagrama se muestran los componentes de una configuración de Binary Authorization y Cloud Build:

En este flujo de trabajo:
El código para compilar la imagen de contenedor se envía a un repositorio de origen, como Cloud Source Repositories.
Una herramienta de integración continua (CI), Cloud Build, compila y prueba el contenedor.
La compilación envía la imagen de contenedor a Container Registry u otro registro que almacene las imágenes compiladas.
Cloud Key Management Service, que proporciona gestión de claves para el par de claves criptográficas, firma la imagen de contenedor. La firma resultante se almacena en una atestación recién creada.
En el momento de la implementación, el attestor verifica la certificación mediante la clave pública del par de claves. La autorización binaria aplica la política. Para ello, requiere atestaciones firmadas para desplegar la imagen de contenedor.
Crear una atestación con Cloud Build y Cloud Key Management Service
En esta sección se explica cómo implementar la arquitectura anterior. Utiliza un paso de compilación personalizado de código abierto de la comunidad de Cloud Build. El paso de compilación personalizada firma una imagen de contenedor, crea la certificación y la sube a la autorización binaria.
Configurar la gestión de identidades y accesos
Para usar este paso de compilación, la cuenta de servicio de Cloud Build necesita los siguientes roles de gestión de identidades y accesos:
- Lector del encargado de la atestación de autorización binaria
roles/binaryauthorization.attestorsViewer
- Firmante o verificador de CryptoKey de Cloud KMS (si se usa una clave de KMS para firmar una atestación)
roles/cloudkms.signerVerifier
- Encargado de vincular las notas de Artifact Analysis
roles/containeranalysis.notes.attacher
Puedes usar los siguientes comandos para añadir los roles a la cuenta de servicio de Cloud Build de tu proyecto:
Habilita Cloud Build:
Habilita la API de Cloud Build en el proyecto de destino Google Cloud .
Guarda el ID de tu proyecto en una variable de entorno:
PROJECT_ID=PROJECT_ID
donde PROJECT_ID es el Google Cloud ID de tu proyecto.
Configura el proyecto de Google Cloud CLI:
gcloud config set project ${PROJECT_ID}
Obtén el número de proyecto:
PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" --format="value(PROJECT_NUMBER)")
Añade el rol Lector del encargado de la atestación de autorización binaria a la cuenta de servicio de Cloud Build:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/binaryauthorization.attestorsViewer
Añade el rol Firmante o verificador de CryptoKey de Cloud KMS a la cuenta de servicio de Cloud Build (firma basada en KMS):
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/cloudkms.signerVerifier
Añade el rol Artifact Analysis Notes Attacher a la cuenta de servicio de Cloud Build:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/containeranalysis.notes.attacher
Compilar y registrar el paso de compilación personalizado con Cloud Build
Clona el repositorio de la comunidad de compilación de Google Cloud:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
Configura el firmante de autorización binaria para Cloud Build:
Antes de usarlo, el código del paso de compilación personalizado debe compilarse en un contenedor y enviarse a Cloud Build. Para ello, ejecuta los siguientes comandos:
cd cloud-builders-community/binauthz-attestation gcloud builds submit . --config cloudbuild.yaml
El paso de compilación personalizado se ha enviado al registro de contenedores de Google de tu proyecto actual y ya se puede usar.
Crear un encargado de la atestación en Autorización binaria
Crea un atestador que la autorización binaria usará en el momento del despliegue para verificar la atestación.
Configura un attestor y un par de claves de Cloud Key Management Service en Autorización Binaria:
Consulta Crear un attestor con la CLI.
Verificar que se ha creado el encargado de la atestación
gcloud --project="${ATTESTOR_PROJECT_ID}" container binauthz attestors list
Añade un paso "create-attestation" a tu cloudbuild.yaml
.
Para usar el paso binauthz-attestation
, debes actualizar tu cloudbuild.yaml
añadiendo el paso que firmará la compilación que se ha enviado a
Container Registry.
A continuación, se describen dos métodos:
Actualiza tu
cloudbuild.yaml
manualmente.Ejecuta una canalización de ejemplo con las variables de entorno que has definido anteriormente.
Actualizar manualmente tu cloudbuild.yaml
Actualiza tu
cloudbuild.yaml
manualmente añadiendo el paso de compilación que se indica a continuación después del paso en el que se sube tu contenedor a Container Registry. Nota: Debe sustituir manualmente ATTESTOR_NAME, KMS_KEY_LOCATION, KMS_KEYRING_NAME, KMS_KEY_NAME y KMS_KEY_VERSION por sus propios valores:- id: 'create-attestation' name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/${PROJECT_ID}/helloworld:latest' - '--attestor' - 'projects/${PROJECT_ID}/attestors/ATTESTOR_NAME' - '--keyversion' - 'projects/${PROJECT_ID}/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION'
También es válido lo siguiente:
- id: 'create-attestation' name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/${PROJECT_ID}/helloworld:latest' - '--attestor' - 'ATTESTOR_NAME' - '--attestor-project' - '${PROJECT_ID}' - '--keyversion' - 'KEY_VERSION' - '--keyversion-project' - '${PROJECT_ID}' - '--keyversion-location' - 'KEY_LOCATION' - '--keyversion-keyring' - 'KEYRING_NAME' - '--keyversion-key' - 'KEY_NAME'
Opcional: Probar la canalización
Para probar una canalización de certificación de Cloud Build de ejemplo, sigue estos pasos:
Crea un archivo
cloudbuild.yaml
con las variables de entorno que has definido anteriormente:cd example cat <<EOM > cloudbuild_example.yaml steps: - id: 'build' name: 'gcr.io/cloud-builders/docker' args: - 'build' - '-t' - 'gcr.io/$PROJECT_ID/helloworld:latest' - '.' - id: 'publish' name: 'gcr.io/cloud-builders/docker' args: - 'push' - 'gcr.io/$PROJECT_ID/helloworld:latest' - id: 'create-attestation' name: 'gcr.io/$PROJECT_ID/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/$PROJECT_ID/helloworld:latest' - '--attestor' - 'projects/$PROJECT_ID/attestors/${ATTESTOR_NAME}' - '--keyversion' - 'projects/${PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}' tags: ['cloud-builders-community'] EOM
Ejecuta Cloud Build con el ejemplo
cloudbuild_example.yaml
:En el directorio
cloud-builders-community/binauthz-attestation/example
, ejecuta los siguientes comandos:gcloud builds submit . --config cloudbuild_example.yaml