Service Connections Custom dans Azure DevOps

Sommaire

Comment créer des Service Connections personnalisées dans Azure DevOps pour sécuriser et standardiser l’authentification vers des services externes, en les embarquant directement dans vos extensions.

Le Concept : Service Endpoint Types

Dans Azure DevOps, une Service Connection (ou Service Endpoint) est une ressource qui stocke les credentials pour se connecter à un service externe :

  • Azure Resource Manager
  • GitHub
  • Docker Registry
  • Kubernetes
  • APIs tierces

Azure DevOps fournit des types de connexion prédéfinis, mais vous pouvez créer vos propres types custom via des extensions.


Pourquoi des Service Connections Custom ?

Problème : Credentials en clair

Sans Service Connection, les équipes doivent :

  1. Stocker les credentials dans des variables de pipeline
  2. Copier-coller les secrets manuellement
  3. Gérer les rotations manuellement
  4. Risque de fuite : credentials visibles dans les logs

Solution : Service Connection Custom

Créer un type de connexion custom permet de :

  • Centraliser les credentials dans Azure DevOps (chiffrés)
  • Réutiliser la même connexion dans tous les pipelines
  • Gérer les rotations de manière centralisée
  • Sécuriser : pas de credentials en clair dans le code

Anatomie d’une Service Connection Custom

Une Service Connection custom se définit dans le manifest de l’extension :

{
  "id": "my-custom-connection",
  "type": "ms.vss-endpoint.service-endpoint-type",
  "targets": ["ms.vss-endpoint.endpoint-types"],
  "properties": {
    "name": "My Custom Service",
    "displayName": "Connexion vers Mon Service",
    "authenticationSchemes": [
      {
        "type": "ms.vss-endpoint.endpoint-auth-scheme-basic",
        "inputDescriptors": [
          {
            "id": "apiKey",
            "name": "API Key",
            "description": "Clé d'API du service",
            "inputMode": "passwordbox"
          },
          {
            "id": "endpoint",
            "name": "Endpoint URL",
            "description": "URL du service"
          }
        ]
      }
    ]
  }
}

Composants clés

  1. authenticationSchemes : Comment authentifier (Basic, Token, OAuth, etc.)
  2. inputDescriptors : Champs du formulaire (API key, URL, etc.)

Le Game Changer : Embarquer dans l’Extension

Au lieu de demander aux équipes de créer manuellement le type de connexion, vous pouvez l’embarquer directement dans votre extension de type Task.

Approche classique ❌

  1. Publier les scripts dans un repo Git
  2. Écrire une doc expliquant comment créer le Service Endpoint Type
  3. Chaque équipe doit créer manuellement le type
  4. Divergence : chaque équipe configure différemment

Approche Extension ✅

  1. Définir le Service Endpoint Type dans l’extension
  2. Publier l’extension sur le Marketplace
  3. Les équipes installent l’extension → le type est automatiquement disponible
  4. Standardisation : même définition partout

Résultat : Installation en 1 clic, zéro configuration manuelle.


Liaison avec les Tasks

Une fois le Service Endpoint Type défini, vous pouvez le lier à vos tasks.

Dans la Task

{
  "id": "my-task-id",
  "name": "My Custom Task",
  "inputs": [
    {
      "name": "serviceConnection",
      "type": "connectedService:my-custom-connection",
      "label": "Service Connection",
      "required": true,
      "helpMarkDown": "Sélectionnez la connexion vers le service"
    }
  ]
}

Avantage : L’utilisateur sélectionne la connexion dans un dropdown, pas besoin de copier-coller des credentials.


Avantages de cette Approche

Sécurité

  • Credentials chiffrés : Stockés dans Azure DevOps, pas dans le code
  • Pas de credentials en clair : Jamais visibles dans les logs
  • Rotation centralisée : Un seul endroit pour mettre à jour

UX

  • Sélection simple : Dropdown au lieu de copier-coller
  • Validation automatique : Test de connexion à la création
  • Réutilisation : Une connexion pour tous les pipelines

Standardisation

  • Même définition partout : Embarquée dans l’extension
  • Pas de configuration manuelle : Installation = disponibilité
  • Gouvernance : Contrôle centralisé

Intégration avec Auto-Renewal

Les Service Connections peuvent être intégrées avec des systèmes d’auto-renewal pour automatiser la rotation des secrets.

Principe :

Key Vault (rotation automatique)
Détection de la rotation
Service Connection (mise à jour via API Azure DevOps)
Pipelines (utilisent les nouveaux secrets sans interruption)

Résultat : Zéro intervention manuelle pour la rotation des secrets.


Cas d’Usage Typiques

Les Service Connections custom sont idéales pour :

  • APIs propriétaires : Services internes de l’entreprise
  • SaaS tiers : Services externes sans type prédéfini
  • Systèmes legacy : Intégration de systèmes existants
  • Multi-cloud : GCP, AWS avec patterns custom

Ce Qu’il Faut Retenir

  1. Service Connections custom = Types de connexion personnalisés
  2. Embarquées dans extension = Installation automatique (pas de config manuelle)
  3. Sécurité = Credentials chiffrés, auto-renewal possible
  4. Liaison avec tasks = connectedService:my-custom-connection
  5. Standardisation = Même définition pour toutes les équipes

Les Service Connections custom transforment l’authentification vers des services externes en passant de credentials en clair à un modèle sécurisé et standardisé.


Articles Connexes