Ce tutoriel explique comment utiliser Secret Manager avec Cloud Build pour accéder à des dépôts privés GitHub à partir d'une compilation. Secret Manager est un service Google Cloud qui stocke de manière sécurisée des clés API, des mots de passe et d'autres données sensibles.
Objectifs
- Configurer une clé GitHub SSH.
- Ajoutez la clé SSH publique aux clés de déploiement d'un dépôt privé.
- Stockez la clé SSH privée dans Secret Manager.
- Envoyez une compilation qui accède à la clé depuis Secret Manager et l'utilise pour accéder au dépôt privé.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
- Secret Manager
- Cloud Build
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- 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
- Facultatif. Suivez le guide de démarrage rapide de Secret Manager pour vous familiariser avec ce produit.
Créer une clé SSH
Ouvrez une fenêtre de terminal.
Créez un répertoire nommé
workingdir
et accédez-y :mkdir workingdir cd workingdir
Créez une clé SSH GitHub, où github-email correspond à votre adresse e-mail GitHub :
ssh-keygen -t rsa -b 4096 -N '' -f id_github -C github-email
Cette commande crée une clé SSH
workingdir/id_github
sans phrase secrète pour votre clé SSH. Cloud Build ne peut pas utiliser votre clé SSH si elle est protégée par une phrase secrète.
Stocker la clé SSH privée dans Secret Manager
Lorsque vous créez une clé SSH, un fichier id_github
est créé dans votre environnement. Dans la mesure où tout le monde peut s'authentifier sur votre compte à l'aide de ce fichier, vous devez le stocker dans Secret Manager avant de l'utiliser dans une compilation.
Pour stocker votre clé SSH dans Secret Manager :
Accédez à la page Secret Manager dans la console Google Cloud :
Sur la page Secret Manager, cliquez sur Créer un secret.
Sur la page Créer un secret, sous Nom, saisissez le nom du secret.
Dans le champ Valeur du secret, cliquez sur Importer, puis importez votre fichier
workingdir/id_github
.Ne modifiez pas la section Régions.
Cliquez sur le bouton Créer un secret.
Le fichier id_github
est alors importé dans Secret Manager.
Ajouter la clé SSH publique aux clés de déploiement de votre dépôt privé
Connectez-vous à GitHub.
Dans l'angle supérieur droit, cliquez sur votre photo de profil, puis sur Your profile (Votre profil).
Sur la page de votre profil, cliquez sur Repositories (Dépôts), puis sur le nom de votre dépôt.
Dans votre dépôt, cliquez sur Settings (Paramètres).
Dans la barre latérale, cliquez sur Deploy Keys (Clés de déploiement), puis sur Add deploy key (Ajouter une clé de déploiement).
Définissez un titre et collez votre clé SSH publique à partir de
workingdir/id_github.pub
.Sélectionnez Autoriser l'accès en écriture si vous souhaitez que cette clé dispose d'un accès en écriture au dépôt. Une clé de déploiement disposant d'un accès en écriture permet de déployer un déploiement dans le dépôt.
Cliquez sur Ajouter une clé.
Supprimez la clé SSH de votre disque :
rm id_github*
Octroyer des autorisations
Vous devez autoriser le service à accéder à Secret Manager que vous utilisez pour la compilation.
Accédez à la page "Paramètres" de Cloud Build.
Dans la liste déroulante, sélectionnez le compte de service dont vous souhaitez attribuer les rôles le changement.
Définissez l'état du rôle
Secret Manager Secret Accessor
sur Activer.
Ajouter la clé SSH publique aux hôtes connus
La plupart des machines comportent un fichier nommé known_hosts
, qui contient les clés connues des hôtes distants. Les clés sont souvent collectées à partir des hôtes distants lors de leur première connexion, mais elles peuvent également être ajoutées manuellement. Les clés de ce fichier permettent de vérifier l'identité de l'hôte distant et de vous protéger contre l'usurpation d'identité.
Pour que Cloud Build se connecte à GitHub, vous devez ajouter la clé SSH publique au fichier known_hosts
dans l'environnement de compilation de Cloud Build. Pour ce faire, ajoutez la clé à un fichier known_hosts.github
temporaire, puis copiez le contenu de known_hosts.github
dans le fichier known_hosts
de l'environnement de compilation de Cloud Build.
Dans votre répertoire workingdir
, créez un fichier nommé known_hosts.github
et ajoutez la clé SSH publique à ce fichier :
ssh-keyscan -t rsa github.com > known_hosts.github
Dans la section suivante, lorsque vous configurerez la compilation, vous ajouterez des instructions dans le fichier de configuration Cloud Build pour copier le contenu de known_hosts.github
dans le fichier known_hosts
de l'environnement de compilation Cloud Build.
Configurer la compilation
Pour configurer la compilation, procédez comme suit :
Créez un fichier de configuration de compilation nommé
cloudbuild.yaml
en deux étapes: la première étapegcloud
accède à la clé SSH dans Secret Manager et l'enregistre en tant queid_rsa
dans un volume nomméssh
, ainsi qu'une copie deknown_hosts.github
. Le volume est utilisé pour conserver les fichiers pendant les étapes de compilation. La deuxième étapegit
utilise la clé dansid_rsa
pour se connecter au dépôt à l'emplacementgit@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'
Remplacez les valeurs d'espace réservé dans les commandes ci-dessus par les éléments suivants :
GIT_USERNAME
est le nom d'utilisateur GitHub du propriétaire du dépôt.GIT_REPOSITORY
: nom du dépôt GitHub auquel vous souhaitez accéder.PROJECT_ID
: ID du projet Google Cloud où vous avez stocké vos secrets.SECRET_NAME
: nom du secret que vous avez créé dans Secret Manager.
Pour en savoir plus sur les chaînes YAML multilignes utilisées dans l'extrait ci-dessus, consultez la page Multiligne YAML.
Envoyer la compilation
Pour envoyer la compilation, exécutez la commande suivante :
gcloud builds submit --config=cloudbuild.yaml .
Le résultat ressemble à ce qui suit :
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
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- 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.
Supprimer la clé de déploiement du dépôt
Sur GitHub, accédez à la page principale du dépôt.
Sous le nom de votre dépôt, cliquez sur Paramètres.
Dans la barre latérale gauche, cliquez sur Deploy keys (Clés de déploiement).
Sur la page Deploy keys (Clés de déploiement), recherchez les clés de déploiement associées à votre dépôt, puis cliquez sur Delete (Supprimer).
Étape suivante
- Découvrez comment créer des déclencheurs GitHub.
- Découvrez l'utilisation des ressources chiffrées dans Cloud Build.
- En savoir plus sur Secret Manager.