Aller au contenu principal

Intégrer Google Artifact Registry

Sécurisez vos applications conteneurisées en surveillant Google Artifact Registry à la recherche de secrets exposés dans les images de conteneurs et les artefacts de build.

Pourquoi surveiller Google Artifact Registry ?​

Google Artifact Registry est le hub central de vos applications conteneurisées exécutées sur Google Cloud Platform. Les images de conteneurs stockées ici contiennent généralement des clés de compte de service, des identifiants Cloud SQL et des tokens d'API qui donnent accès aux services Google Cloud, faisant de toute exposition de secret une voie directe pour compromettre l'ensemble de votre infrastructure GCP.

Capacités​

FonctionnalitéPrise en chargeDétails
Scan historique✅ (Pris en charge)Analyse des images existantes et de leurs couches
Scan incrémental✅ (Pris en charge)Scan régulier planifié pour les nouveaux contenus
Périmètre surveillé✅ (Pris en charge)Surveillance granulaire de vos dépôts
Périmètre d'équipe✅ (Pris en charge)Contrôle d'accès basé sur les équipes
Vérification de présence❌ (Non pris en charge)Toutes les occurrences considérées comme présentes
Visibilité de la source❌ (Non pris en charge)Toutes les sources sont considérées comme privées
Pièces jointesN/ANon applicable pour les registres de conteneurs

Ce que nous scannons :

  • Toutes les couches d'images de conteneurs
  • Les Dockerfiles et les configurations de build
  • Les variables d'environnement dans les métadonnées d'image
info

Cette intégration scanne automatiquement vos dépôts surveillés, en téléchargeant des artefacts qui peuvent engendrer des coûts de bande passante. Pour optimiser les coûts et réduire les faux positifs, sélectionnez soigneusement les sources à surveiller et utilisez notre fonctionnalité d'exclusion de chemins de fichiers.

info

Prérequis de plan : Disponible pour le plan GitGuardian Enterprise. Essayez-le gratuitement avec une période d'essai de 30 jours - tous les incidents détectés restent accessibles après la fin de l'essai.
Couverture des détecteurs : Pour minimiser les faux positifs, Generic High Entropy Secret et Generic Password sont désactivés. Tous les autres détecteurs sont activés.

Configurer votre intégration Google Artifact Registry​

GitGuardian s'intègre à Google Artifact Registry via un compte de service disposant d'un accès en lecture seule à vos dépôts. Vous pouvez installer GitGuardian sur plusieurs instances Google Artifact Registry pour surveiller vos dépôts.

GitGuardian peut s'authentifier en tant que ce compte de service de deux manières. Choisissez-en une lors de l'installation de l'intégration :

Option 1 : Clé de compte de serviceOption 2 : Sans clé avec Workload Identity
Ce que GitGuardian stockeUne clé JSON du compte de serviceAucun secret : uniquement l'e-mail du compte de service et les ID du pool et du fournisseur
Rotation des secretsVous effectuez vous-même la rotation de la cléRien à faire tourner : Google émet des tokens qui expirent au bout d'une heure
Ce que GitGuardian surveilleLes dépôts de chaque projet que le compte de service peut lireLes dépôts sous les scopes que vous déclarez : projets, dossiers ou une organisation entière
ConfigurationQuelques étapes dans la console Google CloudQuelques commandes gcloud
Self-HostedToujours disponibleNécessite une instance que Google peut atteindre via internet

L'option 1 est la plus rapide à configurer. L'option 2 est celle recommandée : aucun secret à longue durée de vie ne quitte votre organisation Google Cloud, et un scope de dossier ou d'organisation couvre les projets que vous créez ultérieurement.

Option 1 : Se connecter avec une clé de compte de service​

Prérequis :

  • Un compte Owner ou Manager sur votre Dashboard GitGuardian
  • Des permissions d'administrateur Google Cloud pour créer des comptes de service dans votre projet GCP
  1. Assurez-vous d'être connecté en tant qu'administrateur dans votre console Google Cloud

  2. Cliquez sur Select a project et sélectionnez le projet que vous souhaitez intégrer Google Artifact Registry Project

  3. Ouvrez le menu platform icon et accédez aux Project settings Google Artifact Registry Project Settings

  4. Accédez à la section Service Accounts

  5. Cliquez sur CREATE SERVICE ACCOUNT Google Artifact Registry Create Service Account

  6. Saisissez un Service account name et cliquez sur CREATE AND CONTINUE Google Artifact Registry Service Account Name

  7. Sélectionnez Artifact Registry Reader comme rôle et cliquez sur CONTINUE Google Artifact Registry Service Account Role

  8. Vous pouvez ignorer la 3ème étape et cliquer sur DONE

  9. Cliquez sur le menu platform icon à côté du nouveau compte de service et sélectionnez Manage keys Google Artifact Registry Manage Keys

  10. Cliquez sur le menu ADD KEY et sélectionnez Create new key Google Artifact Registry Create New Key

  11. Sélectionnez JSON comme type de clé et cliquez sur CREATE Google Artifact Registry Download JSON File Cela créera votre nouvelle clé et la téléchargera localement dans un fichier JSON

  12. Dans la plateforme GitGuardian, accédez à la page Sources integration

  13. Cliquez sur Install à côté de Google Artifact Registry dans la section Container registries Google Artifact Registry install

  14. Sur la page Google Artifact Registry integration, cliquez sur Install Google Artifact Registry empty state

  15. Dans Authentication, sélectionnez Service account key

    Si vos dépôts sont stockés dans un emplacement multi-région, saisissez plutôt le nom de la multi-région : us, europe ou asia.

  16. Collez le contenu de votre fichier de clé JSON dans Service Account Key (JSON). GitGuardian affiche l'e-mail du compte de service et le projet de la clé.

  17. Cliquez sur Next. GitGuardian vérifie la clé. Google Artifact Registry integration

  18. Personnalisez votre périmètre surveillé :

    • Monitor specific Google Artifact Registry repositories (Recommandé)
      • Aucun dépôt n'est surveillé par défaut, vous devrez les sélectionner manuellement.
      • Les dépôts nouvellement créés ne seront pas surveillés par défaut. Vous pouvez ajuster ce paramètre à tout moment.
      • Recommandé pour optimiser vos coûts de bande passante.
    • Monitor the entire Google Artifact Registry service account
      • GitGuardian surveille chaque dépôt que le compte de service peut lire : avec une clé, les dépôts de chaque projet qu'il peut lire ; avec Workload Identity, les dépôts sous les scopes de l'installation.
      • Tous les dépôts sont surveillés par défaut, avec un scan historique complet déclenché automatiquement.
      • Les dépôts nouvellement créés seront surveillés par défaut. Vous pouvez ajuster ce paramètre à tout moment.
  19. Cliquez sur Add Google Artifact Registry Default Monitored Perimeter

C'est tout ! Votre instance Google Artifact Registry est désormais installée, et GitGuardian surveille toutes les images Docker de vos dépôts sélectionnés à la recherche de secrets.

Option 2 : Se connecter sans clé avec Workload Identity​

Avec la fédération Workload Identity, GitGuardian lit Artifact Registry via un compte de service qui n'a aucune clé. GitGuardian signe un token à courte durée de vie, Google l'échange contre un token d'accès temporaire, et vous ne stockez ni ne faites jamais tourner de secret à longue durée de vie.

Avant de commencer​

Prérequis :

  • Un compte Owner ou Manager sur votre Dashboard GitGuardian
  • Le gcloud CLI, authentifié avec gcloud auth login
  • Un utilisateur Google Cloud avec des droits IAM sur le projet qui héberge le pool : Workload Identity Pool Admin (roles/iam.workloadIdentityPoolAdmin), Service Account Admin (roles/iam.serviceAccountAdmin) et Project IAM Admin (roles/resourcemanager.projectIamAdmin)
  • Pour attribuer des rôles sur un dossier ou une organisation : Folder IAM Admin (roles/resourcemanager.folderIamAdmin) sur le dossier, ou Organization Administrator (roles/resourcemanager.organizationAdmin) sur l'organisation

Le pool et le compte de service peuvent résider dans un projet qui n'héberge aucun dépôt. Ce projet n'a pas besoin d'Artifact Registry. Nous recommandons un projet dédié, afin que la confiance accordée à GitGuardian reste séparée de vos workloads.

Dans la plateforme GitGuardian, accédez à Settings > Integrations > Google Artifact Registry, cliquez sur Install et sélectionnez Workload Identity. La fenêtre modale affiche deux valeurs pour votre workspace : l'Issuer URI et le Subject. Copiez-les.

Google Artifact Registry Workload Identity issuer and subject

Dans un terminal, définissez les variables utilisées par les commandes ci-dessous. gitguardian-pool et gitguardian-provider sont des noms suggérés. Vous pouvez choisir d'autres noms : vous les saisirez dans le formulaire plus tard.

export PROJECT_ID="<project-that-holds-the-pool>"
export PROJECT_NUMBER="$(gcloud projects describe "$PROJECT_ID" --format='value(projectNumber)')"
export POOL_ID="gitguardian-pool"
export PROVIDER_ID="gitguardian-provider"
export ISSUER_URI="<Issuer URI shown in GitGuardian>"
export GG_SUBJECT="<Subject shown in GitGuardian>"
export SA_NAME="gitguardian-artifact-reader"
export SA_EMAIL="${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"

Choisir les scopes​

Un scope est un nœud de votre hiérarchie Google Cloud que GitGuardian surveille : un projet, un dossier ou une organisation. GitGuardian utilise Cloud Asset Inventory pour trouver chaque dépôt Artifact Registry sous chaque scope, dans toutes les régions, avec une requête par scope. Vous pouvez déclarer plusieurs scopes sur une seule installation.

Choisissez le niveau qui correspond à l'organisation de vos projets :

  • Project : GitGuardian surveille uniquement les dépôts de ce projet.
  • Folder : GitGuardian surveille les dépôts de chaque projet du dossier et de ses sous-dossiers, y compris les projets que vous créez ultérieurement.
  • Organization : GitGuardian surveille les dépôts de chaque projet de l'organisation, y compris les projets que vous créez ultérieurement.

Le projet qui héberge le pool n'est pas un scope, à moins qu'il n'héberge également des dépôts que vous souhaitez surveiller.

Sur chaque scope, le compte de service a besoin de deux rôles :

RôlePourquoi
Cloud Asset Viewer (roles/cloudasset.viewer)Trouver les dépôts sous le scope
Artifact Registry Reader (roles/artifactregistry.reader)Lire les images des dépôts qu'il trouve

Vous attribuez ces rôles à la dernière étape ci-dessous.

Créer les ressources Google Cloud​

  1. Activez les API requises sur le projet qui héberge le pool :

    gcloud services enable \
    iam.googleapis.com \
    sts.googleapis.com \
    iamcredentials.googleapis.com \
    cloudasset.googleapis.com \
    --project="$PROJECT_ID"

    Google facture les requêtes Cloud Asset Inventory au projet du compte de service, l'API doit donc y être activée. Elle n'a pas besoin d'être activée dans les projets que vous scannez. Artifact Registry doit être activé dans les projets qui hébergent vos dépôts, ce qui est déjà le cas si vous l'utilisez.

  2. Créez le workload identity pool :

    gcloud iam workload-identity-pools create "$POOL_ID" \
    --project="$PROJECT_ID" \
    --location="global" \
    --display-name="GitGuardian"
  3. Créez le fournisseur OIDC qui fait confiance à l'émetteur GitGuardian :

    gcloud iam workload-identity-pools providers create-oidc "$PROVIDER_ID" \
    --project="$PROJECT_ID" \
    --location="global" \
    --workload-identity-pool="$POOL_ID" \
    --issuer-uri="$ISSUER_URI" \
    --attribute-mapping="google.subject=assertion.sub"

    Google récupère lui-même le document de découverte et les clés de signature de l'émetteur.

  4. Créez le compte de service :

    gcloud iam service-accounts create "$SA_NAME" \
    --project="$PROJECT_ID" \
    --display-name="GitGuardian Artifact Registry reader"

    Ne créez pas de clé pour ce compte de service : GitGuardian n'en a jamais besoin.

  5. Autorisez GitGuardian à usurper l'identité du compte de service :

    gcloud iam service-accounts add-iam-policy-binding "$SA_EMAIL" \
    --project="$PROJECT_ID" \
    --role="roles/iam.workloadIdentityUser" \
    --member="principal://iam.googleapis.com/projects/${PROJECT_NUMBER}/locations/global/workloadIdentityPools/${POOL_ID}/subject/${GG_SUBJECT}"

    Le binding porte sur votre subject, de sorte que seul votre workspace GitGuardian peut utiliser ce compte de service.

  6. Attribuez les deux rôles sur chaque scope que GitGuardian doit surveiller. Exécutez la commande qui correspond au niveau du scope :

    # A project
    for ROLE in roles/cloudasset.viewer roles/artifactregistry.reader; do
    gcloud projects add-iam-policy-binding "<scope-project-id>" \
    --member="serviceAccount:${SA_EMAIL}" --role="$ROLE"
    done

    # A folder
    for ROLE in roles/cloudasset.viewer roles/artifactregistry.reader; do
    gcloud resource-manager folders add-iam-policy-binding "<folder-id>" \
    --member="serviceAccount:${SA_EMAIL}" --role="$ROLE"
    done

    # An organization
    for ROLE in roles/cloudasset.viewer roles/artifactregistry.reader; do
    gcloud organizations add-iam-policy-binding "<organization-id>" \
    --member="serviceAccount:${SA_EMAIL}" --role="$ROLE"
    done

    Pour trouver l'ID d'un dossier, exécutez gcloud resource-manager folders list --folder=<parent-folder-id> ou --organization=<organization-id>. Les modifications IAM peuvent prendre quelques minutes à s'appliquer.

Saisir les valeurs dans GitGuardian​

  1. De retour dans la fenêtre modale d'installation, remplissez les champs :

    ChampValeur
    Service account email$SA_EMAIL
    Pool project ID$PROJECT_ID. GitGuardian le remplit à partir de l'e-mail du compte de service.
    Pool project number$PROJECT_NUMBER
    Pool ID$POOL_ID
    Provider ID$PROVIDER_ID

    Google Artifact Registry Workload Identity form

  2. Cliquez sur Next.

  3. Dans Scopes, ajoutez chaque projet, dossier ou organisation sur lequel vous avez attribué les deux rôles. Sélectionnez d'abord le Scope level, puis saisissez le Scope ID et cliquez sur Add :

    • Project : l'ID du projet, par exemple my-project
    • Folder : l'ID numérique du dossier, par exemple 271586109710
    • Organization : l'ID numérique de l'organisation

    Sélectionnez le niveau avant de saisir l'ID : un ID de dossier saisi comme un projet ne correspond à rien. Lorsque deux scopes se chevauchent, par exemple une organisation et un dossier qu'elle contient, GitGuardian surveille chaque dépôt une seule fois.

  4. Cliquez sur Next. GitGuardian vérifie la connexion : il échange son token, usurpe l'identité du compte de service et recherche dans les scopes.

  5. Personnalisez votre périmètre surveillé comme dans la configuration avec une clé de compte de service et cliquez sur Add.

Modifier les scopes d'une installation​

  1. Sur la page Google Artifact Registry integration, cliquez sur Manage scopes sur la ligne de l'installation.
  2. Ajoutez ou supprimez des scopes, puis cliquez sur Save.
  3. Si GitGuardian demande un code à usage unique, saisissez le code que vous recevez par e-mail. Un scope modifie ce que GitGuardian lit, il demande donc la même confirmation qu'une installation. Après le code, rouvrez Manage scopes et enregistrez à nouveau vos modifications.

Avant d'ajouter un scope, attribuez-y les deux rôles. GitGuardian trouve les dépôts d'un nouveau scope lors de la prochaine synchronisation.

Dépannage​

Message dans GitGuardianCe qu'il faut vérifier
GitGuardian could not federate through this workload identity providerL'émetteur, le subject, le pool, le fournisseur et le binding roles/iam.workloadIdentityUser. Consultez les points ci-dessous.
This service account cannot search <scope>roles/cloudasset.viewer sur le scope nommé par le message, l'API Cloud Asset sur le projet du compte de service, ainsi que le niveau et l'ID de ce scope. Google répond de la même manière pour un scope qui n'existe pas. GitGuardian s'arrête au premier scope qui échoue : corrigez-le, puis vérifiez à nouveau pour tester les scopes suivants.

Si GitGuardian ne parvient pas à se connecter, vérifiez ces points :

  • Issuer : le --issuer-uri du fournisseur doit correspondre exactement à l'Issuer URI affiché dans GitGuardian.
  • Subject : le subject à la fin du --member à l'étape 5 doit correspondre exactement au Subject affiché dans GitGuardian.
  • Pool ID déjà utilisé : Google supprime les pools de manière réversible (soft-delete) et conserve leur ID réservé pendant 30 jours. Lorsque vous réessayez après une suppression, choisissez un nouveau POOL_ID et saisissez-le dans le formulaire.
  • Dépôts trouvés mais non scannés : le compte de service dispose de roles/cloudasset.viewer mais pas de roles/artifactregistry.reader sur le projet du dépôt.
  • Un scope perd ses attributions : la synchronisation de l'installation s'arrête. Rétablissez les deux rôles sur le scope, ou supprimez le scope dans Manage scopes.

Personnaliser votre périmètre surveillé​

Pour personnaliser les dépôts surveillés, accédez à vos paramètres Google Artifact Registry.

  1. Sélectionnez/Désélectionnez les dépôts pour les inclure ou les exclure de la surveillance
  2. Confirmez en cliquant sur Update monitored perimeter Google Artifact Registry Custom Monitored Perimeter

Surveillance automatique des dépôts​

Vous pouvez activer ou désactiver l'ajout automatique des dépôts nouvellement créés à votre périmètre surveillé en basculant l'option dans vos paramètres Google Artifact Registry. Google Artifact Registry Automatic Repository Monitoring

Désinstaller votre instance Google Artifact Registry​

Pour désinstaller une instance Google Artifact Registry :

  1. Dans la plateforme GitGuardian, accédez à la page Sources integration
  2. Cliquez sur Edit à côté de Google Artifact Registry dans la section Container registries
  3. Cliquez sur l'icône de corbeille à côté de l'instance Google Artifact Registry à désinstaller
  4. Confirmez en cliquant sur Yes, uninstall dans la fenêtre modale de confirmation Google Artifact Registry uninstall

C'est tout ! Votre instance Google Artifact Registry est désormais désinstallée.

Chemins exclus​

GitGuardian exclut automatiquement les fichiers de l'analyse si leurs chemins contiennent l'une de ces expressions régulières :

/__pypackages__/
/\.venv/
/\.tox/
/site-packages/
/venv/
distutils/command/register\.py
python.*/awscli/examples/
python.*/dulwich/(tests|contrib/test_)
python.*/hgext/bugzilla\.py
python.*/mercurial/util\.py
python.*/test/certdata/
python.*/urllib/request\.py
python.*/pygments/lexers/
/cryptography.+/tests/.+(fixtures|test)_.+\.py
/python.+pygpgme.+/tests/
botocore/data/.+/(examples|service)-.+\.json
usr(/local)?/lib/python.+/dist-packages
/libevent.+/info/test/test/
/conda-.+-py.+/info/test/tests.+/test_.+\.py
/python[^/]+/test/
/man/man5/kdc\.conf\.5
erlang.*(inets|ssl).*/examples/
/gems/.*httpclient.*/(test|sample)/
/gems/.*faraday.*/
/vendor/bundle/
/\.gem/
ruby-[^/]+/test/openssl/
/(g|G)o/src/cmd/go/internal/.*_test\.go
/(g|G)o/src/cmd/go/internal/.*/testdata/
/(g|G)o/src/cmd/go/testdata/
/(g|G)o/src/crypto/x509/platform_root_key\.pem
/(G|g)o/src/crypto/(tls|x509)/.*_test\.go
/(g|G)o/src/net/(url|http)/.*_test\.go
src/github.com/DataDog/datadog-agent/.*test.*\.go
google/internal/.*_test\.go
golang.org.*oauth2@.*/.*\.go
/flutter/.*/packages/flutter_tools/test/data/
/flutter/.*/examples/image_list/lib
/\.pub-cache
etc/ssl/private/ssl-cert-snakeoil\.key
perl.*Cwd\.pm
ansible/.*/tests/(integration|unit)/
ansible/.*/test/awx
ansible/collections/ansible_collections/.*/plugins/
/curl/.*/(tests|docs|lib/url\.c)
/doc/wget.+/NEWS
dist/awscli/examples/
usr(/local)?/lib/aws-cli/examples/
/google-cloud-sdk/(lib|platform)/
\.git/modules/third[-_]?party/
\.git/modules/external/
/\.npm/_cacache
/node_modules/
/\.parcel-cache/
/\.yarn/cache/
/\.m2/
/\.ivy2/cache/
/\.mix/
/\.hex/
/composer/cache/
/\.nuget/packages/
/libgpg-error/errorref\.txt
/Homebrew/Library/Taps/
/tcl[^/]+/http-.+\.tm
/tcl[^/]+/[^/]+/http-.+\.tm
usr/share/lua/[^/]+/posix/init\.lua
openssl/openssl-[^/]+/test/recipes/
usr/share/doc/libssl-doc/demos/
boringssl/src/third_party/[^/]+test[^/]+/[^/]+_test\.json

Considérations supplémentaires pour Self-Hosted​

Pour utiliser Workload Identity, Google doit atteindre l'Issuer URI de votre instance via internet : il y lit le document de découverte et les clés de signature. Si votre instance n'est pas accessible depuis internet, utilisez une clé de compte de service.

Pour les instances GitGuardian Self-Hosted, la fréquence de scan peut être configurée dans l'Admin Area :

  • Unité d'intervalle de temps : secondes
  • Valeur par défaut : 86400 (1 jour)
  • Valeur minimale : 1800 (30 minutes)

Confidentialité​

Les lois et réglementations propres à chaque pays peuvent vous obliger à informer vos utilisateurs que vos dépôts sont scannés à la recherche de secrets. Voici une suggestion de message que vous pourriez utiliser :

Dans le cadre de notre processus interne de sécurité de l'information, l'entreprise scanne ses dépôts à la recherche de fuites potentielles de secrets à l'aide de GitGuardian. Toutes les données collectées seront traitées dans le but de détecter des fuites potentielles. Pour en savoir plus sur la façon dont nous gérons vos données personnelles et pour exercer vos droits, veuillez vous référer à notre notice de confidentialité employé/partenaire. Veuillez noter que seuls les dépôts liés à l'activité et aux affaires de l'entreprise peuvent être surveillés et que les utilisateurs doivent s'abstenir de partager des données personnelles ou sensibles non pertinentes au regard de l'objectif du dépôt.