Aller au contenu principal

Sécurité et Permissions


1 - Modèle de sécurité


2 - Groupes de sécurité

2.1 Groupes par défaut (Projet)

GroupeDescription
Project AdministratorsAdmin complet du projet
Build AdministratorsGestion des pipelines
ContributorsCommit, PR, work items
ReadersLecture seule
Project Valid UsersAccès de base

2.2 Groupes Organisation

GroupeDescription
Project Collection AdministratorsSuper admin
Project Collection Build AdministratorsBuild admin org
Project Collection Valid UsersAccè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

NiveauDescription
AllowPermission accordée
DenyPermission refusée (prioritaire)
Not setHérite du parent

3.2 Permissions Repos

PermissionDescription
ReadLire le code
ContributePush sur branches autorisées
Create branchCréer des branches
Force pushForce push (déconseillé)
Manage permissionsGérer les permissions
Bypass policiesContourner les branch policies

3.3 Permissions Pipelines

PermissionDescription
ViewVoir les pipelines
Edit build pipelineModifier les builds
Queue buildsLancer des builds
Delete buildsSupprimer des builds
Stop buildsArrêter des builds
Manage build resourcesGérer les agents

4 - Service Connections

4.1 Types de connections

TypeUsage
Azure Resource ManagerDéployer sur Azure
Docker RegistryPush/pull images
KubernetesDéployer sur K8s
GitHubAccès aux repos GitHub
SSHConnexion SSH
GenericService 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

  1. Pipeline permissions : Limiter à certains pipelines
  2. Approvals : Exiger une approbation avant utilisation
  3. 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

PolicyDescription
Third-party app accessContrôler les apps OAuth
SSH authenticationActiver/désactiver SSH
Alternate credentialsActiver les Git credentials
External guest accessInviter 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


← Retour à la table des matières