Azure pipeline system accesstoken
Sécurisez l’accès à Azure Repos à partir de pipelines
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Vos dépôts sont essentiels à la réussite de votre entreprise, car ils hébergent le code qui alimente vos opérations. L’accès aux dépôts doit être soigneusement contrôlé. Cet article vous guide dans l’amélioration de la sécurité du pipeline de build et du pipeline de version classique lors de l’accès à Azure Repos afin d’atténuer le risque d’accès non autorisé.
Pour garantir un accès sécurisé aux dépôts Azure, activez les options suivantes :
- Limiter l’étendue de l’autorisation des travaux au projet actuel pour les pipelines non publiés
- Limiter l’étendue de l’autorisation des travaux au projet actuel pour les pipelines de mise en production
- Protéger l’accès aux dépôts dans les pipelines YAML
Les
étapes suivantes pour sécuriser vos pipelines sont similaires dans tous les pipelines :
- Identifiez les dépôts Azure Repos auxquels votre pipeline nécessite l’accès au sein de la même organisation, mais dans différents projets.
Pour ce faire, inspectez votre pipeline ou activez l’option Limiter l’étendue de l’autorisation de travail au projet actuel pour les pipelines (non-)mis en production et notez les dépôts que votre pipeline ne parvient pas à extraire. Les référentiels de sous-modules peuvent ne pas s’afficher lors de la première exécution ayant échoué. - Accordez à l’identité de build du pipeline l’accès à ce projet pour chaque projet qui contient un référentiel auquel votre pipeline doit accéder.
- Accordez à l’identité de build du pipeline un accès en lecture à ce référentiel pour chaque dépôt extrait par votre pipeline.
- Accorder l’identité de build du pipeline Lire Accès à ce référentiel pour chaque référentiel utilisé en tant que sous-module par un référentiel extrait par votre pipeline et se trouvant dans le même projet.
- Activez l’option Limiter l’étendue de l’autorisation de travail au projet actuel pour les pipelines non mis en production , Limiter l’étendue d’autorisation de travail au projet actuel pour les pipelines de mise en production et Protéger l’accès aux dépôts dans les pipelines YAML .
Pour
illustrer les étapes à suivre pour améliorer la sécurité de vos pipelines lorsqu’ils accèdent à Azure Repos, nous utilisons l’exemple suivant.
- Supposons que vous travaillez sur le pipeline hébergé dans le projet, dans le référentiel Azure Repos.
- Votre pipeline extrait le référentiel du même projet, ainsi que les référentiels et du projet.
- Le référentiel utilise le référentiel en tant que sous-module, hébergé dans le même projet.
- Les structures de dépôt du projet ressemblent à la capture d’écran suivante.
- Les structures de dépôt du projet ressemblent à la capture d’écran suivante.
- Imaginez que votre projet ne soit pas configuré pour utiliser une identité de build basée sur un projet ou pour protéger l’accès aux dépôts dans les pipelines YAML. Supposons également que vous ayez déjà exécuté votre pipeline avec succès.
Utilisation d’une identité de build basée sur un projet pour les pipelines de build
Lors de l’exécution du pipeline, une identité est utilisée pour accéder aux ressources, telles que les dépôts, les connexions de service et les groupes de variables. Les pipelines peuvent utiliser deux types d’identités : au niveau du projet et au niveau de la collection. Le premier privilégie la sécurité, tandis que le second met l’accent sur la facilité d’utilisation. Pour plus d’informations, consultez Identités de build étendues et étendue d’autorisation de tâche.
Pour une sécurité renforcée, utilisez des identités au niveau du projet lorsque vous Exécutez vos pipelines. Ces identités ne peuvent accéder qu’aux ressources de leur projet associé, ce qui minimise le risque d’accès non autorisé par des acteurs malveillants.
Pour configurer votre pipeline afin qu’il utilise une identité au niveau du projet, activez le paramètre Limiter la portée d’autorisation de travail au projet actuel pour les pipelines non publiés.
Dans notre exemple en cours d’exécution, lorsque cette bascule est désactivée, le pipeline peut accéder à tous les dépôts de tous les projets. Lorsque la bascule est activée, seuls les dépôts et peuvent accéder aux ressources du projet, c’est-à-dire uniquement aux référentiels.
Si vous exécutez notre exemple de pipeline, lorsque vous activez le bouton bascule, le pipeline échoue et les journaux d’erreurs vous indiquent et
Pour résoudre les problèmes d’extraction, suivez les étapes décrites dans la section Processus de base de cet article.
De plus, vérifiez explicitement les dépôts de sous-modules, avant les dépôts qui les utilisent. Dans notre exemple, il s’agit du référentiel.
Si vous exécutez notre exemple de pipeline, il réussit.
Pour
améliorer encore la sécurité lorsque vous accédez à Azure Repos, envisagez d’activer l’option Protéger l’accès aux dépôts dans les pipelines YAML .
Supposons que le pipeline soit un pipeline YAML et que son code source YAML ressemble au code suivant.
Protéger l’accès aux dépôts dans les pipelines YAML
Azure DevOps fournit un mécanisme d’autorisations affiné pour les dépôts Azure Repos, sous la forme du paramètre Protéger l’accès aux dépôts dans les pipelines YAML. Ce paramètre permet à un pipeline YAML de demander explicitement l’autorisation d’accéder à tous les dépôts Azure Repos, quel que soit le projet auquel ils appartiennent. Pour plus d’informations, consultez la section Dépôts d’accès. Ce paramètre n’affecte pas le paiement d’autres types de dépôts, tels que ceux hébergés sur GitHub.
Dans notre exemple en cours d’exécution, lorsque ce paramètre est activé, le pipeline demande l’autorisation d’accéder au référentiel du projet et aux référentiels du projet.
Lorsque vous exécutez l’exemple de pipeline, il se génère de la même manière que l’exemple suivant.
Accordez l’autorisation à vos référentiels ou ressources de pipeline.
Votre pipeline s’exécute, mais échoue, car il ne peut pas extraire le référentiel en tant que sous-module de . Pour résoudre ce problème, vérifiez explicitement le , en ajoutant une étape, avant l’étape.
L’exemple de pipeline réussit.
Le code source final de notre pipeline YAML ressemble à l’extrait de code suivant.
Dépannage
Utilisez les solutions suivantes pour résoudre les problèmes qui se posent.
Vous utilisez git en ligne de commande pour extraire des dépôts dans le même organisation
Par exemple, vous utilisez . La commande échoue lorsque le paramètre Protéger l’accès aux référentiels dans les pipelines YAML est activé.
Pour résoudre le problème, extrayez le référentiel à l’aide de la commande .
Supposons
que l’un des dépôts que votre pipeline extrait utilise un autre dépôt (dans le même projet) en tant que sous-module, comme c’est le cas dans notre exemple pour les dépôts et . En savoir plus sur la façon d’extraire les sous-modules.
De plus, supposons que vous ayez donné à l’identité de build un accès en lecture à ce dépôt, mais que l’extraction du dépôt échoue toujours lors de l’extraction du sous-module.
Pour résoudre ce problème, vérifiez explicitement le , en ajoutant une étape avant celle-ci.
Dans les pipelines de build classiques, vous ne pouvez pas déclarer explicitement d’autres dépôts comme ressources. Pour extraire d’autres référentiels Azure Repos, ajoutez des tâches de ligne de commande avec des commandes, similaires à la commande suivante pour extraire le référentiel : .
Le paramètre Protéger l’accès aux dépôts dans les pipelines YAML
Le paramètre Protéger l’accès aux dépôts dans les pipelines YAML permet à un pipeline YAML de demander explicitement l’autorisation d’accéder à tous les dépôts Azure Repos, quel que soit le projet auquel ils appartiennent. Pour plus d’informations, consultez Jetons d’accès, Protéger l’accès aux référentiels dans les pipelines YAML.
Soyez prudent lorsque vous activez le paramètre Protéger l’accès aux référentiels dans les pipelines YAML. Si vous le faites, vos pipelines de build classiques ne peuvent accéder à aucun autre référentiel Azure DevOps, à l’exception de celui spécifié dans ses paramètres. Dans notre exemple de pipeline, vous obtenez une erreur et le message
de journal Si votre projet utilise à la fois des pipelines de build YAML et classiques, et que vos pipelines de build classiques extraient d’autres dépôts Azure DevOps au-delà de ceux spécifiés dans leurs paramètres, créez deux projets, l’un pour les pipelines YAML et l’autre pour les pipelines de build classiques. Ensuite, dans le projet de pipelines YAML, activez le paramètre souhaité.
Le paramètre Protéger l’accès aux dépôts dans les pipelines YAML ne s’applique pas aux dépôts hébergés sur d’autres services, tels que GitHub.
Le paramètre
Limiter l’étendue d’autorisation de travail au projet actuel pour les pipelines non mis en production remplace le paramètre Étendue d’autorisation de travail de build. Si vous activez le premier, votre pipeline s’exécute avec une identité basée sur le projet, même si votre étendue d’autorisation de tâche de génération spécifie Collection de projets .
Le
processus de sécurisation de l’accès aux dépôts pour les pipelines de mise en production est similaire à celui des pipelines de génération.
Pour illustrer les étapes à suivre, nous utilisons un exemple courant. Dans notre exemple, il existe un pipeline de mise en production nommé dans le projet. Supposons que le pipeline extrait le référentiel dans le projet, exécute une commande pour générer de la documentation publique, puis la publie sur un site Web. De plus, imaginez que le dépôt utilise le dépôt (dans le même projet) en tant que sous-module.
Utiliser une identité de build basée sur un projet pour les pipelines de mise en production classiques
Lorsqu’un pipeline s’exécute, il utilise une identité pour accéder à diverses ressources, telles que des dépôts, des connexions de service, des groupes de variables. Il existe deux types d’identités qu’un pipeline peut utiliser : une identité au niveau du projet et une niveau un. Le premier offre une meilleure sécurité. Ce dernier offre une facilité d’utilisation. En savoir plus sur les identités de build étendues et l’étendue de l’autorisation de tâche.
Nous vous recommandons d’utiliser des identités au niveau du projet pour exécuter vos pipelines. Par défaut, les identités au niveau du projet ne peuvent accéder qu’aux ressources du projet dont elles sont membres. L’utilisation de cette identité améliore la sécurité, car elle réduit l’accès obtenu par une personne malveillante lors du détournement de votre pipeline.
Pour que votre pipeline utilise une identité au niveau du projet, activez le paramètre Limiter la portée de l’autorisation de travail au projet actuel pour les pipelines de mise en production.
Dans notre exemple en cours d’exécution, lorsque cette bascule est désactivée, le pipeline de mise en production peut accéder à tous les dépôts de tous les projets, y compris le dépôt. Lorsque la bascule est activée, uniquement les ressources du projet sont accessibles, de sorte que le dépôt devient inaccessible.
Si vous exécutez notre exemple de pipeline, lorsque vous activez le bouton bascule, le pipeline échoue et les journaux vous indiquent
Pour résoudre ces problèmes, suivez les étapes de la section Processus de base de cet article.
Notre exemple de pipeline réussit.