Este tutorial demonstra como usar o Secret Manager com o Cloud Build para aceder a repositórios GitHub privados a partir de uma compilação. O Secret Manager é um Google Cloud serviço que armazena de forma segura chaves de API, palavras-passe e outros dados confidenciais.
Objetivos
- Configure uma chave SSH do GitHub.
- Adicione a chave pública de SSH às chaves de implementação de um repositório privado.
- Armazene a chave SSH privada no Secret Manager.
- Envie uma compilação que aceda à chave do Gestor Secreto e a use para aceder ao repositório privado.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
- Secret Manager
- Cloud Build
Para gerar uma estimativa de custos com base na sua utilização projetada,
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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Secret Manager APIs.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Secret Manager APIs.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
- Opcional. Conclua o início rápido do Secret Manager para se familiarizar com este produto.
Abra uma janela de terminal.
Crie um novo diretório denominado
workingdir
e navegue para o mesmo:mkdir workingdir cd workingdir
Crie uma nova chave SSH do GitHub, em que github-email é o seu endereço de email do GitHub:
ssh-keygen -t rsa -b 4096 -N '' -f id_github -C github-email
Este comando cria uma nova chave SSH
workingdir/id_github
sem uma frase secreta para a sua chave SSH. O Cloud Build não pode usar a sua chave SSH se estiver protegida com uma frase de acesso.Aceda à página Secret Manager na Google Cloud consola:
Na página Secret Manager, clique em Create Secret.
Na página Criar segredo, em Nome, introduza um nome para o segredo.
No campo Valor secreto, clique em Carregar e carregue o ficheiro
workingdir/id_github
.Não altere a secção Regiões.
Clique no botão Criar segredo.
Inicie sessão no GitHub.
No canto superior direito, clique na sua foto do perfil e, de seguida, clique em O seu perfil.
Na página do seu perfil, clique em Repositórios e, de seguida, clique no nome do seu repositório.
No repositório, clique em Definições.
Na barra lateral, clique em Deploy Keys e, de seguida, em Add deploy key.
Indique um título e cole a chave SSH pública de
workingdir/id_github.pub
.Selecione Permitir acesso de escrita se quiser que esta chave tenha acesso de escrita ao repositório. Uma chave de implementação com acesso de escrita permite que uma implementação seja enviada para o repositório.
Clique em Adicionar chave.
Elimine a chave SSH do disco:
rm id_github*
-
Na Google Cloud consola, aceda à página settings Autorizações do Cloud Build:
Na lista pendente, selecione a conta de serviço cujas funções quer alterar.
Defina o estado da função
Secret Manager Secret Accessor
como Ativar.Crie um ficheiro de configuração de compilação denominado
cloudbuild.yaml
com dois passos: o primeiro passogcloud
acede à chave SSH no Secret Manager e guarda-a comoid_rsa
num volume denominadossh
, juntamente com uma cópia doknown_hosts.github
. O volume é usado para persistir ficheiros nos passos de compilação. O segundo passogit
usa a chave emid_rsa
para se ligar 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'
GIT_USERNAME
: o nome de utilizador do GitHub do proprietário do repositório.GIT_REPOSITORY
: o nome do repositório do GitHub ao qual quer aceder.PROJECT_ID
: O ID do Google Cloud projeto onde armazenou os seus segredos.SECRET_NAME
: o nome do segredo que criou no Secret Manager.- 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.
No GitHub, navegue para a página principal do repositório.
Abaixo do nome do repositório, clique em Definições.
Na barra lateral esquerda, clique em Chaves de implementação.
Na página Implementar chaves, procure as chaves de implementação associadas ao seu repositório e clique em Eliminar.
- Saiba como criar acionadores do GitHub.
- Saiba mais sobre a utilização de recursos encriptados no Cloud Build.
- Saiba mais sobre o Secret Manager.
Crie uma chave SSH
Armazene a chave SSH privada no Secret Manager
Quando cria uma chave SSH,
é criado um ficheiro id_github
no seu ambiente. Uma vez que qualquer pessoa pode autenticar-se na sua conta com este ficheiro, tem de armazená-lo no Secret Manager antes de o usar numa compilação.
Para armazenar a sua chave SSH no Secret Manager, faça o seguinte:
Esta ação carrega o ficheiro id_github
para o Secret Manager.
Adicione a chave SSH pública às chaves de implementação do repositório privado
Conceder autorizações
Tem de conceder autorização para aceder ao Secret Manager à conta de serviço que está a usar para a compilação.
Adicione a chave pública de SSH aos anfitriões conhecidos
A maioria das máquinas contém um ficheiro denominado known_hosts
, que contém chaves conhecidas para anfitriões remotos. As chaves são frequentemente recolhidas dos anfitriões remotos quando se ligam
a eles pela primeira vez, mas também podem ser adicionadas manualmente. As chaves neste ficheiro são usadas para validar a identidade do anfitrião remoto e proteger contra roubo de identidade.
Para que o Cloud Build se ligue ao GitHub, tem de adicionar a chave SSH pública ao ficheiro known_hosts
no ambiente de compilação do Cloud Build. Pode fazê-lo adicionando a chave a um ficheiro known_hosts.github
temporário e, em seguida, copiando o conteúdo de known_hosts.github
para o ficheiro known_hosts
no ambiente de compilação do Cloud Build.
No diretório workingdir
, crie um ficheiro denominado known_hosts.github
e adicione a chave pública de SSH a este ficheiro:
ssh-keyscan -t rsa github.com > known_hosts.github
Na secção seguinte, quando configurar a compilação, vai adicionar instruções no ficheiro de configuração do Cloud Build para copiar o conteúdo de known_hosts.github
para o ficheiro known_hosts
no ambiente de compilação do Cloud Build.
Configure a compilação
Para configurar a compilação:
Substitua os valores dos marcadores de posição nos comandos acima pelo seguinte:
Para saber mais sobre as strings multilinha YAML usadas no fragmento acima, consulte o artigo YAML multilinha.
Envie a compilação
Para enviar a compilação, execute o seguinte comando:
gcloud builds submit --config=cloudbuild.yaml .
O resultado é semelhante ao seguinte:
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 incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Elimine o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar o projeto: