Compartir a través de


Inicio rápido: Implementación de un archivo de Bicep como entidad de servicio

En este inicio rápido, implementará un archivo de Bicep que contiene recursos de Microsoft Graph mediante la autenticación solo de aplicación, también conocida como autenticación no interactiva. Puede usar este mecanismo para la integración de la implementación sin intervención táctil en canalizaciones de integración continua y entrega continua (CI/CD).

Para implementar mediante autenticación delegada o interactiva, consulte Creación de un archivo de Bicep con recursos de Microsoft Graph.

Importante

Microsoft Graph Bicep está actualmente en versión preliminar. Consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure para conocer los términos legales que se aplican a las características de Azure que se encuentran en la versión beta, en versión preliminar o que todavía no se han publicado para que estén disponibles con carácter general.

Requisitos previos

  • Para este inicio rápido, use el archivo de Bicep creado en Creación de un archivo de Bicep con recursos de Microsoft Graph.
  • Es propietario de una suscripción de Azure.
  • Es un administrador de roles con privilegios, que le permite asignar roles de aplicación de Microsoft Graph a una entidad de servicio.

Creación de una entidad de servicio y asignación de un rol de Azure

Aunque todavía ha iniciado sesión en la CLI de Azure desde la sesión anterior, cree la entidad de servicio que use más adelante para implementar el archivo de Bicep.

En este inicio rápido, la entidad de servicio se crea con una contraseña de aplicación, también conocida como secreto de cliente. Además, asigne a la entidad de servicio el rol Colaborador de identidad administrada, con ámbito a un grupo de recursos:

Precaución

Este inicio rápido usa una contraseña de aplicación solo con fines de simplicidad y pruebas. No use en entornos de producción.

# 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}"

Consola de Salida:

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

La salida incluye la password clave. No olvide copiar este valor porque no se puede recuperar.

Asignación de permisos de Microsoft Graph a la entidad de servicio

Use PowerShell de Microsoft Graph para conceder el permiso de solo aplicación Group.ReadWrite.All a la entidad de servicio. El rol Administrador de roles con privilegios le permite concederse los permisos AppRoleAssignment.ReadWrite.All y Application.Read.All para realizar esta operación.

Precaución

Los usuarios adecuados solo deben tener acceso a las aplicaciones a las que se ha concedido el permiso AppRoleAssignment.ReadWrite.All . Para obtener más información, consulte 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" 

Inicio de sesión como entidad de servicio para implementar el archivo de Bicep

Inicie sesión como la entidad de servicio creada anteriormente.

# 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

Importante

Si quiere evitar que se muestre la contraseña en la consola y está usando az login de forma interactiva, utilice el comando read -s en bash.

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

Implementación del archivo de Bicep

Ahora, implemente el archivo de Bicep mediante el ámbito del grupo de recursos.

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

Nota:

Debido a retrasos en la replicación, agregar la identidad de servicio administrada (MSI) como propietario del grupo De Microsoft Entra puede provocar un error en la implementación. Espere un poco y vuelva a implementar el mismo archivo de Bicep.

Limpieza de recursos

Cuando los recursos de Azure ya no sean necesarios, use la CLI de Azure o el módulo de Azure PowerShell para eliminar el grupo de recursos que creó.

Nota:

Los grupos de recursos son un concepto de Azure y no tienen ningún impacto en los recursos de Microsoft Graph. Los recursos de Microsoft Graph deben limpiarse con una solicitud adicional a Microsoft Graph. Para ello, puede usar la CLI de Azure o Azure PowerShell, la CLI de Microsoft Graph o PowerShell de Microsoft Graph.

En los ejemplos siguientes se muestran comandos para eliminar primero el recurso de Azure y, después, los recursos de Microsoft Graph mediante la CLI de Azure y 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