Artículo Original

https://blogs.msdn.microsoft.com/premier_developer/2018/10/19/automating-creation-of-azure-service-principal-with-powershell/

Intruducion

El Administrador de aplicaciones de desarrollo Herald Gjura demuestra cómo usar PowerShell para automatizar la creación de Azure Service Principals.

Recientemente tuve que dar una charla sobre Azure service bus (ASB). Crear y volver a crear los diversos temas y suscripciones es un poco molesto, ya que hay muchas opciones y parámetros a considerar. La forma en que lo hago es crear una utilidad que simplemente crea y destruye toda la infraestructura que necesito para hablar con tiza.

Muchos dirían que la mejor manera de crear / recrear tales elementos es a través de las plantillas ARM json y todas ellas serían correctas. sin embargo, mi situación requería algo menos laborioso, por lo que mantuve mis hábitos de crear todo a través del código, a través del nuevo SDK de ARM (Microsoft.Azure.Management.ResourceManager.Fluent).

Esto vino con un nuevo desafío. Para que el Fluent ARM SDK funcione, se requiere la configuración de un Principal de servicio y una Aplicación AAD. Hasta ahora, siempre lo había hecho directamente a través del Portal de Azure.

Me preguntaba si existía una forma más scriptable? Tal vez a través de un script de PowerShell?

Construyendo el conjunto de herramientas

La publicación irá acompañada de los dos scripts de PS (Write-ServicePrincipal.ps1 y Read-ServicePrincipal.ps1). Solo unas pocas secciones de esos scripts se usan aquí para ilustración.

Me encanta PowerShell cuando se trata de tales tareas. ¡Llega al punto de lo que quieres hacer!

Me propuse crear dos scripts: uno que escribe y crea el principal de servicio y otro que lee.

Write-ServicePrincipal.ps1

Inicialmente, decidí dividir el proceso y construir algunas funciones de PowerShell para ayudar con todos los pasos necesarios para esto:

iniciar sesión

Necesitaba una función / script de inicio de sesión para iniciar sesión en Azure. Tengo una cuenta de Microsoft (@ live.com) y también una cuenta de empresa (@ microsoft.com), así como dos suscripciones de Azure (personal / MSDN y empresa de mi empleador).

Necesitaba cierta flexibilidad en qué cuenta usar y qué suscripción implementar, según las circunstancias. PowerShell, tiene dos formas distintas de hacer el inicio de sesión desde PowerShell dependiendo del tipo de cuenta utilizada.

Cre este fragmento de código en la parte superior del script de PowerShell:

Es bastante simple: solicita credenciales si es una cuenta @live y también proporciona una solicitud en línea de nombre de usuario / contraseña para la cuenta corporativa. Esto proporciona flexibilidad para elegir la cuenta con la que quiero trabajar.

get-subscription

Una vez que inicie sesión, debo llamar y obtener la suscripción a la que queremos que asista este director de servicio. Sin esto, PowerShell lo colocará en la suscripción predeterminada, que puede no ser la deseada.

sp2

get-resourcegroup, get-password, get-displayname, get-domainname

A continuación se incluyen algunas funciones que facilitarán la recopilación de información necesaria para la creación de Azure service principal. Esto también es simple. Cuando se llama con un parámetro vacío, estas funciones le pedirán que ingrese la información, si se le llama con un parámetro de cadena, usará esa cadena como entrada.

get-serviceprincipal, remove-aad-application

Las siguientes son dos funciones de validación: una es para ver si el principal del servicio ya existe y otra para eliminar la aplicación AAD si existe.

La siguiente en línea es la función que realiza todo el trabajo de crear el Principal de Servicio y la aplicación AAD asociada.

create-serviceprincipal

Y finalmente, los scripts en sí mismos que ponen a todos a trabajar.

Esta sección del script recopila los valores de entrada necesarios, crea el Servicio Principal y la Aplicación AAD, e imprime los valores que necesitaría ingresar en mi software para funcionar.

En la sección "VALORES DE ENTRADA", actualmente le pedirá todos los valores. Puede descomentar las líneas y proporcionar sus valores codificados si no desea que se le solicite.

Una vez que se crea esto, los valores como TenantId, SubscriptionId, ClientId y Password, generalmente son todo lo que necesita para que una aplicación funcione.

Función de bonificación

get-tenant-id-from-domainname

¿Alguna vez se ha preguntado: "¿Cómo obtengo una identificación del tenant, si solo conozco el nombre de dominio de un dominio administrado por Azure AD?". ¡Es más sencillo de lo que piensas!

Puntos finales

El objetivo de este artículo es proporcionar una solución simple y programable sobre cómo crear un Servicio Principal y una Aplicación AAD.

Los dos scripts adjuntos (uno para crear y leer el principal del servicio) se pueden copiar y pegar donde sea que necesite dicha funcionalidad, ya sea en su canal de CI / CD o en el código ocasional que está escribiendo.

Para mí, fueron útiles en la implementación de un espacio de nombres de Bus de servicio con todos los temas y suscripciones, sin seguir el camino de una plantilla json ARM compleja (soy más una persona de código).

Y cómo hice tal implementación, y todas las nuevas características de Azure Service Bus, son el tema de la próxima publicación del blog.

Descarga del Script

AQUÍ