Configura las cuentas de servicio especificadas por el usuario

Si deseas seguir el principio de privilegio mínimo en Cloud Build, puedes configurarlo para que use una cuenta de servicio con los privilegios suficientes para ejecutar una compilación. En esta página, se documenta cómo configurar una cuenta de servicio.

Si no especificas una cuenta de servicio, es posible que Cloud Build seleccione automáticamente una cuenta de servicio para ejecutar compilaciones en tu nombre. Esta cuenta de servicio puede tener permisos que son innecesariamente amplios para tu caso de uso, como el acceso a Cloud Source Repositories y cualquier bucket de Cloud Storage en tu proyecto.

Para mejorar la postura de seguridad de tus proyectos y reducir el impacto potencial de parámetros de configuración incorrectos o usuarios maliciosos, recomendamos seguir el principio de privilegio mínimo. Con este principio, puedes asignar a cada cuenta de servicio los permisos y las funciones con alcance para la tarea que realiza. Por ejemplo, puedes usar una cuenta de servicio para compilar y enviar imágenes a Artifact Registry, como se muestra en el blog de Google Cloud.

Antes de comenzar

Otorgar permisos de IAM

Para permitir que tu compilación acceda a los servicios a los que necesita conectarse, debes otorgar algunas funciones y permisos:

  1. Abre la página Configuración (Settings) de Cloud Build:

    Abrir la página Configuración (Settings) de Cloud Build

    Verás la pestaña Permisos de cuenta de servicio (Service account permissions):

    Captura de pantalla de la página Permisos de la cuenta de servicio

  2. En la lista desplegable, selecciona la cuenta de servicio cuyas funciones deseas cambiar.

  3. Establece el estado del rol que deseas agregar en Habilitar.

  4. Si la función que necesitas para tu canalización de compilación no aparece aquí, puedes otorgar funciones adicionales en la página de configuraciones de IAM.

Puedes encontrar información adicional sobre las funciones que se suelen requerir para una compilación en Configura el acceso a los recursos de Cloud Build y en la lista completa de funciones y permisos de IAM de Cloud Build.

Cómo configurar registros de compilación

Cuando especificas tu propia cuenta de servicio para las compilaciones, debes almacenar los registros de tu compilación en Cloud Logging o en un bucket de Cloud Storage creado por el usuario. No puedes almacenar tus registros en el bucket de registros predeterminado.

Ejecuta una compilación con un archivo de configuración

Para ejecutar una compilación de forma manual con un archivo de configuración, haz lo siguiente:

  1. En el directorio raíz del proyecto, crea un archivo de configuración de compilación de Cloud Build llamado cloudbuild.yaml o cloudbuild.json.

  2. Agrega el campo serviceAccount y la configuración de registro preferida.

    • Si almacenas los registros de compilación en Cloud Logging, agrega un campo logging y establece el valor del campo en CLOUD_LOGGING_ONLY.

    • Si almacenas los registros de compilación en un bucket de Cloud Storage creado por el usuario, haz lo siguiente:

      • Agrega un campo logging y establece su valor en GCS_ONLY.
      • Agrega un campo logsBucket y establece su valor en la ubicación de tu bucket de Cloud Storage.

    En el siguiente ejemplo, se configura Cloud Build para que ejecute compilaciones con una cuenta de servicio especificada por el usuario y se configura los registros de compilación para que se almacenen en un bucket de Cloud Storage creado por el usuario:

    YAML

    steps:
    - name: 'bash'
      args: ['echo', 'Hello world!']
    logsBucket: 'LOGS_BUCKET_LOCATION'
    serviceAccount: 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT'
    options:
      logging: GCS_ONLY
    

    JSON

    {
      "steps": [
      {
        "name": "bash",
        "args": [
          "echo",
          "Hello world!"
        ]
      }
      ],
      "logsBucket": "LOGS_BUCKET_LOCATION",
      "serviceAccount": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT",
      "options": {
        "logging": "GCS_ONLY"
      }
    }
    
    

    Reemplaza los valores de marcador de posición en tu archivo de configuración de compilación por lo siguiente:

    • LOGS_BUCKET_LOCATION es el bucket de Cloud Storage para almacenar registros de compilación. Por ejemplo, gs://mylogsbucket
    • PROJECT_ID es el ID del proyecto de Google Cloud en el que ejecutas la compilación.
    • SERVICE_ACCOUNT es la dirección de correo electrónico o el ID único de la cuenta de servicio que deseas especificar para las compilaciones. Por ejemplo, la dirección de correo electrónico de una cuenta de servicio se ve de la siguiente manera: service-account-name@project-id.iam.gserviceaccount.com.
  3. Usa este comando para comenzar a compilar con el archivo de configuración de compilación:

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    Reemplaza los valores de marcador de posición en los comandos anteriores por la siguiente información:

    • CONFIG_FILE_PATH es la ruta de acceso al archivo de configuración de compilación.
    • SOURCE_DIRECTORY es la ruta de acceso o la URL al código fuente.

    Si no se especifica CONFIG_FILE_PATH ni SOURCE_DIRECTORY en el comando gcloud builds submit, Cloud Build da por hecho que el archivo de configuración de compilación y el código fuente están en el directorio de trabajo actual.

Ejecuta compilaciones con activadores

Para ejecutar una compilación con los activadores de Cloud Build con tu propia cuenta de servicio, configura la opción de registro que prefieras y selecciona la cuenta de servicio que prefieras cuando crees el activador.

  1. En el archivo de configuración de compilación:

    • Si almacenas los registros de compilación en Cloud Logging, agrega un campo logging y establece el valor del campo en CLOUD_LOGGING_ONLY.

    • Si almacenas los registros de compilación en un bucket de Cloud Storage creado por el usuario, haz lo siguiente:

      • Agrega un campo logging y establece su valor en GCS_ONLY.
      • Agrega un campo logsBucket y establece su valor en la ubicación de tu bucket de Cloud Storage.

    En el siguiente ejemplo, se configuran los registros de compilación para que se almacenen en un bucket de Cloud Storage creado por el usuario:

    YAML

    steps:
    - name: 'bash'
      args: ['echo', 'Hello world!']
    logsBucket: 'LOGS_BUCKET_LOCATION'
    options:
      logging: GCS_ONLY
    

    JSON

    {
      "steps": [
      {
        "name": "bash",
        "args": [
          "echo",
          "Hello world!"
        ]
      }
      ],
      "logsBucket": "LOGS_BUCKET_LOCATION",
      "options": {
        "logging": "GCS_ONLY"
      }
    }
    

    Reemplaza LOGS_BUCKET_LOCATION por el bucket de Cloud Storage para almacenar registros de compilación. Por ejemplo, gs://mylogsbucket

  2. Especifica una cuenta de servicio para usar con el activador de compilación:

    Console

    Para ejecutar compilaciones con la página Activador en la consola de Google Cloud, la cuenta de servicio especificada por el usuario debe estar en el mismo proyecto que el activador de compilación. Para usar activadores con cuentas de servicio entre proyectos, crea el activador de compilación con la herramienta de gcloud.

    1. Crea o edita el activador de compilación.

    2. En el campo Cuenta de servicio, especifica tu cuenta de servicio. Si no especificas una cuenta de servicio, Cloud Build usa la cuenta de servicio predeterminada.

    3. Haz clic en Crear para guardar el activador de compilación.

    gcloud

    Cuando crees un activador de compilación, especifica tu cuenta de servicio con la marca --service-account. En el siguiente ejemplo, el comando gcloud crea un activador de compilación que extrae código de un repositorio de Git:

    gcloud builds triggers create github \
       --name=TRIGGER_NAME \
       --repo-name=REPO_NAME \
       --repo-owner=REPO_OWNER \
       --branch-pattern=BRANCH_PATTERN
       --build-config=BUILD_CONFIG_FILE
       --service-account=SERVICE_ACCOUNT
       --project=BUILD_PROJECT
    

    Reemplaza los valores de marcador de posición en tu archivo de configuración de compilación por lo siguiente:

    • TRIGGER_NAME es el nombre de tu activador de compilación.
    • REPO_NAME es el nombre del repositorio.
    • REPO_OWNER es el nombre de usuario del propietario del repositorio.
    • BRANCH_PATTERN es el nombre de la rama en tu repositorio para invocar la compilación.
    • TAG_PATTERN es el nombre de la etiqueta en tu repositorio para invocar la compilación.
    • BUILD_CONFIG_FILE es la ruta de acceso al archivo de configuración de compilación.
    • SERVICE_ACCOUNT es el correo electrónico asociada a tu cuenta de servicio.
    • BUILD_PROJECT es el proyecto en el que inicias las compilaciones.

Configuración entre proyectos

Si la cuenta de servicio especificada por el usuario se encuentra en un proyecto diferente del proyecto en el que inicias las compilaciones, otorga el acceso necesario:

  • En el proyecto que tiene la cuenta de servicio especificada por el usuario, asegúrate de que no se aplique la restricción de la política de la organización iam.disableCrossProjectServiceAccountUsage. Esta restricción se aplica de forma predeterminada. Para inhabilitar esta restricción de la política de la organización, ejecuta el siguiente comando, en el que SERVICE_ACCOUNT_PROJECT_ID es el proyecto que contiene la cuenta de servicio especificada por el usuario:

    gcloud resource-manager org-policies disable-enforce \
       iam.disableCrossProjectServiceAccountUsage \
       --project=SERVICE_ACCOUNT_PROJECT_ID
    
  • En el proyecto que tiene tu cuenta de servicio especificada por el usuario, otorga la función roles/iam.serviceAccountTokenCreator para el agente de servicio de Cloud Build del proyecto en el que ejecutas las compilaciones:

    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member="serviceAccount:BUILD_SERVICE_AGENT" \
        --role="roles/iam.serviceAccountTokenCreator"
    

    Reemplaza los valores de marcador de posición en el comando por los siguientes:

    • SERVICE_ACCOUNT_PROJECT_ID: Es el ID del proyecto que contiene la cuenta de servicio especificada por el usuario.
    • BUILD_SERVICE_AGENT: El ID de correo electrónico del agente de servicio con el formato service-BUILD_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com, en el que BUILD_PROJECT_NUMBER es el número del proyecto en el que ejecutas las compilaciones. Puedes obtener el número del proyecto en la página de configuración del proyecto.

Limitaciones:

  • Tu proyecto de Google Cloud debe estar en una organización de Google Cloud.

  • Debes iniciar compilaciones en la línea de comandos mediante gcloud builds submit o gcloud builds triggers create. Para usar la página Activadores en la consola de Google Cloud, la cuenta de servicio especificada por el usuario y el activador de compilación deben estar en el mismo proyecto.

¿Qué sigue?