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 pueden tener permisos que son innecesariamente amplios para tu caso de uso, como permisos a Cloud Source Repositories y a cualquier bucket de Cloud Storage en tu proyecto.
Para mejorar la postura de seguridad de tus proyectos y reducir el posible impacto de parámetros de configuración incorrectos o usuarios maliciosos, te recomendamos que sigas el principio de privilegio mínimo. Si adoptas este principio, puedes asignar a cada cuenta de servicio los permisos y roles centrados en 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
-
Enable the Cloud Build and IAM APIs.
Si planeas usar esta cuenta para crear y administrar credenciales, por para crear credenciales de corta duración, habilita el API de IAM Service Account Credentials.
Si aún no lo hiciste, crea una cuenta de servicio.
Otorga permisos de IAM
Para permitir que tu compilación acceda a los servicios a los que se debe conectar, debes otorgar algunos roles y permisos:
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 la cuenta de servicio:
En la lista desplegable, selecciona la cuenta de servicio cuyos roles deseas cambio.
Establece el estado de la función que deseas agregar en Habilitar (Enable).
Si el rol que necesitas para tu canalización de compilación no aparece aquí, puedes otorgar roles adicionales en la página de configuración de IAM.
Puedes encontrar información adicional sobre los roles que se suelen requerir para un Basado en Configura el acceso a Cloud Build recursos y la lista completa de IAM de Cloud Build roles y permisos.
Configura registros de compilación
Cuando especificas tu propia cuenta de servicio para las compilaciones, debes almacenar tu en Cloud Logging o en un bucket de Cloud Storage creado por el usuario. Tú no puede almacenar los registros en el bucket de registros predeterminado.
Para almacenar tus registros en un bucket de Cloud Storage, sigue las instrucciones en Almacena registros de compilación en el bucket creado por el usuario. Asegúrate de no haber establecido una política de retención en el bucket de registros, ya que esto puede evitar que Cloud Build escriba registros de compilación en el bucket.
Para almacenar registros de compilación en Cloud Logging, otorga el rol de escritor de registros (
roles/logging.logWriter
) a la cuenta de servicio.Para obtener más información sobre dónde almacenar los registros de compilación, consulta Elige dónde almacenar y almacenar registros de compilación.
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:
En el directorio raíz del proyecto, crea un archivo de configuración de compilación de Cloud Build llamado
cloudbuild.yaml
ocloudbuild.json
.Agrega el campo
serviceAccount
y la configuración de registro preferida.Si almacenas los registros de compilación en Cloud Logging, agrega
logging
y establece el valor del campo enCLOUD_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 enGCS_ONLY
. - Agrega un campo
logsBucket
y establece su valor en la ubicación de tu bucket de Cloud Storage.
- Agrega un campo
En el siguiente ejemplo, se configura Cloud Build para que ejecute compilaciones con una cuenta de servicio especificada por el usuario y 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' 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 la 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, una 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
.
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 activadores de Cloud Build con tu propia cuenta de servicio, configura tu opción de registro preferida y selecciona tu cuenta de servicio preferida cuando crees el activador.
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 enCLOUD_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 enGCS_ONLY
. - Agrega un campo
logsBucket
y establece su valor en la ubicación de tu bucket de Cloud Storage.
- Agrega un campo
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
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, el La cuenta de servicio especificada por el usuario debe estar en el mismo proyecto que tu compilación un activador. Para usar activadores con cuentas de servicio entre proyectos, crea el activador de compilación con la herramienta
gcloud
.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.
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 comandogcloud
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 tu cuenta de servicio en el formato/projects/PROJECT_ID/serviceAccounts/ACCOUNT_ID_OR_EMAIL
.BUILD_PROJECT
es el proyecto en el que te encuentras iniciar compilaciones.
Configuración entre proyectos
Si la cuenta de servicio especificada por el usuario está en un proyecto diferente del proyecto en el que inicias las compilaciones, otorga el acceso necesario:
En el proyecto que tiene tu cuenta de servicio especificada por el usuario, asegúrate de que
iam.disableCrossProjectServiceAccountUsage
restricción de la política de la organización no se aplica de manera forzosa. 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 la cuenta de servicio especificada por el usuario, otorga el rol
roles/iam.serviceAccountTokenCreator
al agente de servicio de Cloud Build del proyecto en el que ejecutas 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
: El ID del proyecto de la 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 formatoservice-BUILD_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
, dondeBUILD_PROJECT_NUMBER
es el número de proyecto de la en el que ejecutas compilaciones. Puedes obtener el número de 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 con
gcloud builds submit
ogcloud 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?
- Obtén más información sobre los permisos y roles de IAM de Cloud Build.
- Descubre cómo los cambios en las cuentas de servicio afectan la ejecución de tus compilaciones.