Este tutorial demonstra como usar o Secret Manager com o Cloud Build para acessar repositórios privados do GitHub em um build. O Secret Manager é um serviço do Google Cloud que armazena com segurança chaves de API, senhas e outros dados sensíveis.
Objetivos
- Configurar uma chave SSH do GitHub.
- Adicione a chave SSH pública às chaves de implantação de um repositório privado.
- Armazene a chave SSH privada no gerenciador de secrets.
- Envie uma versão que acesse a chave do gerenciador de secrets e a use para acessar o repositório particular.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- Secret Manager
- Cloud Build
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Secret Manager APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Secret Manager APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Opcional. Conclua o guia de início rápido do "Gerenciador de secrets" para se familiarizar com este produto.
Criar uma chave SSH
Abra uma janela de terminal.
Crie um novo diretório chamado
workingdir
e navegue até ele:mkdir workingdir cd workingdir
Crie uma nova chave SSH do GitHub, em que github-email é seu endereço de e-mail do GitHub:
ssh-keygen -t rsa -b 4096 -N '' -f id_github -C github-email
Esse comando cria uma nova chave SSH
workingdir/id_github
sem uma senha longa para sua chave SSH. O Cloud Build não pode usar sua chave SSH se ela estiver protegida com uma senha longa.
Armazenar a chave SSH privada no gerenciador de secrets
Quando você cria uma chave SSH, um arquivo id_github
é criado no ambiente. Como qualquer pessoa pode se autenticar na sua conta com esse arquivo, é necessário armazená-lo no gerenciador de secrets antes de usá-lo em uma versão.
Para armazenar sua chave SSH no gerenciador de secrets:
Acesse a página do Secret Manager no console do Google Cloud:
Na página Gerenciador de secrets, clique em Criar secret.
Na página Criar secret, em Nome, insira um nome para o secret.
No campo Valor do secret, clique em Fazer upload e faça upload do arquivo
workingdir/id_github
.Deixe a seção Regiões inalterada.
Clique no botão Criar secret.
Isso fará o upload do arquivo id_github
para o gerenciador de secrets.
Adicionar a chave SSH pública às chaves de implantação do repositório privado
Faça login no GitHub.
No canto superior direito, clique na sua foto do perfil e em Seu perfil.
Na página do perfil, clique em Repositórios e, em seguida, clique no nome do repositório.
No seu repositório, clique em Configurações.
Na barra lateral, clique em Implantar chaves e em Adicionar chave de implantação.
Forneça um título e cole sua chave SSH pública de
workingdir/id_github.pub
.Selecione Permitir acesso de gravação se você quiser que essa chave tenha acesso de gravação ao repositório. Uma chave de implantação com acesso de gravação permite que uma implantação seja enviada ao repositório.
Clique em Adicionar chave.
Exclua a chave SSH do disco:
rm id_github*
Conceder permissões
Você precisa conceder permissão para acessar o Secret Manager para o serviço que você está usando para a versão.
Abra a página "Configurações" do Cloud Build:
Na lista suspensa, selecione a conta de serviço com os papéis que você quer atribuir mudar.
Defina o status do papel
Secret Manager Secret Accessor
como Ativar.
Adicionar a chave SSH pública aos hosts conhecidos
A maioria das máquinas contém um arquivo chamado known_hosts
, que contém chaves conhecidas para hosts remotos. As chaves geralmente são coletadas dos hosts remotos ao se conectarem a elas pela primeira vez, mas também podem ser adicionadas manualmente. As chaves neste arquivo são usadas para verificar a identidade do host remoto e proteger contra a falsificação de identidade.
Para que o Cloud Build se conecte ao GitHub, você precisa adicionar a chave SSH pública ao arquivo known_hosts
no ambiente de compilação do Cloud Build. Para isso, adicione a chave a um arquivo known_hosts.github
temporário e copie o conteúdo de known_hosts.github
para o arquivo known_hosts
no ambiente de compilação do Cloud Build.
No diretório workingdir
, crie um arquivo chamado known_hosts.github
e adicione a chave SSH pública a esse arquivo:
ssh-keyscan -t rsa github.com > known_hosts.github
Na próxima seção, ao configurar o build, você adicionará instruções no arquivo de configuração do Cloud Build para copiar o conteúdo de known_hosts.github
para o arquivo known_hosts
no ambiente de criação do Cloud Build.
Configure a compilação
Para configurar a versão:
Crie um arquivo de configuração do build chamado
cloudbuild.yaml
em duas etapas: a primeira etapagcloud
acessa a chave SSH no Secret Manager e a salva comoid_rsa
em um volume chamadossh
, junto com uma cópia doknown_hosts.github
. O volume é usado para manter os arquivos nas etapas da criação. A segunda etapagit
usa a chave emid_rsa
para se conectar ao repositório emgit@github.com:git-username/git-repository
.# Access the id_github file from Secret Manager, and setup SSH steps: - name: 'gcr.io/cloud-builders/git' secretEnv: ['SSH_KEY'] entrypoint: 'bash' args: - -c - | echo "$$SSH_KEY" >> /root/.ssh/id_rsa chmod 400 /root/.ssh/id_rsa cp known_hosts.github /root/.ssh/known_hosts volumes: - name: 'ssh' path: /root/.ssh # Clone the repository - name: 'gcr.io/cloud-builders/git' args: - clone - --recurse-submodules - git@github.com:GIT_USERNAME/GIT_REPOSITORY volumes: - name: 'ssh' path: /root/.ssh availableSecrets: secretManager: - versionName: projects/PROJECT_ID/secrets/SECRET_NAME/versions/latest env: 'SSH_KEY'
Substitua os valores dos marcadores nos comandos acima pelo seguinte:
GIT_USERNAME
: é o nome de usuário do GitHub do proprietário do repositório.GIT_REPOSITORY
: o nome do repositório do GitHub que você quer acessar.PROJECT_ID
: o ID do projeto do Google Cloud em que você armazenou os secrets.SECRET_NAME
: o nome do secret criado no Secret Manager.
Para saber mais sobre strings de multilinhas YAML usadas no snippet acima, consulte Multilinhas YAML.
Enviar a versão
Para enviar o build, execute o seguinte comando:
gcloud builds submit --config=cloudbuild.yaml .
A saída será assim:
Creating temporary tarball archive of 3 file(s) totalling 4.1 KiB before compression.
Uploading tarball of [.] to [gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz]
Created [https://cloudbuild.googleapis.com/v1/projects/[PROJECT-ID]/builds/871b68bc---].
Logs are available at [https://console.cloud.google.com/cloud-build/builds/871b68bc---?project=[PROJECT-ID]].
----------------------------- REMOTE BUILD OUTPUT ------------------------------
starting build "871b68bc-cefc-4411-856c-2a2b7c7d2487"
FETCHSOURCE
Fetching storage object: gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz#1504288640827178
Copying gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz#1504288640827178...
/ [1 files][ 3.9 KiB/ 3.9 KiB]
Operation completed over 1 objects/3.9 KiB.
BUILD
Step #0: Already have image (with digest): gcr.io/cloud-builders/gcloud
Starting Step #0
Finished Step #0
Step #1: Already have image (with digest): gcr.io/cloud-builders/git
Starting Step #1
Step #1: # github.com SSH-2.0-libssh_0.7.0
Finished Step #1
Step #2: Already have image (with digest): gcr.io/cloud-builders/git
Starting Step #2
Step #2: Cloning into '[REPOSITORY-NAME]'...
Step #2: Warning: Permanently added the RSA host key for IP address 'XXX.XXX.XXX.XXX' to the list of known hosts.
Finished Step #2
PUSH
DONE
-----------------------------------------------------------------------------------------------------------------
ID CREATE_TIME DURATION SOURCE IMAGES STATUS
871b68bc-cefc-4411-856c-2a2b7c7d2487 XXXX-XX-XXT17:57:21+00:00 13S gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz - SUCCESS
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Exclua o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Como excluir a chave de implantação do repositório
No GitHub, acesse a página principal do repositório.
No nome do repositório, clique em Settings.
Na barra lateral esquerda, clique em Implantar chaves.
Na página Implantar chaves, procure as chaves de implantação associadas ao seu repositório e clique em Excluir.
A seguir
- Saiba como criar gatilhos do GitHub.
- Saiba mais sobre como usar recursos criptografados no Cloud Build.
- Saiba mais sobre o gerenciador de secrets.