Compartir a través de


Creación de una entidad de servicio de Azure con Azure PowerShell

Advertencia

El módulo AzureRM de PowerShell ha quedado en desuso oficialmente a partir del 29 de febrero de 2024. Se recomienda a los usuarios migrar de AzureRM al módulo Az PowerShell para seguir recibiendo soporte técnico y actualizaciones.

Aunque el módulo AzureRM puede seguir funcionando, ya no recibirá mantenimiento ni soporte técnico, lo que significa que su uso continuado queda a discreción y riesgo del usuario. Consulte nuestros recursos de migración para ver una guía sobre la transición al módulo Az.

Si planea administrar una aplicación o servicio con Azure PowerShell, debe ejecutarla en una entidad de servicio de Microsoft Entra, en lugar de con sus propias credenciales. Este artículo le ayudará a crear a una entidad de seguridad con Azure PowerShell.

Nota

Las entidades de servicio también se pueden crear desde Azure Portal. Para más información, lea Uso del portal para crear una aplicación de Azure Active Directory y una entidad de servicio con acceso a los recursos.

¿Qué es una "entidad de servicio"?

Una entidad de servicio de Azure es una identidad de seguridad que usan las aplicaciones, los servicios y las herramientas de automatización creadas por el usuario para acceder a recursos específicos de Azure. Se puede considerar una "identidad de usuario" (nombre de usuario y una contraseña o certificado) con un rol específico y permisos estrechamente controlados. A diferencia de una identidad de usuario general, una entidad de servicio solo necesita poder realizar acciones específicas. Mejora la seguridad si solo se le concede el nivel de permiso mínimo necesario para realizar sus tareas de administración.

Comprobación del nivel de permiso

En primer lugar, debe tener permisos suficientes tanto en su suscripción de Azure como en Microsoft Entra ID. Debe poder crear una aplicación en Active Directory y asignar un rol a la entidad de servicio.

El portal es la forma más sencilla de comprobar si su cuenta tiene los permisos adecuados. Consulte Comprobación de los permisos necesarios en el portal.

Creación de una entidad de servicio para la aplicación

Una vez que haya iniciado sesión en su cuenta de Azure, puede crear la entidad de servicio. Debe realizar alguno de los siguientes métodos para identificar la aplicación implementada:

  • El nombre único de la aplicación implementada (como "MyDemoWebApp" en los ejemplos siguientes), o bien
  • el identificador de la aplicación, el GUID único asociado a la aplicación, el servicio o el objeto implementados

Obtención de información acerca de una aplicación

El cmdlet Get-AzureRmADApplication puede usarse para detectar información acerca de la aplicación.

Get-AzureRmADApplication -DisplayNameStartWith MyDemoWebApp
DisplayName             : MyDemoWebApp
ObjectId                : 775f64cd-0ec8-4b9b-b69a-8b8946022d9f
IdentifierUris          : {http://MyDemoWebApp}
HomePage                : http://www.contoso.com
Type                    : Application
ApplicationId           : 00001111-aaaa-2222-bbbb-3333cccc4444
AvailableToOtherTenants : False
AppPermissions          :
ReplyUrls               : {}

Creación de una entidad de servicio para la aplicación

El cmdlet New-AzureRmADServicePrincipal se usa para crear la entidad de servicio.

$servicePrincipal = New-AzureRmADServicePrincipal -ApplicationId 00001111-aaaa-2222-bbbb-3333cccc4444
Secret                : System.Security.SecureString
ServicePrincipalNames : {00001111-aaaa-2222-bbbb-3333cccc4444, http://MyDemoWebApp}
ApplicationId         : 00001111-aaaa-2222-bbbb-3333cccc4444
DisplayName           : MyDemoWebApp
Id                    : 698138e7-d7b6-4738-a866-b4e3081a69e4
AdfsId                :
Type                  : ServicePrincipal

Desde aquí, puede o bien usar directamente la propiedad $servicePrincipal.Secret en Connect-AzureRmAccount (consulte "Inicio de sesión con la entidad de servicio", a continuación) o puede convertir esta cadena SecureString en una cadena de texto sin formato para su uso posterior:

$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($servicePrincipal.Secret)
$password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)

Inicio de sesión mediante la entidad de servicio

Ya puede iniciar sesión como la nueva entidad de servicio en la aplicación con los valores de appId y password generados automáticamente. También necesita el identificador del inquilino para el servicio principal. El identificador de inquilino aparece al iniciar sesión en Azure con sus credenciales personales. Para iniciar sesión con una entidad de servicio, utilice los siguientes comandos:

$cred = New-Object System.Management.Automation.PSCredential ("00001111-aaaa-2222-bbbb-3333cccc4444", $servicePrincipal.Secret)
Connect-AzureRmAccount -Credential $cred -ServicePrincipal -TenantId 00000000-0000-0000-0000-000000000000

Después de un inicio de sesión correcto, verá una salida como:

Environment           : AzureCloud
Account               : 00001111-aaaa-2222-bbbb-3333cccc4444
TenantId              : 00000000-0000-0000-0000-000000000000
SubscriptionId        :
SubscriptionName      :
CurrentStorageAccount :

¡Enhorabuena! Puede usar estas credenciales para ejecutar la aplicación. A continuación, debe ajustar los permisos de la entidad de servicio.

Administración de roles

Nota

El control de acceso basado en roles (RBAC) de Azure es un modelo para definir y administrar roles tanto para usuario como para las entidades de servicio. Los roles conjuntos de permisos asociados a ellos, que son los que determinan los recursos que una entidad puede administrar o leer, a los que puede acceder o en los que puede escribir. Para más información acerca de RBAC y roles, consulte Roles integrados para el control de acceso basado en roles de Azure.

Azure PowerShell proporciona los siguientes cmdlets para administrar las asignaciones de roles:

El rol predeterminado de una entidad de servicio es colaborador. Dado su gran cantidad de permisos, es posible que no sea la mejor opción para las interacciones de una aplicación con los servicios de Azure. El rol de lector es más restrictivo y es una buena elección para el acceso de solo lectura. En Azure Portal encontrará más información acerca de los permisos específicos de los roles o podrá crear permisos personalizados.

En este ejemplo, agregue el rol de lector al ejemplo anterior y elimine el de colaborador:

New-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Reader
RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/818892f2-d075-46a1-a3a2-3a4e1a12fcd5
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG
DisplayName        : MyDemoWebApp
SignInName         :
RoleDefinitionName : Reader
RoleDefinitionId   : b24988ac-6180-42a0-ab88-20f7382dd24c
ObjectId           : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType         : ServicePrincipal
Remove-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Contributor

Para ver los roles actuales asignados:

Get-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/0906bbd8-9982-4c03-8dae-aeaae8b13f9e
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG
DisplayName        : MyDemoWebApp
SignInName         :
RoleDefinitionName : Reader
RoleDefinitionId   : acdd72a7-3385-48ef-bd42-f606fba81ae7
ObjectId           : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType         : ServicePrincipal

Otros cmdlets de Azure PowerShell para administración de roles:

Cambio de las credenciales de la entidad de seguridad

A nivel de seguridad se recomienda revisar los permisos y actualizar las contraseñas periódicamente. Si lo desea, también puede administrar y modificar las credenciales de seguridad cuando la aplicación cambie. Por ejemplo, podemos cambiar la contraseña de la entidad de servicio mediante la creación de una contraseña nueva y la eliminación de la antigua.

Adición de una nueva contraseña para la entidad de servicio

New-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
Secret    : System.Security.SecureString
StartDate : 11/16/2018 12:38:23 AM
EndDate   : 11/16/2019 12:38:23 AM
KeyId     : 00001111-aaaa-2222-bbbb-3333cccc4444
Type      : Password

Obtención de una lista de credenciales para la entidad de servicio

Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate           EndDate             KeyId                                Type
---------           -------             -----                                ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 00001111-aaaa-2222-bbbb-3333cccc4444 Password
5/5/2016 4:55:27 PM 5/5/2017 4:55:27 PM ca9d4846-4972-4c70-b6f5-a4effa60b9bc Password

Eliminación de una contraseña antigua de la entidad de servicio

Remove-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp -KeyId ca9d4846-4972-4c70-b6f5-a4effa60b9bc
Confirm
Are you sure you want to remove credential with keyId '00001111-aaaa-2222-bbbb-3333cccc4444' for
service principal objectId '698138e7-d7b6-4738-a866-b4e3081a69e4'.
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): Y

Comprobación de la lista de credenciales para la entidad de servicio

Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate           EndDate             KeyId                                Type
---------           -------             -----                                ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 00001111-aaaa-2222-bbbb-3333cccc4444 Password

Obtención de información acerca de la entidad de servicio

$svcprincipal = Get-AzureRmADServicePrincipal -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
$svcprincipal | Select-Object -Property *
ServicePrincipalNames : {http://MyDemoWebApp, 00001111-aaaa-2222-bbbb-3333cccc4444}
ApplicationId         : 00001111-aaaa-2222-bbbb-3333cccc4444
DisplayName           : MyDemoWebApp
Id                    : 698138e7-d7b6-4738-a866-b4e3081a69e4
Type                  : ServicePrincipal