Skip to main content

Command Palette

Search for a command to run...

Configuration d'Entra ID avec Scaleway IAM

Voici un guide complet, étape par étape, basé sur la documentation Scaleway, pour configurer cette fédération d'identité (SSO).

Updated
9 min read
Configuration d'Entra ID avec Scaleway IAM

Le processus de configuration de l'authentification Entra ID (anciennement Azure AD) avec Scaleway se fait via le protocole SAML 2.0 (Security Assertion Markup Language) et nécessite d'échanger des informations entre les deux plateformes.

Cet article décrit étape par étape la configuration de l'authentification SAML 2.0 entre Scaleway et Microsoft Entra ID (anciennement Azure AD). Le processus comprend la mise en place de l'authentification unique (SSO) dans Scaleway, la configuration d'une application d'entreprise dans Entra ID et l'échange des URL et certificats nécessaires entre les plateformes. Il aborde également la gestion manuelle des utilisateurs dans Scaleway, les procédures de renouvellement des certificats et un script d'automatisation utilisant Azure DevOps pour le renouvellement régulier des certificats SAML. Les points clés à prendre en compte sont l'octroi d'autorisations adéquates pour Scaleway IAM, la gestion sécurisée des secrets et l'utilisation de l'API Scaleway IAM pour les mises à jour de configuration.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  1. Un compte Scaleway avec un accès à la Console et le statut de Propriétaire de l'Organisation ou des permissions IAM suffisantes.

  2. Un accès au portail Microsoft Azure (Entra ID) avec les droits nécessaires pour créer et configurer une application d'entreprise (SAML).

  3. Vous comprenez le flux de connexion SAML.

    du flux de travail single Sign-On (SSO).

Phase 1 : Démarrer la configuration dans Scaleway

Cette première étape consiste à récupérer les informations que vous devrez fournir à Entra ID pour créer le lien.

  1. Connectez-vous à la Console Scaleway: https://console.scaleway.com/

  2. Accédez à vos Paramètres de sécurité (via les Settings) :

    • Cliquez sur l'icône de votre compte en haut à droite.

    • Sélectionnez Organization Security (Sécurité) puis sur Organization authentication methods:

  3. Faites défiler jusqu'à la section Identity Federation (Fédération d'identité).

  4. Cliquez sur le bouton Set up SAML SSO (Configurer le SSO). Une fenêtre contextuelle (pop-up) apparaît.

  5. Copiez les deux URL fournies par Scaleway. Ces URL correspondent à :

    • Assertion Consumer Service (ACS) URL (URL du service consommateur d'assertion Scaleway)

        https://api.scaleway.com/iam/v1/saml/<Your_Organization_GUID>/login
      
    • Scaleway's Entity ID (ID d'entité Scaleway)

        https://iam.scaleway.com/saml/<GUID>
      

Gardez cette fenêtre ouverte, car vous y reviendrez à la Phase 3.

Phase 2 : Configuration de l'Application dans Microsoft Entra ID (Côté Fournisseur d'Identité - IdP)

Vous allez maintenant créer une application d'entreprise dans Entra ID en utilisant les URL de Scaleway copiées précédemment.

  1. Connectez-vous au portail Azure et naviguez vers Microsoft Entra ID, vous devez avoir un minima le rôle Application Administrator.
    - Si votre entreprise utilise PIM pensez à l’activer:

  2. Accédez à Applications d’entreprise.

  3. Cliquez sur Nouvelle application, puis Créer votre propre application.

  4. Donnez un nom à l'application (ex. : Scaleway SSO).

  5. Sélectionnez l'option Intégrer toute autre application que vous ne trouvez pas dans la galerie (non-galerie).

  6. Une fois l'application créée, naviguez vers Authentification unique (Single Sign-On) dans le menu de gauche.

  7. Sélectionnez SAML.

2.1. Configuration SAML de base (Section 1)

Dans la section Configuration SAML de base (Basic SAML Configuration) :

  1. Cliquez sur Modifier (Edit).

  2. Collez les URL de Scaleway dans les champs correspondants :

    • Identifier (Entity ID) : Collez l'ID d'entité Scaleway que vous avez copié au chapitre 1.

    • Reply URL (Assertion Consumer Service URL) : Collez l'ACS URL de Scaleway.

  3. Enregistrez la configuration.

2.2. Attributs et revendications (Section 2)

Vérifiez que les attributs et revendications (Attributes & Claims) sont correctement configurés. Scaleway a besoin de l'adresse e-mail de l'utilisateur.

  • Assurez-vous que la revendication requise (Unique User Identifier - Name ID) est définie sur l'adresse e-mail de l'utilisateur (par exemple, user.mail).

2.3. Récupération des informations Entra ID (Section 3)

Dans la section Certificat de signature SAML (SAML Signing Certificate), vous devez récupérer deux éléments et télécharger le certificat :

  1. Téléchargez le fichier “Federation Metadata XML” et sauvegarder le fichier .xml qui sera nécessaire dans le chapitre 3.

  2. Copiez les deux URL qui seront nécessaires dans Scaleway (elles se trouvent généralement dans la section Configurer <nom de votre application> ou URL de connexion et Identificateur Entité IdP) :

    • Login URL / Single Sign-On URL (URL de connexion)

    • Azure AD Identifier / Identity Provider's Entity ID (ID d'entité du Fournisseur d'identité)

Phase 3 : Finalisation de la connexion dans Scaleway

Revenez à la fenêtre contextuelle (pop-up) de Scaleway que vous avez laissée ouverte.

  1. Uploader le fichier de metadata au format XML:

  2. Cliquez sur Submit puis sur Confirm pour activer la fédération d’identité:

  3. La console Scaleway doit maintenant vous afficher ce rendu, avec un point d’attention sur l’expiration du certificat associé au SSO :

Phase 4 : Tester et Gérer

  • Test de connexion : Pour vérifier que le lien fonctionne, vous pouvez créer un membre dans Scaleway avec une adresse e-mail correspondant à un utilisateur que vous avez déjà affecté à l'application dans Entra ID, puis essayer de vous connecter avec ce membre via le SSO.

    • Se connecter en tant que membre d’une organisation:

  • Gestion des membres : Notez que la création et la suppression des utilisateurs (Membres) dans Scaleway ne sont pas automatiques via SAML. Vous devez gérer les Membres manuellement dans Scaleway IAM.

  • Renouvellement du certificat : Vous devrez régulièrement mettre à jour le certificat de signature dans Scaleway lorsque celui d'Entra ID expire. Cette option est disponible dans la section Identity Federation en cliquant sur Renew certificate (Renouveler le certificat).

Phase 5 : Automatisation du renouvellement

  • Vérification et Génération Conditionnelle : Vérifier la date d'expiration du certificat actuel. Si nous sommes à J-31 (ou moins), générer un nouveau certificat de signature.

  • Récupération du Plus Récent : Récupérer ensuite le certificat le plus récent (qu'il ait été généré par le pipeline ou par la gestion automatique d'Entra ID) pour l'envoyer à Scaleway.

Pipeline Azure DevOps : Renouvellement Automatique de Certificat SAML

trigger: none
pr: none

schedules:
# Déclenchement planifié : par exemple, chaque dimanche à 00:00 UTC
- cron: "0 0 * * 0" 
  displayName: 'Renouvellement Hebdomadaire Certificat SAML'
  branches:
    include:
    - main
  always: true

pool:
  vmImage: 'ubuntu-latest' # A modifier si vous avez des agents DevOps privés

variables:
  # Configuration de l'environnement (à remplacer par vos valeurs/secrets)
  SCW_ORG_ID: '$(ScalewayOrganizationId)' 
  ENTRA_APP_NAME: 'Scaleway SSO'
  # SCW_SECRET_KEY, <VOTRE_CONNEXION_SERVICE_AZURE> et SAML_CONNECTION_ID 
  # doivent être configurés comme des secrets dans Azure DevOps.
  SAML_CONNECTION_ID: 'idp-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee' 

# -------------------------------------------------------------------------
# --- Étape 1 : Vérification, Génération Conditionnelle & Récupération du Certificat Entra ID ---
# -------------------------------------------------------------------------
steps:
- task: AzureCLI@2
  displayName: '1. Vérif. & Génération du Certificat Entra ID'
  inputs:
    azureSubscription: '<VOTRE_CONNEXION_SERVICE_AZURE>' # Nom de la connexion de service Azure
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      #!/bin/bash
      set -e # Arrêter le script en cas d'erreur

      EXPIRY_THRESHOLD_DAYS=31 # Seuil de déclenchement pour la régénération (J-31)

      echo "--- 1. Recherche de l'ID de l'application Entra ID ---"
      APP_ID=$(az ad app list --display-name "$(ENTRA_APP_NAME)" --query "[0].id" -o tsv)

      if [ -z "$APP_ID" ]; then
          echo "##vso[task.logissue type=error]L'application $(ENTRA_APP_NAME) n'a pas été trouvée dans Entra ID."
          exit 1
      fi

      echo "--- 2. Vérification de la date d'expiration actuelle ---"

      # Récupération des détails du certificat SAML actuel (le plus proche de l'expiration)
      CERT_DETAILS=$(az ad app credential list --id "$APP_ID" \
          --query "[?usage=='Verify'] | min_by(@, &endDateTime)" -o json)

      CURRENT_EXPIRY_DATE=$(echo "$CERT_DETAILS" | jq -r '.endDateTime')

      # Calcul du temps restant en jours
      CURRENT_EXPIRY_TIMESTAMP=$(date -d "${CURRENT_EXPIRY_DATE%T*}" +%s)
      CURRENT_TIME_TIMESTAMP=$(date +%s)
      DAYS_UNTIL_EXPIRY=$(( (CURRENT_EXPIRY_TIMESTAMP - CURRENT_TIME_TIMESTAMP) / 86400 ))

      echo "Certificat actuel expire le : ${CURRENT_EXPIRY_DATE} (dans ${DAYS_UNTIL_EXPIRY} jours)."

      # 3. Génération conditionnelle du nouveau certificat
      if [ "$DAYS_UNTIL_EXPIRY" -le "$EXPIRY_THRESHOLD_DAYS" ]; then
          echo "⚠️ Le certificat expire dans moins de ${EXPIRY_THRESHOLD_DAYS} jours. Démarrage de la régénération..."

          # Ajoute un nouveau certificat de signature (clé publique) dans Entra ID
          az ad app credential add --id "$APP_ID" --usage Verify --key-type Symmetric

          echo "Nouveau certificat généré dans Entra ID. La période de chevauchement est créée."
      else
          echo "Le certificat est valable pour plus de ${EXPIRY_THRESHOLD_DAYS} jours. Aucune génération requise."
      fi

      echo "--- 4. Récupération du certificat le plus récent pour la mise à jour Scaleway ---"

      # On cible le certificat avec la date d'expiration la plus ÉLOIGNÉE (le futur certificat)
      CERT_VALUE=$(az ad app credential list --id "$APP_ID" \
        --query "[?usage=='Verify'] | max_by(@, &endDateTime).value" -o tsv)

      if [ -z "$CERT_VALUE" ]; then
          echo "##vso[task.logissue type=error]Aucun certificat de signature trouvé après la vérification/génération."
          exit 1
      fi

      # 5. Formater et stocker le certificat dans une variable secrète
      CERTIFICATE_BASE64="-----BEGIN CERTIFICATE-----\n$(echo "$CERT_VALUE" | fold -w 64)\n-----END CERTIFICATE-----"

      echo "Certificat Entra ID (le plus récent) récupéré et formaté avec succès."
      echo "##vso[task.setvariable variable=NEW_SCW_CERT;isSecret=true]$CERTIFICATE_BASE64"


# -------------------------------------------------------------------------
# --- Étape 2 : Mise à Jour du Certificat dans Scaleway via API ---
# -------------------------------------------------------------------------
- task: Bash@3
  displayName: '2. Mise à jour du certificat dans Scaleway'
  inputs:
    targetType: 'inline'
    script: |
      #!/bin/bash
      set -e

      # Récupération des secrets via les variables d'environnement du pipeline
      SCW_SECRET_KEY="$SCW_SECRET_KEY"
      NEW_CERT_BASE64="$NEW_SCW_CERT"
      SCW_ORG_ID="$(SCW_ORG_ID)"
      SAML_CONNECTION_ID="$(SAML_CONNECTION_ID)"

      if [ -z "$NEW_CERT_BASE64" ]; then
          echo "❌ ERREUR : Le certificat Entra ID est vide. Échec de la mise à jour Scaleway."
          exit 1
      fi

      echo "Démarrage de la mise à jour du certificat SAML dans Scaleway..."

      # Nettoyage du certificat pour la charge utile JSON
      CLEAN_CERT=$(echo "$NEW_CERT_BASE64" | sed '/^-----/d' | tr -d '\n' | tr -d ' ')

      # Appel API Scaleway IAM (v1alpha1) pour mettre à jour la connexion SAML
      API_URL="https://api.scaleway.com/iam/v1alpha1/organizations/${SCW_ORG_ID}/identity-providers/${SAML_CONNECTION_ID}"

      # Exécution de la requête PATCH
      curl -s -X PATCH "${API_URL}" \
           -H "X-Auth-Token: ${SCW_SECRET_KEY}" \
           -H "Content-Type: application/json" \
           -d "{\"certificate\": \"${CLEAN_CERT}\"}"

      if [ $? -eq 0 ]; then
          echo "✅ Mise à jour du certificat SAML dans Scaleway réussie."
      else
          echo "❌ Échec de l'appel API Scaleway. Vérifiez l'ID de connexion et les permissions IAM."
          exit 1
      fi

Explication des Modifications Clés

  1. Vérification de la Date (J-31) :

    • Nous utilisons az ad app credential list et l'outil jq (disponible sur l'agent Ubuntu) pour extraire la date d'expiration la plus proche (min_by(@, &endDateTime)).

    • Le calcul DAYS_UNTIL_EXPIRY compare cette date avec la date du jour (date +%s) pour déterminer s'il faut agir.

  2. Régénération via AZ CLI :

    • Si la condition DAYS_UNTIL_EXPIRY <= 31 est remplie, nous exécutons :

      Bash

        az ad app credential add --id "$APP_ID" --usage Verify --key-type Symmetric
      

      Cette commande ajoute un nouveau certificat de signature à l'application d'entreprise dans Entra ID, créant ainsi un nouveau certificat de plus longue durée qui sera automatiquement le "plus récent" (plus éloigné dans le temps).

  3. Ciblage du Plus Récent :

    • Qu'un nouveau certificat ait été généré ou non, l'étape finale utilise toujours :

      Bash

        max_by(@, &endDateTime).value
      

      Ceci garantit que nous sélectionnons toujours le certificat avec la date d'expiration la plus éloignée, qui sera soit le nouveau certificat que nous venons d'ajouter, soit le certificat de chevauchement qu'Entra ID a généré automatiquement. C'est le certificat que nous voulons pousser vers Scaleway.

Mise en garde et Sécurité

  1. Permissions Scaleway (IAM) : La clé d'accès Scaleway (SCW_ACCESS_KEY/SCW_SECRET_KEY) doit avoir une politique IAM lui permettant d'effectuer l'action de mise à jour sur les fournisseurs d'identité (par exemple, iam:IdentityProvider:Update).

  2. API Scaleway : L'API pour la gestion de la fédération d'identité est actuellement en version v1alpha1. Assurez-vous de consulter la documentation la plus récente de l'API IAM de Scaleway pour l'endpoint et le format de la requête PATCH exacts.

  3. Secrets : NE JAMAIS coder en dur les clés secrètes dans le pipeline YAML. Utilisez toujours des variables Secrètes d'Azure DevOps et, idéalement, Azure Key Vault pour stocker SCW_SECRET_KEY et la connexion de service Azure.