En esta página se explica cómo incluir información sensible, como contraseñas y claves de API, en Cloud Build.
Secret Manager es un servicio que almacena de forma segura claves de API, contraseñas y otros datos sensibles. Google CloudPara incluir información sensible en tus compilaciones, puedes almacenarla en Secret Manager y, a continuación, configurar la compilación para que acceda a la información desde Secret Manager.
Antes de empezar
-
Enable the Cloud Build and Secret Manager APIs.
Para usar los ejemplos de línea de comandos de esta guía, instala y configura la CLI de Google Cloud.
Asegúrate de haber almacenado el secreto en Secret Manager. Para obtener instrucciones, consulta el artículo Crear un secreto.
- Anota el nombre y la versión del secreto. Necesitará esta información para configurar Cloud Build de forma que pueda acceder al secreto.
Permisos de gestión de identidades y accesos necesarios
Asigna el rol de gestión de identidades y accesos Permiso para acceder a los recursos de Secret Manager
(roles/secretmanager.secretAccessor
) al secreto de la cuenta de servicio que estés usando para la compilación:
Abre la página Secret Manager en la Google Cloud consola:
Selecciona la casilla del secreto que quieras usar en tu compilación.
Si aún no lo has hecho, haz clic en Mostrar panel de información para abrirlo.
En el panel, en Permisos, haz clic en Añadir principal.
En el campo Nuevos principales, introduce la dirección de correo de tu cuenta de servicio.
En el cuadro desplegable Selecciona un rol, elige Permiso para acceder a los recursos de Secret Manager.
Haz clic en Guardar.
Configurar compilaciones para acceder a secretos UTF-8 de Secret Manager
En el directorio raíz de tu proyecto, crea un archivo de configuración de Cloud Build llamado
cloudbuild.yaml
ocloudbuild.json
.En el archivo de configuración de compilación:
- Después de todas las compilaciones
steps
, añade un campoavailableSecrets
para especificar la versión del secreto y las variables de entorno que se van a usar en el secreto. Puede incluir variables de sustitución en el valor del camposecretVersion
. Puedes especificar más de un secreto en una compilación. - En el paso de compilación en el que quieras especificar el secreto:
- Añade un campo
entrypoint
que apunte abash
para usar la herramienta bash en el paso de compilación. Es obligatorio para hacer referencia a la variable de entorno del secreto. - Añade un campo
secretEnv
que especifique la variable de entorno. - En el campo
args
, añade una marca-c
como primer argumento. Cualquier cadena que envíes después de-c
se tratará como un comando. Para obtener más información sobre cómo ejecutar comandos de bash con-c
, consulta la documentación de bash. - Cuando especifiques el secreto en el campo
args
, hazlo mediante la variable de entorno con el prefijo$$
.
- Añade un campo
The following example build config file shows how to login to Docker using the Docker username and password stored in Secret Manager.
YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD'] secretEnv: ['USERNAME', 'PASSWORD'] availableSecrets: secretManager: - versionName: projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION env: 'PASSWORD' - versionName: projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION env: 'USERNAME'
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=$$USERNAME --password=$$PASSWORD" ], "secretEnv": [ "USERNAME", "PASSWORD" ] } ], "availableSecrets": { "secretManager": [{ "versionName": "projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION", "env": "PASSWORD" }, { "versionName": "projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION", "env": "USERNAME" }] } }
Replace the placeholder values in the above commands with the following:
PROJECT_ID
: The ID of the Google Cloud project where you've stored your secrets.DOCKER_USERNAME_SECRET_NAME
: The secret name corresponding to your Docker username. You can get the secret name from the Secret Manager page in the Google Cloud console.DOCKER_USERNAME_SECRET_VERSION
: The secret version of your Docker username. You can get the secret version by clicking on a secret name on the Secret Manager page in the Google Cloud console.DOCKER_PASSWORD_SECRET_NAME
: The secret name corresponding to your Docker password. You can get the secret name from the Secret Manager page in the Google Cloud console.DOCKER_PASSWORD_SECRET_VERSION
: The secret version of your Docker password. You can get the secret version by clicking on a secret name on the Secret Manager page in the Google Cloud console.
- Después de todas las compilaciones
Use the build config file to start a build using the command line or to automate builds using triggers.
Example: Accessing secrets from scripts and processes
secretEnv
field adds the value of the secret to the environment and you can
access this value via environment variable from scripts or processes:
YAML
steps:
- name: python:slim
entrypoint: python
args: ['main.py']
secretEnv: ['MYSECRET']
availableSecrets:
secretManager:
- versionName: projects/$PROJECT_ID/secrets/mySecret/versions/latest
env: 'MYSECRET'
JSON
{
"steps": [
{
"name": "python:slim",
"entrypoint": "python",
"args": [
"main.py"
],
"secretEnv": [
"MYSECRET"
]
}
],
"availableSecrets": {
"secretManager": [
{
"versionName": "projects/$PROJECT_ID/secrets/mySecret/versions/latest",
"env": "MYSECRET"
}
]
}
}
The following contents of main.py
prints the first five characters of the secret:
import os
print(os.environ.get("MYSECRET", "Not Found")[:5], "...")
Example: authenticating to Docker
In some situations, before interacting with Docker images, your build would need to authenticate to Docker. For example, Docker authentication is required for builds to pull private images and push private or public images to Docker Hub. In these cases, you can store your Docker username and password in Secret Manager and then configure Cloud Build to access the username and password from Secret Manager. For instructions on doing this see Interacting with Docker Hub images.
Example: GitHub pull request creation
Another example where you might want to configure your build to access a sensitive information from Secret Manager is for creating a GitHub pull request in response to builds. To do this:
- Create a GitHub token.
- Store the GitHub token in Secret Manager.
- In your build config file:
- After all the build
steps
, add anavailableSecrets
field to specify the secret version and the environment variable to use for the GitHub token. - Add a build step to invoke the command to create a GitHub pull request.
- After all the build
- Create a GitHub app trigger and use the build config file to invoke the trigger.
The following example config file shows how to create a GitHub pull request using the GitHub token:
YAML
steps: - name: 'launcher.gcr.io/google/ubuntu1604' id: Create GitHub pull request entrypoint: bash args: - -c - curl -X POST -H "Authorization:Bearer $$GH_TOKEN" -H 'Accept:application/vnd.github.v3+json' https://api.github.com/repos/GITHUB_USERNAME/REPO_NAME/pulls -d '{"head":"HEAD_BRANCH","base":"BASE_BRANCH", "title":"NEW_PR"}' secretEnv: ['GH_TOKEN'] availableSecrets: secretManager: - versionName: projects/PROJECT_ID/secrets/GH_TOKEN_SECRET_NAME/versions/latest env: GH_TOKEN
JSON
{ "steps": [ { "name": "launcher.gcr.io/google/ubuntu1604", "id": "Create GitHub pull request", "entrypoint": "bash", "args": [ "-c", "curl -X POST -H \"Authorization:Bearer $$GH_TOKEN\" -H 'Accept:application/vnd.github.v3+json' https://api.github.com/repos/GITHUB_USERNAME/REPO_NAME -d '{\"head\":\"HEAD_BRANCH\",\"base\":\"BASE_BRANCH\", \"title\":\"NEW_PR\"}' ], "secretEnv": ['GH_TOKEN'] } ], "availableSecrets": { "secretManager": [ { "versionName": "projects/PROJECT_ID/secrets/GH_TOKEN_SECRET_NAME/versions/latest", "env": "GH_TOKEN" } ] } }
Sustituye los valores de los marcadores de posición de los comandos anteriores por los siguientes:
PROJECT_ID
: el ID del Google Cloud proyecto en el que has almacenado tus secretos.GITHUB_USERNAME
: nombre de usuario de GitHub del propietario del repositorio.REPO_NAME
: nombre del repositorio de GitHub.HEAD_BRANCH
: el nombre de la rama en la que se implementan los cambios. Para las solicitudes de extracción entre repositorios de la misma red, usa el espacio de nombreshead
con un usuario como este:username:branch
.BASE_BRANCH
: el nombre de la rama en la que quieres que se incluyan los cambios. Debe ser una rama que ya exista en el repositorio actual. No puedes enviar una solicitud de obtención a un repositorio que solicite una fusión a una base de otro repositorio.GH_TOKEN_SECRET_NAME
: el nombre del secreto correspondiente a tu token de GitHub.NEW_PR
: la nueva solicitud de extracción que quieras crear.
Configurar compilaciones para acceder a secretos que no sean UTF-8 desde Secret Manager
En el archivo de configuración de compilación, añade un paso de compilación para acceder a la versión del secreto en Secret Manager y almacenarla en un archivo. El siguiente paso de compilación accede a secret-name y lo almacena en un archivo llamado decrypted-data.txt:
YAML
steps: - name: gcr.io/cloud-builders/gcloud entrypoint: 'bash' args: [ '-c', "gcloud secrets versions access latest --secret=secret-name --format='get(payload.data)' | tr '_-' '/+' | base64 -d > decrypted-data.txt" ]
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gcloud", "entrypoint": "bash", "args": [ "-c", "gcloud secrets versions access latest --secret=secret-name --format='get(payload.data)' | tr '_-' '/+' | base64 -d > decrypted-data.txt" ] } ] }
Usa el archivo con los datos descifrados en un paso de compilación. El siguiente fragmento de código usa decrypted-data.txt para iniciar sesión en un registro de Docker privado:
YAML
steps: - name: gcr.io/cloud-builders/gcloud entrypoint: 'bash' args: [ '-c', "gcloud secrets versions access latest --secret=secret-name --format='get(payload.data)' | tr '_-' '/+' | base64 -d > decrypted-data.txt" ] - name: gcr.io/cloud-builders/docker entrypoint: 'bash' args: [ '-c', 'docker login --username=my-user --password-stdin < decrypted-data.txt']
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gcloud", "entrypoint": "bash", "args": [ "-c", "gcloud secrets versions access latest --secret=secret-name --format='get(payload.data)' | tr '_-' '/+' | base64 -d > password.txt" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=my-user --password-stdin < decrypted-data.txt" ] } ] }
Usa el archivo de configuración de compilación para iniciar una compilación con la línea de comandos o para automatizar compilaciones con activadores.
Siguientes pasos
- Consulta cómo usar credenciales cifradas en compilaciones.
- Consulta cómo acceder a repositorios privados de GitHub.
A menos que se indique lo contrario, el contenido de esta página está sujeto a la licencia Reconocimiento 4.0 de Creative Commons y las muestras de código están sujetas a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio web de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-08-21 (UTC).