Questo tutorial mostra come utilizzare Secret Manager con Cloud Build per accedere Repository GitHub da una build. Secret Manager è un servizio Google Cloud che consente di Archivia chiavi API, password e altri dati sensibili.
Obiettivi
- Configura una chiave SSH GitHub.
- Aggiungi la chiave SSH pubblica alle chiavi di deployment del repository privato.
- Archivia la chiave SSH privata in Secret Manager.
- Invia una build che accede alla chiave da Secret Manager per accedere al repository privato.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- Secret Manager
- Cloud Build
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Cloud Build and Secret Manager.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Facoltativo. Completa la Guida rapida di Secret Manager per acquisire familiarità con questo prodotto.
Creare una chiave SSH
Apri una finestra del terminale.
Crea una nuova directory denominata
workingdir
e accedi alla directory:mkdir workingdir cd workingdir
Crea una nuova chiave SSH GitHub, dove github-email è il tuo GitHub indirizzo email:
ssh-keygen -t rsa -b 4096 -N '' -f id_github -C github-email
Questo comando crea una nuova chiave SSH
workingdir/id_github
senza passphrase per la chiave SSH. Cloud Build non può utilizzare la tua chiave SSH se è protetta con una passphrase.
Archivia la chiave SSH privata in Secret Manager
Quando crei una chiave SSH,
viene creato un file id_github
nel tuo ambiente. Perché chiunque può
al tuo account con questo file, devi archiviare il file
Secret Manager prima di utilizzarlo in una build.
Per archiviare la chiave SSH in Secret Manager:
Vai alla pagina Secret Manager nella console Google Cloud:
Nella pagina Secret Manager, fai clic su Crea secret.
Nella pagina Crea secret, in Nome, inserisci un nome per il secret.
Nel campo Valore secret, fai clic su Carica e carica il tuo
workingdir/id_github
. .Non modificare la sezione Regioni.
Fai clic sul pulsante Crea secret.
Il file id_github
verrà caricato su Secret Manager.
Aggiungi la chiave SSH pubblica alle chiavi di deployment del repository privato
Accedi a GitHub.
Nell'angolo in alto a destra, fai clic sulla tua foto del profilo, quindi fai clic su Il tuo profilo.
Nella pagina del tuo profilo, fai clic su Repository, quindi sul nome del tuo repository Git.
Dal repository, fai clic su Impostazioni.
Nella barra laterale, fai clic su Esegui il deployment delle chiavi, quindi su Aggiungi chiave di deployment.
Specifica un titolo, incolla la chiave SSH pubblica da
workingdir/id_github.pub
.Seleziona Consenti accesso in scrittura se desideri che la chiave abbia accesso in scrittura repository Git. Una chiave di deployment con accesso in scrittura consente al deployment di eseguire il push nel repository.
Fai clic su Aggiungi chiave.
Elimina la chiave SSH dal disco:
rm id_github*
Concedi le autorizzazioni
Devi concedere l'autorizzazione per accedere a Secret Manager al servizio che stai utilizzando per la build.
Apri la pagina Impostazioni di Cloud Build:
Dall'elenco a discesa, seleziona l'account di servizio di cui vuoi assegnare i ruoli modifica.
Imposta lo stato del ruolo
Secret Manager Secret Accessor
su Abilitato.
Aggiungi la chiave SSH pubblica agli host noti
La maggior parte delle macchine contiene un file denominato known_hosts
, che contiene chiavi note per
host remoti. Spesso le chiavi vengono raccolte dagli host remoti durante la connessione
ma possono anche essere aggiunti manualmente. Le chiavi in questo
vengono utilizzati per verificare l'identità dell'host remoto e proteggerti dal furto d'identità.
Per fare in modo che Cloud Build si connetta a GitHub, devi aggiungere la chiave SSH pubblica
al file known_hosts
nell'ambiente di build di Cloud Build. Tu
puoi farlo aggiungendo la chiave a un file known_hosts.github
temporaneo e
copia dei contenuti di known_hosts.github
nel file known_hosts
nell'ambiente di build di Cloud Build.
Nella directory workingdir
, crea un file denominato known_hosts.github
e
aggiungi la chiave SSH pubblica a questo file:
ssh-keyscan -t rsa github.com > known_hosts.github
Nella sezione successiva, quando configuri la build, aggiungerai istruzioni nel
file di configurazione di Cloud Build per copiare i contenuti di known_hosts.github
al file known_hosts
nell'ambiente di build di Cloud Build.
Configura la build
Per configurare la build:
Crea un file di configurazione di compilazione denominato
cloudbuild.yaml
con due passaggi: il primogcloud
passaggio accede alla chiave SSH in Secret Manager lo salva comeid_rsa
in un volume denominatossh
, insieme a una copia delknown_hosts.github
. Il volume viene utilizzato per rendere persistenti i file tra i passaggi di build. Il secondo passaggiogit
utilizza la chiave inid_rsa
per connettersi al repository ingit@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'
Sostituisci i valori segnaposto nei comandi precedenti con i seguenti:
GIT_USERNAME
: il nome utente GitHub del proprietario del repository.GIT_REPOSITORY
: il nome del repository GitHub che hai selezionato a cui vuoi accedere.PROJECT_ID
: l'ID del progetto Google Cloud in cui hai archiviato i tuoi secret.SECRET_NAME
: il nome del secret che hai creato in Secret Manager.
Per saperne di più sulle stringhe YAML multiriga utilizzate nello snippet sopra, consulta YAML multilinea.
Invia la build
Per inviare la build, esegui questo comando:
gcloud builds submit --config=cloudbuild.yaml .
L'output è simile al seguente:
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
Esegui la pulizia
Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione creato per il tutorial.
Per eliminare il progetto:
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Elimina la chiave di deployment dal repository
Su GitHub, vai alla pagina principale del repository.
Sotto il nome del repository, fai clic su Impostazioni.
Nella barra laterale sinistra, fai clic su Esegui il deployment delle chiavi.
Nella pagina Esegui il deployment delle chiavi, cerca le chiavi di deployment associate al tuo repository e fai clic su Elimina.
Passaggi successivi
- Scopri come creare trigger di GitHub.
- Scopri di più sull'utilizzo delle risorse criptate in Cloud Build.
- Scopri di più su Secret Manager.