Integración en Cloud Build

En esta página, se proporciona una descripción general para configurar la autorización binaria con Cloud Build. Esta configuración ayuda a garantizar que solo las imágenes de contenedor compiladas y firmadas como parte del proceso de compilación de Cloud Build se autoricen de forma automática para ejecutarse en tu entorno de implementación.

Para obtener información sobre cómo agregar análisis de vulnerabilidades a tu canalización de compilación de Cloud Build, consulta Análisis de vulnerabilidades con Container Analysis y Kritis Signer.

Descripción general

Cloud Build

Cloud Build (descripción general) toma el código fuente almacenado en Cloud Source Repositories o en otro repositorio alojado, ejecuta tus compilaciones y pruebas, y almacena las salidas de software en Container Registry o cualquier otro servicio de almacenamiento en Google Cloud Platform.

Autorización binaria

La autorización binaria (descripción general) es un producto de Google Cloud que aplica restricciones en el momento de la implementación en las aplicaciones. Su integración en Google Kubernetes Engine (GKE) permite que los usuarios establezcan que los contenedores implementados en un clúster de Kubernetes estén firmados de forma criptográfica por una autoridad confiable y verificados por un certificador de autorización binaria.

Puedes configurar la autorización binaria para requerir certificaciones según la ubicación del código fuente a fin de evitar que se implementen las imágenes de contenedor compiladas a partir de fuentes no autorizadas.

Obtén más información:

Arquitectura

En el siguiente diagrama, se muestran los componentes de una configuración de autorización binaria de Cloud Build:

Canalización de certificación de autorización binaria de Cloud Build.
Figura 1. Diagrama de una canalización de certificación de autorización binaria de Cloud Build.

En la figura 1, (1) el código se envía a un repositorio. (2) Una canalización de integración continua (CI), como Cloud Build, compila y prueba el contenedor. (3) La imagen del contenedor recién creada se envía a Container Registry. (4) Cloud Key Management Service firma la imagen de contenedor, (5) crea una certificación y la almacena en la autorización binaria.

Los componentes son los siguientes:

  • Cloud Source Repositories o algún otro repositorio seguro que contenga el código fuente que se usa para compilar una imagen de contenedor

  • Cloud Build, que ejecuta compilaciones y pruebas, y muestra la imagen de contenedor en Container Registry o algún otro registro de software que almacena tus imágenes compiladas

  • Container Registry, un registro de imágenes de contenedor privado que se ejecuta en Google Cloud

  • Cloud Key Management Service, que proporciona administración de claves para el par de claves criptográficas. El par de claves consta de una clave privada y una pública. La clave privada se usa para firmar una imagen de contenedor. La firma resultante se almacena en una certificación recién creada. En el momento de la implementación, un certificador verifica la certificación que incluye la clave pública del par de claves

  • Autorización binaria, que aplica la política que requiere certificaciones firmadas antes de que se pueda implementar una imagen de contenedor

Crea una certificación de autorización binaria mediante Cloud Build con Cloud Key Management Service

En esta sección, se muestra cómo implementar la arquitectura anterior. Se usa un paso de compilación personalizado de código abierto de la comunidad de Cloud Build. En el paso de compilación personalizado, se firma una imagen de contenedor, se crea la certificación y se sube a la autorización binaria.

Configura la administración de identidades y accesos

Para usar este paso de compilación, la cuenta de servicio de Cloud Build necesita las siguientes funciones de IAM:

  • Visualizador de certificadores de autorización binaria
    • roles/binaryauthorization.attestorsViewer
  • Verificador y firmante de CryptoKey de Cloud KMS (si se usa la clave en KMS para firmar la certificación)
    • roles/cloudkms.signerVerifier
  • Vinculador de notas de Container Analysis
    • roles/containeranalysis.notes.attacher

Los siguientes comandos se pueden usar para agregar las funciones a la cuenta de servicio de Cloud Build de tu proyecto:

  1. Habilita Cloud Build:

    Habilita la API de Cloud Build en el proyecto de Cloud de destino.

  2. Guarda el ID del proyecto en una variable de entorno:

    PROJECT_ID=PROJECT_ID
    

    En el ejemplo anterior, PROJECT_ID es el ID del proyecto de Google Cloud.

  3. Configura la herramienta de línea de comandos de gcloud del proyecto:

    gcloud config set project ${PROJECT}
    
  4. Obtén el número de proyecto:

    PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT}" --format="value(PROJECT_NUMBER)")
    
  5. Agrega la función de visualizador de certificadores de autorización binaria a la cuenta de servicio de Cloud Build:

    gcloud projects add-iam-policy-binding ${PROJECT} \
      --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
      --role roles/binaryauthorization.attestorsViewer
    
  6. Agrega la función de verificador y firmante de CryptoKey de Cloud KMS a la cuenta de servicio de Cloud Build (firma basada en KMS):

    gcloud projects add-iam-policy-binding ${PROJECT} \
      --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
      --role roles/cloudkms.signerVerifier
    
  7. Agrega la función de vinculador de notas de Container Analysis a la cuenta de servicio de Cloud Build:

    gcloud projects add-iam-policy-binding ${PROJECT} \
      --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
      --role roles/containeranalysis.notes.attacher
    

Compila y registra el paso de compilación personalizado con Cloud Build

  1. Clona el repositorio de la comunidad de compilación de Google Cloud:

    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    
  2. Configura el firmante de autorización binaria para Cloud Build:

    Antes de usarlo, el código para el paso de compilación personalizado se debe compilar en un contenedor y enviar 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 envió al Google Container Registry de tu proyecto actual y ya está listo para usarse.

Crea un certificador en la autorización binaria

Crea un certificador que la autorización binaria usará en el momento de la implementación para verificar la certificación.

Configura un par de claves del certificador y de Cloud Key Management Service en la autorización binaria:

Consulta Crea un certificador mediante la CLI.

Verifica que se haya creado el certificador

   gcloud --project="${ATTESTOR_PROJECT_ID}" container binauthz attestors list
   

Agrega un paso “create-attestation” a tu cloudbuild.yaml

Si quieres usar el paso binauthz-attestation, debes actualizar cloudbuild.yaml. Para ello, agrega el paso que firmará la compilación que se envió a Container Registry.

A continuación, se proporcionan dos métodos:

  • Actualiza tu cloudbuild.yaml de forma manual.

  • Ejecuta una canalización de ejemplo con las variables de entorno que configuraste antes.

Actualiza tu cloudbuild.yaml de forma manual

  1. Para actualizar cloudbuild.yaml de forma manual, agrega el paso de compilación que aparece a continuación después del paso en el que el contenedor se sube a Container Registry. Nota: Debes reemplazar de forma manual ATTESTOR_NAME, KMS_KEY_LOCATION, KMS_KEYRING_NAME, KMS_KEY_NAME, y KMS_KEY_VERSION por tus 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'
    

    Lo siguiente también es válido:

    - 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'
    

Prueba la canalización (opcional)

Para probar una canalización de certificación de Cloud Build de ejemplo, sigue estos pasos:

  1. Crea un archivo cloudbuild.yaml con las variables de entorno que configuraste antes:

    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
    
  2. Ejecuta Cloud Build con el cloudbuild_example.yaml de ejemplo:

    Desde el directorio cloud-builders-community/binauthz-attestation/example, ejecuta los siguientes comandos:

    gcloud builds submit . --config cloudbuild_example.yaml
    

Próximos pasos