Skip to main content

Command Palette

Search for a command to run...

Automatiser la création de souscriptions Azure

L'automatisation de la crĂ©ation des souscriptions Azure et l'une des premiĂšres Ă©tapes Ă  mettre en Ɠuvre voici comment y arriver avec un SPN.

Updated
‱6 min read
Automatiser la création de souscriptions Azure

L'objectif de cet article est de dĂ©tailler comment dĂ©lĂ©guer les privilĂšges d'un titulaire d'un compte EA Ă  un SPN, qui pourra ĂȘtre exploitĂ© pour crĂ©er de façon automatisĂ©e des souscriptions Azure.

Création d'un SPN dédié

Ce SPN sera dédié à la création de souscription de façon automatisée.
Pour le créer, rien de plus simple, utilisez une des ces deux possibilités:

$password = "S3çR€t?P@ssw0rd!!!" ## TODO: Update it with your secret đŸ€—
$credentials = New-Object Microsoft.Azure.Commands.ActiveDirectory.PSADPasswordCredential -Property @{StartDate=Get-Date; EndDate=Get-Date -Year 2024; Password=$password}
$sp = New-AzAdServicePrincipal -DisplayName "SubscriptionsGenerator" -PasswordCredential $credentials
az ad sp create-for-rbac --name "SubscriptionsGenerator"

Pour ma part, j'ai opté pour l'Azure CLI et j'ai obtenu ce résultat :

💡
Pensez Ă  sauvegarder ces informations prĂ©cieuses dans un coffre fort tel qu'un Azure Key Vault 🔐

Identifier les pré-requis

Pour ajouter le rÎle "Subscription Creator" à votre SPN vous avez besoin d'avoir un compte ayant le rÎle "Enterprise Administrator" ainsi que des informations associées à la facturation Azure:

  • RĂ©cupĂ©rer l'Object ID de l'Enterprise application associĂ©e Ă  votre SPN; vous avez plusieurs possibilitĂ©s :

    • En ligne de commande :

        az ad sp list --display-name "SubscriptionsGenerator" --query "[].id" -o tsv
      
    • Via le portail :

  • VĂ©rifier votre rĂŽle EA pour valider que vous ĂȘtes bien "Enterprise administrator", vous pouvez suivre ce lien pour le vĂ©rifier: Access control (IAM)

  • Le billing acount ID peut-ĂȘtre rĂ©cupĂ©rĂ© via ce lien : Billing account Overview

  • L'enrollment account ID se trouve dans la liste suivante : Accounts

Ajout du rĂŽle "Subscription Creator"

Autorisations pouvant ĂȘtre attribuĂ©es au SPN

Voici la liste des autorisations pouvant ĂȘtre attribuĂ©es Ă  notre SPN, pensez Ă  mettre de cĂŽtĂ© l'ID du rĂŽle qui sera utilisĂ© dans l'Ă©tape suivante.

RÎleActions autoriséesID du rÎle
EnrollmentReaderLes lecteurs d’inscription peuvent afficher les donnĂ©es dans les Ă©tendues d’inscription, de service et de compte. Les donnĂ©es contiennent des frais pour tous les abonnements dans les Ă©tendues, y compris entre les locataires. Permet d’afficher le solde du paiement anticipĂ© Azure (prĂ©cĂ©demment appelĂ© engagement financier) associĂ© Ă  l’inscription.24f8edb6-1668-4659-b5e2-40bb5f3a7d7e
EA purchaserAcheter des ordres de rĂ©servation et afficher les transactions de rĂ©servation. Il dispose de toutes les autorisations de EnrollmentReader, qui aura Ă  son tour toutes les autorisations de DepartmentReader. Il permet d’afficher l’utilisation et les frais pour tous les comptes et abonnements. Permet d’afficher le solde du paiement anticipĂ© Azure (prĂ©cĂ©demment appelĂ© engagement financier) associĂ© Ă  l’inscription.da6647fb-7651-49ee-be91-c43c4877f0c4
DepartmentReaderTĂ©lĂ©charger les dĂ©tails d’utilisation pour le service qu’il administre. Permet d’afficher l’utilisation et les frais associĂ©s Ă  son service.db609904-a47f-4794-9be8-9bd86fbffd8a
SubscriptionCreatorCrĂ©er des abonnements dans l’étendue de compte donnĂ©e.a0bcee42-bf30-4d1b-926a-48d21664ef71
  • Un rĂŽle EnrollmentReader peut ĂȘtre attribuĂ© Ă  un SPN uniquement par un utilisateur qui a le rĂŽle d’auteur d’inscription.
    Le rĂŽle EnrollmentReader attribuĂ© Ă  un SPN n’est pas affichĂ© dans le portail EA.
    Il est créé programmatiquement et ne sert qu’à des fins de programmation.

  • Un rĂŽle DepartmentReader peut ĂȘtre attribuĂ© Ă  un SPN uniquement par un utilisateur qui a le rĂŽle d’auteur d’inscription ou d’auteur de service.

  • Un rĂŽle SubscriptionCreator peut ĂȘtre attribuĂ© Ă  un SPN uniquement par un utilisateur qui est propriĂ©taire du compte d’inscription (administrateur EA).
    Le rîle n’apparaüt pas dans le portail EA.
    Il est créé programmatiquement et ne sert qu’à des fins de programmation.

  • Le rĂŽle EA purchaser n’apparaĂźt pas dans le portail EA.
    Il est créé programmatiquement et ne sert qu’à des fins de programmation.

Ajout de l'autorisation SubscriptionCreator

Pour ajouter l'autorisation à notre SPN nous allons utiliser l'API REST en utilisant le lien suivant, les informations listées dans les pré-requis ainsi que l'ID du rÎle SubscriptionCreator :

a0bcee42-bf30-4d1b-926a-48d21664ef71

💡
Pour cette étape ouvrez votre navigateur préféré en suivant cette URL: https://learn.microsoft.com/fr-fr/rest/api/billing/2019-10-01-preview/role-assignments/put?tabs=HTTP

Puis cliquez sur le bouton vert "Essayer" ou "Try it" :

Sur cette étape, connectez-vous avec votre compte EA Administrator pour suivre les pré-requis nécessaire pour l'ajout de droit à votre SPN.

En suivant les indications renseignez les informations, soit dans mon exemple :

  • billingAccountName: 60789023

  • billingRoleAssignmentName: a4525b46-f397-4ceb-b7cf-5b2ea04ff33e
    Pour ce paramĂȘtre il suffit de gĂ©nĂ©rer un GUID soit via ce site soit via du PowerShell:

      New-Guid
    

  • enrollmentAccountName: 12666

  • body:

{
  "properties": {
    "principalId": "ccd99ff9-5c10-4e5a-b925-dd99a9cc7c5f",
    "principalTenantId": "40d0d33d-94bb-4ec5-9333-c571e343b366",
    "roleDefinitionId": "/providers/Microsoft.Billing/billingAccounts/60789023/billingRoleDefinitions/a0bcee42-bf30-4d1b-926a-48d21664ef71"
  }
}

Le roleDefinitionId correspond Ă  votre Billing Account suivi du rĂŽle que vous souhaitez ajouter Ă  votre compte.

Au final, vous devriez avoir quelque chose proche de cette image:

Descendez en bas du formulaire puis "Exécuter" cet appel API:

En retour vous devez avoir une réponse HTTP 200 de ce type:

{
  "id": "/providers/Microsoft.Billing/billingAccounts/60789023/enrollmentAccounts/12666/billingRoleAssignments/a4525b46-f397-4ceb-b7cf-5b2ea04ff33e",
  "name": "a4525b46-f397-4ceb-b7cf-5b2ea04ff33e",
  "properties": {
    "createdOn": "2023-07-04T15:48:08.4278754+00:00",
    "createdByPrincipalTenantId": "40d0d33d-94bb-4ec5-9333-c571e343b366",
    "createdByPrincipalId": "a7d3be93-f32d-45f0-9529-eb8023b75e17",
    "createdByPrincipalPuid": "666320025A3E1393",
    "createdByUserEmailAddress": "blabla@smartcloudarchitect.fr",
    "principalId": "ccd99ff9-5c10-4e5a-b925-dd99a9cc7c5f",
    "principalTenantId": "40d0d33d-94bb-4ec5-9333-c571e343b366",
    "roleDefinitionId": "/providers/Microsoft.Billing/billingAccounts/60789023/enrollmentAccounts/12666/billingRoleDefinitions/a0bcee42-bf30-4d1b-926a-48d21664ef71",
    "scope": "/providers/Microsoft.Billing/billingAccounts/60789023/enrollmentAccounts/12666",
    "userAuthenticationType": "Organization"
  },
  "type": "Microsoft.Billing/billingRoleAssignments"
}

Création d'une souscription

Maintenant que notre compte SPN possÚde le droit de "SubscriptionCreator" nous allons voir comment l'exploiter au travers d'un pipeline Azure DevOps pour automatiser la création de souscription via cet outil.

Ajout du rĂŽle Contributeur sur le management group

Mon organisation Azure utilise les management groups, je vais donc ajouter à mon SPN le rÎle de contribution sur le niveau qui m'intéresse pour le déploiement de mes nouvelles souscriptions.

Pour ce faire, depuis le management group cliquez sur "Access control (IAM)":

Puis ajouter le rĂŽle "Contributor" Ă  votre SPN:

Au final, vous devriez avoir ce résultat:

Création de la souscription

Pour créer la souscription Azure il suffit de se connecter avec votre SPN depuis votre terminal préféré en utilisant cette commande:

az login --service-principal -u "<app-id>" -p "<secret>" --tenant "<tenant>"
💡
Astuce: pour ne pas faire apparaitre le secret utilisez cette commande bash: read -sp "Azure password: " AZ_PASS && echo && az login --service-principal -u "<app-id>" -p $AZ_PASS --tenant "<tenant>"
az account alias create --name "PoC" --billing-scope "/providers/Microsoft.Billing/billingAccounts/60789023/enrollmentAccounts/12666" --display-name "PoC Subscription" --workload "DevTest"

Automatisation via Azure DevOps

La premiÚre étape est de mettre en place le "service connection" en utilisant les informations de votre SPN et de votre contexte Azure au niveau du management group surlequel nous avons positionné le rÎle "Contributor".

Dans la partie "Service connections" de votre projet Azure DevOps, ajouter une nouvelle connexion en sélectionnant :

  1. Azure Resource Manager

  2. Service principal (manual)

  3. Management Group

Renseignez les informations demandées par rapport à votre contexte:

Une fois les éléments renseignés et validés vous devriez avoir quelque chose de proche de cette image:

Maintenant voici comment utiliser la commande du chapitre précédent via un pipeline Azure DevOps exploitant la connexion à notre management group:

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzureCLI@2
  inputs:
    azuresubscription: ManagementGroupServiceConnection
    scriptType: 'bash'
    ScriptType: InlineScript
    Inline: |
        az account alias create --name "PoC" --billing-scope "/providers/Microsoft.Billing/billingAccounts/60789023/enrollmentAccounts/12666" --display-name "PoC Subscription" --workload "DevTest"

Une fois exĂ©cutĂ©, vous pourrez trouver votre nouvelle souscription fraichement créée de façon automatisĂ©e 😍

Liens utiles:

More from this blog

A

Antoine LOIZEAU | MVP đŸ„‡ Senior Cloud Architect ☁ Expert DevSecOps 🚀

52 posts

Ayant eu de multiples expériences dans le monde du conseil, j'ai pu acquérir une expertise dans la conception et l'automatisation de solutions Cloud Native.

Automate Azure subscriptions creation with Azure DevOps