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 em segurança 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 prevista,
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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro 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 Gestor Secreto para se familiarizar com este produto.
Abra uma janela de terminal.
Crie um novo diretório denominado
workingdire navegue para o mesmo:mkdir workingdir cd workingdirCrie 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-emailEste comando cria uma nova chave SSH
workingdir/id_githubsem uma frase de acesso para a sua chave SSH. O Cloud Build não pode usar a sua chave SSH se estiver protegida com uma frase secreta.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 sua 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 Accessorcomo Ativar.Crie um ficheiro de configuração de compilação denominado
cloudbuild.yamlcom dois passos: o primeiro passogcloudacede à chave SSH no Secret Manager e guarda-a comoid_rsanum volume denominadossh, juntamente com uma cópia doknown_hosts.github. O volume é usado para persistir ficheiros nos passos de compilação. O segundo passogitusa a chave emid_rsapara estabelecer ligação 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
aos mesmos 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 SSH pública 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: