Questo tutorial mostra come utilizzare Secret Manager con Cloud Build per accedere ai repository privati GitHub da una build. Secret Manager è un servizio che archivia in modo sicuro chiavi API, password e altri dati sensibili. Google Cloud
Crea 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 indirizzo email GitHub:
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. Cloud Build non può utilizzare la tua chiave SSH se è protetta da una passphrase.
Archivia la chiave SSH privata in Secret Manager
Quando crei una chiave SSH,
nel tuo ambiente viene creato un file id_github
. Poiché chiunque può
autenticarsi al tuo account con questo file, devi archiviarlo in
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 file
workingdir/id_github
.Lascia invariata la sezione Regioni.
Fai clic sul pulsante Crea secret.
Il file id_github
verrà caricato in 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 profilo, fai clic su Repository, poi sul nome del repository.
Nel repository, fai clic su Impostazioni.
Nella barra laterale, fai clic su Chiavi di deployment, quindi su Aggiungi chiave di deployment.
Fornisci un titolo e incolla la chiave SSH pubblica da
workingdir/id_github.pub
.Seleziona Consenti accesso in scrittura se vuoi che questa chiave abbia accesso in scrittura al repository. Una chiave di deployment con accesso in scrittura consente a un 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 service account che utilizzi per la build.
-
Nella console Google Cloud , vai alla pagina settings Cloud Build Autorizzazioni:
Dall'elenco a discesa, seleziona il account di servizio di cui vuoi modificare i ruoli.
Imposta lo stato del ruolo
Secret Manager Secret Accessor
su Abilita.
Aggiungi la chiave SSH pubblica agli host noti
La maggior parte dei computer contiene un file denominato known_hosts
, che contiene chiavi note per
gli host remoti. Le chiavi vengono spesso raccolte dagli host remoti quando ci si connette
per la prima volta, ma possono anche essere aggiunte manualmente. Le chiavi in questo
file vengono utilizzate per verificare l'identità dell'host remoto e proteggere dal furto di identità.
Affinché Cloud Build si connetta a GitHub, devi aggiungere la chiave SSH pubblica
al file known_hosts
nell'ambiente di build di Cloud Build. Puoi
eseguire questa operazione aggiungendo la chiave a un file known_hosts.github
temporaneo, quindi
copiando i 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
nel file known_hosts
nell'ambiente di build di Cloud Build.
Configura la build
Per configurare la build:
Crea un file di configurazione della build denominato
cloudbuild.yaml
con due passaggi: il primo passaggiogcloud
accede alla chiave SSH in Secret Manager e la salva comeid_rsa
in un volume denominatossh
, insieme a una copia diknown_hosts.github
. Il volume viene utilizzato per rendere persistenti i file durante i passaggi di compilazione. Il secondo passaggiogit
utilizza la chiave inid_rsa
per connettersi al repository all'indirizzogit@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 quanto segue:
GIT_USERNAME
: il nome utente GitHub del proprietario del repository.GIT_REPOSITORY
: il nome del repository GitHub a cui vuoi accedere.PROJECT_ID
: L'ID del Google Cloud progetto in cui hai archiviato i tuoi secret.SECRET_NAME
: il nome del secret che hai creato in Secret Manager.
Per scoprire di più sulle stringhe multiline YAML utilizzate nello snippet precedente, consulta YAML multiline.
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