Cuenta de servicio personalizada para Cloud Build
Cloud Functions aprovecha Cloud Build cuando se compila e implementa la función de Cloud Functions. De forma predeterminada, Cloud Functions usa la cuenta de servicio predeterminada de Cloud Build como la principal para realizar tu compilación. En este documento, se describe cómo pasar una cuenta de servicio creada por el usuario para que la use Cloud Build cuando implementes tu función.
Puedes implementar funciones con cuentas de servicio personalizadas mediante Google Cloud CLI, la consola de Google Cloud o la API de Cloud Functions.
Estas son algunas situaciones en las que tal vez quieras proporcionar una cuenta de servicio diferente para que se use cuando Cloud Build compile tu función:
Deseas tener más control sobre qué cuentas de servicio agregar a tu perímetro de VPC-SC.
Deseas que Cloud Build se ejecute con permisos diferentes de los que tiene la cuenta de servicio predeterminada sin tener que revocar cada permiso de forma individual.
Deseas configurar permisos detallados de Cloud Build específicamente para tus funciones, no compartir una cuenta de servicio de Cloud Build que esté optimizada para otros fines.
Habilita las APIs
Esta función requiere que la API de IAM esté habilitada.
Usa Google Cloud CLI para habilitar las API necesarias a fin de implementar una función de Cloud Functions o usa la consola de Google Cloud:
gcloud services enable iam.googleapis.com
Configura la cuenta de servicio
En este documento, se describe cómo crear una cuenta de servicio nueva y otorgar los permisos necesarios. Si deseas usar una cuenta de servicio existente, necesitas la dirección de correo electrónico de la cuenta de servicio que planeas usar. Consulta Configura cuentas de servicio especificadas por el usuario para obtener más detalles.
Puedes ver tus cuentas de servicio existentes de la siguiente manera o usar la consola de Google Cloud:
gcloud iam service-accounts list
Crear una cuenta de servicio.
Usa Google Cloud CLI para crear tu cuenta de servicio o usa la consola de Google Cloud:
gcloud iam service-accounts create SA_EMAIL
Reemplaza SA_EMAIL por la dirección de correo electrónico de la cuenta de servicio.
Otorgar permisos
La cuenta de servicio que uses necesitará los siguientes roles:
roles/iam.serviceAccountUser
: Este rol no es obligatorio en la cuenta de servicio, pero el usuario que implementa la función necesita este rol.roles/logging.logWriter
: Obligatorio para almacenar registros de compilación en Cloud Logging.roles/artifactregistry.writer
: Obligatorio para almacenar imágenes de compilación en Artifact Registry.roles/storage.objectAdmin
: Obligatorio para recuperar la fuente de función del bucket de Cloud Storage y almacenar imágenes de compilación en Container Registry.
Otorga los siguientes roles mediante Google Cloud CLI o usa la consola de Google Cloud.
gcloud projects add-iam-policy-binding SA_PROJECT_ID \
--member=user:DEPLOYING_USER_EMAIL \
--role=roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/logging.logWriter
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/artifactregistry.writer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectAdmin
Reemplaza lo siguiente:
- PROJECT_ID: El ID del proyecto de Google Cloud..
- SA_EMAIL: La dirección de correo electrónico de tu cuenta de servicio.
- SA_PROJECT_ID: Es el ID del proyecto de tu cuenta de servicio.
- DEPLOYING_USER_EMAIL: Es la dirección de correo electrónico del usuario que implementa la función.
Implementa una función con una cuenta de servicio personalizada
Puedes usar Google Cloud CLI a fin de implementar una función que use una cuenta de servicio personalizada para Cloud Build:
- La marca
--build-service-account
especifica una cuenta de servicio de IAM cuyas credenciales se usarán para el paso de compilación. Si no se proporciona una cuenta de servicio personalizada, la función usa la cuenta de servicio predeterminada del proyecto para Cloud Build. - De forma opcional, puedes usar un grupo privado, que especificas con la marca
--build-worker-pool
.
gcloud functions deploy FUNCTION_NAME \
--gen2 \
--region=REGION \
--project=PROJECT_ID \
--runtime=RUNTIME \
--entry-point=CODE_ENTRYPOINT \
--build-service-account=projects/PROJECT_ID/serviceAccounts/SA_EMAIL \
--memory=256Mi \
--trigger-http \
--source=.
Reemplaza lo siguiente:
- FUNCTION_NAME: El nombre en el que implementaste la función.
- REGION: el nombre de la región de Google Cloud en la que deseas implementar tu función
(por ejemplo,
us-west1
). - PROJECT_ID: El ID del proyecto de Google Cloud..
- RUNTIME: Es el ID del entorno de ejecución de una versión del entorno de ejecución compatible para ejecutar tu función, por ejemplo,
nodejs18
. - CODE_ENTRYPOINT: el punto de entrada a tu función en tu código fuente. Este es el código que se ejecutará cuando se ejecute tu función.
- SA_EMAIL: La dirección de correo electrónico de tu cuenta de servicio.