Sécurité et Permissions
1 - Modèle de sécurité
2 - Groupes de sécurité
2.1 Groupes par défaut (Projet)
| Groupe | Description |
|---|---|
| Project Administrators | Admin complet du projet |
| Build Administrators | Gestion des pipelines |
| Contributors | Commit, PR, work items |
| Readers | Lecture seule |
| Project Valid Users | Accès de base |
2.2 Groupes Organisation
| Groupe | Description |
|---|---|
| Project Collection Administrators | Super admin |
| Project Collection Build Administrators | Build admin org |
| Project Collection Valid Users | Accès organisation |
2.3 Créer un groupe personnalisé
# Via CLI
az devops security group create \
--name "DevOps Engineers" \
--description "DevOps team members" \
--project MonProjet
3 - Permissions
3.1 Niveaux de permissions
| Niveau | Description |
|---|---|
| Allow | Permission accordée |
| Deny | Permission refusée (prioritaire) |
| Not set | Hérite du parent |
3.2 Permissions Repos
| Permission | Description |
|---|---|
| Read | Lire le code |
| Contribute | Push sur branches autorisées |
| Create branch | Créer des branches |
| Force push | Force push (déconseillé) |
| Manage permissions | Gérer les permissions |
| Bypass policies | Contourner les branch policies |
3.3 Permissions Pipelines
| Permission | Description |
|---|---|
| View | Voir les pipelines |
| Edit build pipeline | Modifier les builds |
| Queue builds | Lancer des builds |
| Delete builds | Supprimer des builds |
| Stop builds | Arrêter des builds |
| Manage build resources | Gérer les agents |
4 - Service Connections
4.1 Types de connections
| Type | Usage |
|---|---|
| Azure Resource Manager | Déployer sur Azure |
| Docker Registry | Push/pull images |
| Kubernetes | Déployer sur K8s |
| GitHub | Accès aux repos GitHub |
| SSH | Connexion SSH |
| Generic | Service personnalisé |
4.2 Créer une Service Connection Azure
# Via CLI
az devops service-endpoint azurerm create \
--name "Azure-Production" \
--azure-rm-subscription-id "subscription-id" \
--azure-rm-subscription-name "My Subscription" \
--azure-rm-tenant-id "tenant-id" \
--azure-rm-service-principal-id "sp-id" \
--azure-rm-service-principal-key "sp-key"
4.3 Sécuriser les Service Connections
- Pipeline permissions : Limiter à certains pipelines
- Approvals : Exiger une approbation avant utilisation
- Branch control : Limiter aux branches protégées
5 - Variable Groups et Secrets
5.1 Créer un Variable Group
# Via CLI
az pipelines variable-group create \
--name "Production-Secrets" \
--variables API_URL=https://api.prod.com \
--authorize true
5.2 Variables secrètes
# Ajouter une variable secrète
az pipelines variable-group variable create \
--group-id 123 \
--name "API_KEY" \
--value "secret-value" \
--secret true
5.3 Azure Key Vault Integration
variables:
- group: 'my-variable-group'
- group: 'keyvault-secrets' # Linked to Key Vault
# Dans le pipeline YAML
steps:
- task: AzureKeyVault@2
inputs:
azureSubscription: 'Azure-Connection'
KeyVaultName: 'my-keyvault'
SecretsFilter: '*'
RunAsPreJob: true
6 - Policies d'organisation
6.1 Policies disponibles
| Policy | Description |
|---|---|
| Third-party app access | Contrôler les apps OAuth |
| SSH authentication | Activer/désactiver SSH |
| Alternate credentials | Activer les Git credentials |
| External guest access | Inviter des externes |
6.2 Audit Logs
Azure DevOps enregistre toutes les actions :
# Voir les logs d'audit
az devops audit query \
--organization https://dev.azure.com/MonOrg \
--start-time 2024-01-01T00:00:00Z \
--end-time 2024-01-31T23:59:59Z
Événements audités :
- Modifications de permissions
- Création/suppression de ressources
- Modifications de pipelines
- Accès aux secrets
7 - Bonnes pratiques sécurité
7.1 Checklist
- Utiliser les groupes plutôt que les permissions individuelles
- Appliquer le principe du moindre privilège
- Protéger les branches principales
- Sécuriser les Service Connections
- Stocker les secrets dans Key Vault
- Activer l'audit logging
- Reviewer régulièrement les permissions
- Utiliser des Service Principals avec rotation
7.2 Branch Policies recommandées
# Pour la branche main
Policies:
- Require pull request: true
- Minimum reviewers: 2
- Linked work items: true
- Comment resolution: true
- Build validation: required
- Limit merge types: Squash only
7.3 Pipeline Security
# Limiter les permissions du pipeline
jobs:
- job: Build
pool:
vmImage: 'ubuntu-latest'
# Ne pas autoriser les scripts à accéder aux secrets
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
8 - Compliance et gouvernance
8.1 Project Settings recommandés
- Désactiver les classic pipelines
- Exiger YAML pour tous les pipelines
- Limiter les parallel jobs
- Configurer les retention policies
8.2 Protection des environnements
# Environment avec approvals
- stage: DeployProd
jobs:
- deployment: Deploy
environment: 'Production' # Requiert approbation
strategy:
runOnce:
deploy:
steps:
- script: echo Deploying
Résumé
Dans ce chapitre, nous avons appris :
- Le modèle de sécurité Azure DevOps
- Les groupes et permissions
- Les Service Connections et leur sécurisation
- Les Variable Groups et secrets
- Les policies d'organisation
- Les bonnes pratiques de sécurité
Prochaine étape
Dans le prochain chapitre, nous verrons les Bonnes pratiques globales.
→ Chapitre suivant : Bonnes pratiques