Partager via


Démarrage rapide : Déployer un fichier Bicep en tant que principal de service

Dans ce guide de démarrage rapide, vous déployez un fichier Bicep qui contient des ressources Microsoft Graph à l’aide de l’authentification par application uniquement, également appelée authentification non interactive. Vous pouvez utiliser ce mécanisme pour l’intégration du déploiement sans contact dans les pipelines d’intégration continue et de livraison continue (CI/CD).

Pour déployer à l’aide d’une authentification déléguée ou interactive, consultez Créer un fichier Bicep avec des ressources Microsoft Graph.

Important

Microsoft Graph Bicep est actuellement en préversion. Pour connaître les conditions juridiques qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou plus généralement non encore en disponibilité générale, consultez l’Avenant aux conditions d’utilisation des préversions de Microsoft Azure.

Prérequis

  • Pour ce guide de démarrage rapide, utilisez le fichier Bicep créé dans Créer un fichier Bicep avec des ressources Microsoft Graph.
  • Vous êtes propriétaire d’un abonnement Azure.
  • Vous êtes administrateur de rôle privilégié, qui vous permet d’attribuer des rôles d’application Microsoft Graph à un principal de service.

Créer un principal de service et attribuer un rôle Azure

Quand vous êtes toujours connecté à Azure CLI à partir de la session précédente, créez le principal de service que vous utilisez ultérieurement pour déployer le fichier Bicep.

Dans ce guide de démarrage rapide, le principal de service est créé avec un mot de passe d’application, également appelé secret client. Attribuez également au principal de service le rôle Contributeur d’identité managée, délimité à un groupe de ressources :

Attention

Ce guide de démarrage rapide utilise un mot de passe d’application à des fins de simplicité et de test uniquement. N’utilisez pas dans les environnements de production.

# Create a resource group
az group create --name exampleRG --location eastus

# Create a service principal with the Managed Identity Contributor role. Replace {myServicePrincipalName}, {mySubscriptionId}, and {myResourceGroupName} with your values.
az ad sp create-for-rbac --name {myServicePrincipalName} --role "Managed Identity Contributor" --scopes "/subscriptions/{mySubscriptionId}/resourceGroups/{myResourceGroupName}"

Console de sortie :

{
  "appId": "myServicePrincipalId",
  "displayName": "myServicePrincipalName",
  "password": "myServicePrincipalPassword",
  "tenant": "myOrganizationTenantId"
}

La sortie inclut la password clé. Veillez à copier cette valeur, car elle ne pourra pas être récupérée.

Attribuer des autorisations Microsoft Graph au principal du service

Utilisez Microsoft Graph PowerShell pour accorder l’autorisation Group.ReadWrite.All application uniquement au principal du service. Le rôle Administrateur de rôle privilégié vous permet de vous accorder les autorisations AppRoleAssignment.ReadWrite.All et Application.Read.All pour effectuer cette opération.

Attention

Les applications qui ont reçu l’autorisation AppRoleAssignment.ReadWrite.All doivent uniquement être accessibles par les utilisateurs appropriés. Pour plus d’informations, consultez AppRoleAssignment.ReadWrite.All.

# Authenticate to Microsoft Graph
Connect-MgGraph -Scopes "AppRoleAssignment.ReadWrite.All","Application.Read.All"

# Find the service principal created to run the deployment
$mySP = Get-MgServicePrincipalByAppId -AppId "myServicePrincipalId"

# Find the service principal for Microsoft Graph
$graphSP = Get-MgServicePrincipalByAppId -AppId "00000003-0000-0000-c000-000000000000"

# Assign Group.ReadWrite.All app-only permission (id = 62a82d76-70ea-41e2-9197-370581804d09)
New-MgServicePrincipalAppRoleAssignedTo -ResourceId $graphSP.Id -ServicePrincipalId $graphSP.Id -PrincipalId $mySP.Id -AppRoleId "62a82d76-70ea-41e2-9197-370581804d09" 

Se connecter en tant que principal de service pour déployer le fichier Bicep

Connectez-vous en tant que principal de service créé précédemment.

# Sign in with the service principal created earlier. This sample uses the Bash console.
spID=$(az ad sp list --display-name myServicePrincipalName --query "[].{spID:appId}" --output tsv)
tenantID=$(az ad sp list --display-name myServicePrincipalName --query "[].{tenantID:appOwnerOrganizationId}" --output tsv)
echo "Using appId $spID in tenant $tenantID"

az login --service-principal --username $spID --password {paste your SP password here} --tenant $tenantID

Important

Si vous souhaitez éviter d'afficher votre mot de passe sur la console et que vous l'utilisez az login de manière interactive, utilisez la commande read -s dans bash.

read -sp "Azure password: " AZ_PASS && echo && az login --service-principal -u <app-id> -p $AZ_PASS --tenant <tenant>

Déployer le fichier Bicep

Déployez maintenant le fichier Bicep à l’aide de l’étendue de votre groupe de ressources.

az deployment group create --resource-group exampleRG --template-file main.bicep

Remarque

En raison des retards de réplication, l’ajout de l’identité de service managé (MSI) en tant que propriétaire du groupe Microsoft Entra peut entraîner l’échec du déploiement. Attendez un peu, puis déployez à nouveau le même fichier Bicep.

Nettoyer les ressources

Lorsque les ressources Azure ne sont plus nécessaires, utilisez le module Azure CLI ou Azure PowerShell pour supprimer le groupe de ressources que vous avez créé.

Remarque

Les groupes de ressources sont un concept Azure et n’ont aucun impact sur les ressources Microsoft Graph. Les ressources Microsoft Graph doivent être nettoyées avec une demande supplémentaire adressée à Microsoft Graph. Pour cela, vous pouvez utiliser Azure CLI ou Azure PowerShell, Microsoft Graph CLI ou Microsoft Graph PowerShell.

Les exemples suivants montrent les commandes permettant de supprimer la ressource Azure, puis les ressources Microsoft Graph à l’aide d’Azure CLI et d’Azure PowerShell.

# Delete the resource group
az group delete --name exampleRG

# Delete the Microsoft Graph group
az rest --method delete --url 'https://graph.microsoft.com/v1.0/groups%28uniqueName=%27myExampleGroup%27%29'

# Delete the client service principal
spID=$(az ad sp list --display-name myServicePrincipalName --query "[].{spID:id}" --output tsv)
az ad sp delete --id $spID