Nesta página, explicamos como incluir informações confidenciais, como senhas e chaves de API, no Cloud Build.
Antes de incluir informações confidenciais nas suas versões, é necessário armazená-las no Gerenciador de secrets ou criptografá-las usando o Cloud Key Management Service e incluir apenas as informações criptografadas no Cloud Build. O Gerenciador de secrets é a técnica recomendada para gerenciar dados confidenciais com o Cloud Build. Para projetos existentes, você pode continuar usando o Cloud KMS, mas para novos projetos, use o Gerenciador de secrets.
Antes de começar
Para executar os comandos gcloud
descritos nesta página, instale a ferramenta de linha de comando gcloud
.
- Se você já instalou o SDK do Cloud anteriormente, verifique se tem a versão mais recente disponível executando
gcloud components update
.
Como usar o Gerenciador de secrets
O Gerenciador de secrets é um serviço do Google Cloud que armazena com segurança chaves de API, senhas e outros dados confidenciais.
Para armazenar dados no Gerenciador de secrets e usá-los no Cloud Build:
Ative a API Secret Manager:
Conceda o papel
Secret Accessor
do IAM à conta de serviço do Cloud Build:Abra a página do IAM no Console do Cloud.
Selecione o projeto e clique em Abrir.
Na tabela de permissões, localize o e-mail que termina com
@cloudbuild.gserviceaccount.com
e clique no ícone de lápis.Adicione o papel
Secret Manager Secret Accessor
Clique em Save.
Armazene dados no Gerenciador de secrets:
Acesse a página "Gerenciador de secrets" no Console do Cloud:
Na página Gerenciador de secrets, clique em Criar secret.
Na página Criar secret, em Nome, digite
secret-name
.No campo Valor do secret, insira seus dados.
Deixe a seção Regiões inalterada.
Clique no botão Criar secret.
Para instruções sobre como usar o Gerenciador de secrets usando a ferramenta de linha de comando
gcloud
, consulte o Guia de início rápido do Gerenciador de secrets. Para instruções sobre como conceder acesso a um secret específico, consulte como gerenciar o acesso a secrets.No arquivo de configuração da versão, adicione uma etapa de versão para acessar a versão secreta no Gerenciador de secrets e armazená-la em um arquivo. A etapa de versão a seguir acessa secret-name e a armazena em um arquivo chamado 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" ] } ] }
Use o arquivo com os dados descriptografados em uma etapa de versão. O snippet de código a seguir usa decrypted-data.txt para fazer login em um registro particular do Docker:
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" ] } ] }
- Use o arquivo de configuração de build para iniciar manualmente um build ou para automatizar builds usando acionadores.
Como usar o Cloud KMS
O Cloud KMS é um serviço do Google Cloud que permite gerenciar e usar chaves criptográficas.
Para criptografar dados confidenciais usando o Cloud KMS e usar esses dados em um arquivo de configuração de versão:
Ative a API Cloud KMS:
Conceda o papel
Cloud KMS CryptoKey Decrypter
do IAM à conta de serviço do Cloud Build:No Console do 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.
Abra uma janela de terminal.
Crie um novo Cloud KMS
key-ring
com o nome keyring-name:gcloud kms keyrings create keyring-name --location global
Crie um novo Cloud KMS
key
key-name para okey-ring
keyring-name:gcloud kms keys create key-name \ --location global --keyring keyring-name \ --purpose encryption
Configure o Cloud Build para usar dados criptografados:
Para usar variáveis criptografadas:
Criptografe secret-name usando key-name e keyring-name. O valor criptografado é uma string codificada em base64. Não inclua caracteres externos, como espaços ou novas linhas em secret-name. A sinalização
-n
instruiecho
a não incluir uma nova linha de encerramento:echo -n secret-name | gcloud kms encrypt --plaintext-file=- \ --ciphertext-file=- --location=global --keyring=keyring-name \ --key=key-name | base64
No arquivo de configuração da versão, adicione um campo
secrets
para especificar o valor criptografado e oCryptoKey
a ser usado para descriptografá-lo. Em seguida, na etapa de versão em que você quer usar a variável criptografada, adicione um camposecretEnv
para especificar a variável como uma variável de ambiente. Inclua o nome da variável no camposecretEnv
. Se você especificar o valor da variável ou uma variável de ambiente não secreta com o mesmo nome, o Cloud Build emitirá um erro.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" } } ] }
Para usar arquivos criptografados:
Criptografe o arquivo chamado secrets.json usando keyring-name e keyring-name. Isso produz um arquivo criptografado chamado secrets.json.enc. secrets.json não pode ser maior que 64 KiB.
gcloud kms encrypt --plaintext-file=secrets.json \ --ciphertext-file=secrets.json.enc \ --location=global --keyring=keyring-name\ --key=key-name
No arquivo de configuração da versão, antes de qualquer etapa de versão que interaja com o arquivo secrets.json descriptografado, adicione uma etapa de versão que chame o
gcloud
Cloud Build para descriptografar secrets.json.enc usando a chave de criptografia. Essa etapa da criação é semelhante aos comandos usados para criptografar o arquivo.YAML
steps: - name: gcr.io/cloud-builders/gcloud args: - kms - decrypt - --ciphertext-file=secrets.json.enc - --plaintext-file=secrets.json - --location=global - --keyring=keyring-name - --key=key-name # more steps here
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gcloud", "args": [ "kms", "decrypt", "--ciphertext-file=secrets.json.enc", "--plaintext-file=secrets.json", "--location=global", "--keyring=keyring-name", "--key=key-name" ] } ] }
Após a conclusão desta etapa, todas as etapas subsequentes poderão usar o arquivo secrets.json descriptografado. Por exemplo, use os secrets neste arquivo para buscar dependências externas ou para incluir tokens de secret em imagens de contêiner do Docker que você criar.
Use o arquivo de configuração de build para iniciar manualmente um build ou para automatizar builds usando acionadores.
A seguir
- Saiba mais sobre dados autenticados adicionais.
- Saiba mais sobre a hierarquia de objetos do Cloud KMS.