O Cloud Key Management Service é um serviço do Google Cloud em que é possível gerenciar e usar chaves criptográficas. Nesta página, explicamos como usar informações criptografadas do Cloud KMS no Cloud Build.
Antes de começar
-
Enable the Cloud Build and Cloud KMS APIs.
Para usar os exemplos de linha de comando neste guia, instale e configure a Google Cloud CLI.
Criptografe informações confidenciais usando o Cloud KMS. O Cloud KMS salva o conteúdo criptografado em um arquivo.
[OPCIONAL] Para configurar versões para usar dados criptografados, converta a ENCRYPTED_FILE em base64. Essa etapa não é necessária para configurações de versão que usam arquivos criptografados:
base64 ENCRYPTED_FILE
Permissões do IAM obrigatórias
Conceda o papel do IAM
descriptografador do Cloud KMS CryptoKey (roles/cloudkms.cryptoKeyDecrypter
)
à conta de serviço do build:
No console do Google Cloud, acesse a página Configurações do Cloud Build:
Localize a linha com o papel Descriptografador de CryptoKey do Cloud KMS e defina o Status como ENABLED.
Como configurar builds para usar dados criptografados
No diretório raiz do projeto, crie um arquivo de configuração de versão do Cloud Build chamado
cloudbuild.yaml
oucloudbuild.json
.No arquivo de configuração de build, faça o seguinte:
- Após a criação de
steps
, adicione um campoavailableSecrets
para especificar o valor criptografado como uma variável de ambiente e okmsKeyName
a ser usado para descriptografá-lo. É possível usar variáveis de substituição no valor dekmsKeyName
. - Na etapa de versão em que você quer especificar o secret:
- Adicione um campo
entrypoint
que aponte parabash
para usar a ferramenta bash na etapa de versão. Isso é necessário para fazer referência à variável de ambiente do secret. - Adicione um campo de
secretEnv
especificando a variável de ambiente para o valor criptografado. - No campo
args
, adicione uma sinalização-c
como primeiro argumento. Qualquer string que você passar depois de -c será tratada como um comando. Para mais informações sobre como executar comandos bash com -c, consulte a documentação do bash. - Ao especificar o valor criptografado no campo
args
, especifique-o usando a variável de ambiente com o prefixo$$
.
- Adicione um campo
The following example build config file shows how to login to Docker and pull a private image:
YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD'] secretEnv: ['USERNAME', 'PASSWORD'] - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker pull $$USERNAME/IMAGE:TAG'] secretEnv: ['USERNAME'] availableSecrets: inline: - kmsKeyName: projects/PROJECT_ID/locations/global/keyRings/USERNAME_KEYRING_NAME/cryptoKeys/USERNAME_KEY_NAME envMap: USERNAME: 'ENCRYPTED_USERNAME' - kmsKeyName: projects/PROJECT_ID/locations/global/keyRings/PASSWORD_KEYRING_NAME/cryptoKeys/PASSWORD_KEY_NAME envMap: PASSWORD: 'ENCRYPTED_PASSWORD'
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=$$USERNAME --password=$$PASSWORD" ], "secretEnv": [ "USERNAME", "PASSWORD" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker pull $$USERNAME/REPOSITORY:TAG" ], "secretEnv": [ "USERNAME" ] } ], "availableSecrets": { "inline": [{ "kmsKeyName": "projects/PROJECT_ID/locations/global/keyRings/USERNAME_KEYRING_NAME/cryptoKeys/USERNAME_KEY_NAME", "envMap": { "USERNAME": "ENCRYPTED_USERNAME" } }, { "kmsKeyName": "projects/PROJECT_ID/locations/global/keyRings/PASSWORD_KEYRING_NAME/cryptoKeys/PASSWORD_KEY_NAME", "envMap": { "PASSWORD": "ENCRYPTED_PASSWORD" } }] } }
Replace the placeholder values in the above commands with the following:
PROJECT_ID
: The ID of the Google Cloud project which contains your Cloud KMS service.USERNAME_KEYRING_NAME
: The key ring name of your Docker username.USERNAME_KEY_NAME
: The key name of your Docker username.ENCRYPTED_USERNAME
: Your encrypted Docker username in base64 format.PASSWORD_KEYRING_NAME
: The key ring name of your Docker password.PASSWORD_KEY_NAME
: The key name of your Docker password.ENCRYPTED_PASSWORD
: Your encrypted Docker password in base64 format.REPOSITORY
: The name of your Docker repository from where you're pulling the image.TAG
: The tag name of your image.
- Após a criação de
Use the build config file to manually start a build or to automate builds using triggers.
Configuring builds to use encrypted files
In your project root directory, create a Cloud Build build config file named
cloudbuild.yaml
orcloudbuild.json
.In your build config file, before any build steps that interact with the decrypted file, add a
gcloud
build step to decrypt the encrypted file using the encryption key. The following example build config file shows how to login to Docker using the encrypted file with Docker password:YAML
steps: - name: gcr.io/cloud-builders/gcloud args: - kms - decrypt - "--ciphertext-file=ENCRYPTED_PASSWORD_FILE" - "--plaintext-file=PLAINTEXT_PASSWORD_FILE" - "--location=global" - "--keyring=KEYRING_NAME" - "--key=KEY_NAME" - name: gcr.io/cloud-builders/docker entrypoint: bash args: - "-c" - docker login --username=DOCKER_USERNAME --password-stdin < PLAINTEXT_PASSWORD_FILE
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gcloud", "args": [ "kms", "decrypt", "--ciphertext-file=ENCRYPTED_PASSWORD_FILE", "--plaintext-file=PLAINTEXT_PASSWORD_FILE", "--location=global", "--keyring=KEYRING_NAME", "--key=KEY_NAME" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=DOCKER_USERNAME --password-stdin < PLAINTEXT_PASSWORD_FILE" ] } ] }
Replace the placeholder values in the above commands with the following:
KEYRING_NAME
: The key ring name of your Docker password.KEY_NAME
: The key name of your Docker password.ENCRYPTED_PASSWORD_FILE
: Encrypted file with your Docker password.PLAINTEXT_PASSWORD_FILE
: Plaintext file with your Docker password.
Use the build config file to manually start a build or to automate builds using triggers.
Configuring builds to use encrypted data (legacy)
To encrypt sensitive data using Cloud KMS and use that data in a build config file:
In your build config file, add a
secrets
field to specify the encrypted value and theCryptoKey
to use to decrypt it. Then, in the build step where you want to use the encrypted variable, add asecretEnv
field to specify the variable as an environment variable. Include the variable's name in thesecretEnv
field. If you specify the variable value, or a non-secret environment variable with the same name, Cloud Build throws an error.YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=user-name --password=$$PASSWORD'] secretEnv: ['PASSWORD'] - name: 'gcr.io/cloud-builders/docker' args: ['push', 'user-name/myubuntu'] secrets: - kmsKeyName: projects/project-id/locations/global/keyRings/keyring-name/cryptoKeys/key-name secretEnv: PASSWORD: 'encrypted-password'
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=user-name --password=$$PASSWORD" ], "secretEnv": [ "PASSWORD" ] }, { "name": "gcr.io/cloud-builders/docker", "args": [ "push", "user-name/myubuntu" ] } ], "secrets": [ { "kmsKeyName": "projects/project-id/locations/global/keyRings/keyring-name/cryptoKeys/key-name", "secretEnv": { "PASSWORD": "encrypted-password" } } ] }
A seguir
- Saiba como configurar builds para acessar secrets do Secret Manager.
- Saiba como acessar repositórios GitHub particulares.
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2024-12-22 UTC.