Concesión de acceso a recursos de Azure Stack Hub para una aplicación
Una aplicación que implementa o configura recursos a través de Azure Resource Manager se debe representar con su propia identidad, conocida como "entidad de seguridad". Al igual que los usuarios están representados por entidades de seguridad de usuario, las aplicaciones están representadas por entidades de servicio.
La identidad también se puede usar para delegar solo los permisos necesarios en el usuario o la aplicación. Por ejemplo, una aplicación de administración de configuración podría usar Azure Resource Manager para hacer un inventario de los recursos de Azure. La aplicación se registraría en el directorio y, a continuación, se agregaría al rol "lector" en el ámbito adecuado, lo que limitaría la aplicación al acceso de solo lectura.
Información general
Al igual que los usuarios, las aplicaciones deben presentar credenciales durante la autenticación, lo que requiere dos elementos:
- Un Id. de aplicación, que a veces se conoce como “Id. de cliente”. Un GUID que identifica de manera única el registro de la aplicación en el inquilino de Active Directory.
- Un secreto. Puedes generar una cadena de secreto de cliente (similar a una contraseña), o especificar una huella digital de certificado X509 (que usa su clave pública).
Estos son los motivos por los que es preferible ejecutar una aplicación con su propia identidad a hacerlo con la identidad del usuario:
- Credenciales más seguras: las aplicaciones pueden iniciar sesión con un certificado X509, en lugar de con una contraseña o secreto compartidos de texto.
- Se pueden asignar permisos más restrictivos a una aplicación. Normalmente, estos permisos están restringidos solo a aquello que la aplicación debe hacer, lo que se conoce como principio de privilegio mínimo.
- Las credenciales y los permisos no cambian con tanta frecuencia en una aplicación como las credenciales de usuario. Por ejemplo, cuando cambian las responsabilidades del usuario, los requisitos de contraseña necesitan un cambio o cuando un usuario abandona la empresa.
Primero debe crear un nuevo registro de aplicación en su directorio, que crea un objeto de entidad de servicio asociado para representar la identidad de la aplicación en el directorio. El proceso de registro varía según el directorio que eligió para su instancia de Azure Stack Hub:
- Microsoft Entra ID: Microsoft Entra ID es un servicio multiinquilino, basado en la nube, directorio e administración de identidades. Puede usar el identificador de Entra de Microsoft con una instancia de Azure Stack Hub conectada. Los ejemplos que se presentan más adelante usarán Azure Portal para el registro de aplicaciones de Microsoft Entra.
- Servicios de federación de Active Directory (AD FS) AD FS proporciona funcionalidades de federación de identidades simplificada y protegida e inicio de sesión único web (SSO). Puede usar AD FS con instancias de Azure Stack Hub tanto conectadas como desconectadas. En los ejemplos que se muestran más adelante se usará PowerShell para Azure Stack Hub para el registro de aplicaciones de AD FS.
Después de registrar la aplicación, aprenderá a asignarla a un rol, lo que limitará el acceso a los recursos.
Administrar una aplicación de Microsoft Entra
Si implementó Azure Stack Hub con el identificador de Entra de Microsoft como servicio de administración de identidades, creará y administrará identidades para aplicaciones igual que para Azure. En esta sección se muestra cómo seguir estos pasos mediante Azure Portal. Antes de comenzar, revise Permisos necesarios para registrar una aplicación para asegurarse de tener permisos suficientes para registrar una aplicación.
Creación de un registro de aplicación que usa una credencial de secreto de cliente
En esta sección, registrará la aplicación en el inquilino de Microsoft Entra mediante Azure Portal. En el ejemplo siguiente, se especifica una credencial de secreto de cliente, pero el portal también admite credenciales basadas en certificados X509.
Inicie sesión en Azure Portal con su cuenta de Azure.
Seleccione Microsoft Entra ID> Registros de aplicaciones> Nuevo registro.
Proporcione un nombre para la aplicación.
Seleccione los tipos de cuenta admitidos adecuados.
En URI de redirección, seleccione Web como tipo de aplicación y, de manera opcional, especifique un identificador URI de redirección si así lo requiere la aplicación.
Después de configurar los valores, seleccione Registrar. Se crea el registro de aplicación y se muestra la página Información general.
Copie el Id. de aplicación para usarlo en el código de la aplicación. Este nombre también se conoce como “id. de cliente”.
Para generar un secreto de cliente, seleccione la página Certificados y secretos. Seleccione Nuevo secreto de cliente.
Proporcione una descripción para el secreto y una duración en Expira.
Cuando haya terminado, seleccione Agregar.
Se muestra el valor del secreto. Copie y guarde este valor en otra ubicación, ya que no podrá recuperarlo más adelante. Para iniciar sesión, especifique el secreto con el identificador de la aplicación en la aplicación cliente.
Vaya a la sección Asignación de un rol para aprender a establecer el control de acceso basado en rol para la identidad de la aplicación.
Artículos adicionales de administración de aplicaciones de Microsoft Entra
Consulte los siguientes artículos de Azure para más información sobre cómo administrar aplicaciones de Microsoft Entra:
- Más detalles sobre el registro de una aplicación de Microsoft Entra, incluido cómo crear un registro de aplicación que use una credencial de certificado.
- Eliminación de un registro de aplicaciones.
- Restauración o eliminación de un registro de aplicaciones eliminado recientemente.
Administración de una aplicación de AD FS
Si ha implementado Azure Stack Hub con AD FS como servicio de administración de identidades, debe usar PowerShell para administrar la identidad de su aplicación. En los siguientes ejemplos se muestra tanto un certificado X509 como una credencial de secreto de cliente.
Los scripts se deben ejecutar en una consola de PowerShell con privilegios elevados ("Ejecutar como administrador"), que abre otra sesión en una VM que hospeda un punto de conexión con privilegios para la instancia de Azure Stack Hub. Una vez establecida la sesión de punto de conexión con privilegios, se usan cmdlets adicionales para crear y administrar el registro de la aplicación. Para más información sobre el punto de conexión con privilegios, consulte Uso del punto de conexión con privilegios en Azure Stack Hub.
Creación de un registro de aplicación que usa una credencial de certificado
Al crear una credencial de certificado, deben cumplirse los siguientes requisitos:
- Para producción, el certificado se debe emitir desde una entidad de certificación interna o pública. Si se usa una autoridad pública, es preciso incluirla en la imagen del sistema operativo base como parte del programa de entidades de certificación raíz de confianza de Microsoft (Microsoft Trusted Root Certificate Program). Para ver la lista completa, consulte Lista de participantes: Programa de certificados raíz de confianza de Microsoft. Más adelante, en la sección Actualización de credenciales de certificado, se mostrará un ejemplo de creación de un certificado de prueba "autofirmado".
- El proveedor de servicios criptográficos debe especificarse como un proveedor de claves del proveedor de servicios criptográficos (CSP) heredado de Microsoft.
- El certificado debe estar en formato PFX, ya que se requieren claves públicas y privadas. Los servidores de Windows utilizan archivos .pfx que contienen el archivo de claves públicas (archivo de certificado TLS/SSL) y el archivo de claves privadas asociado.
- La infraestructura de Azure Stack Hub debe tener acceso de red a la ubicación de la lista de revocación de certificados (CRL) de la entidad de certificación publicada en el certificado. Esta lista de revocación de certificados debe ser un punto de conexión de HTTP.
Cuando tenga un certificado, utilice el script de PowerShell siguiente para registrar la aplicación e iniciar sesión con la identidad de la aplicación. Sustituya sus propios valores por los marcadores de posición siguientes:
Marcador de posición | Descripción | Ejemplo |
---|---|---|
<PepVM> | Nombre de la VM del extremo de conexión con privilegios en la instancia de Azure Stack Hub. | "AzS-ERCS01" |
<YourCertificateLocation> | Ubicación de su certificado X509 en el almacén de certificados local. | "Cert:\CurrentUser\My\AB5A8A3533CC7AA2025BF05120117E06DE407B34" |
<YourAppName> | Nombre descriptivo del registro de la nueva aplicación. | "Mi herramienta de administración" |
Abra una sesión de Windows PowerShell con privilegios y ejecute el script siguiente:
# Sign in to PowerShell interactively, using credentials that have access to the VM running the Privileged Endpoint (typically <domain>\cloudadmin) $Creds = Get-Credential # Create a PSSession to the Privileged Endpoint VM $Session = New-PSSession -ComputerName "<PepVm>" -ConfigurationName PrivilegedEndpoint -Credential $Creds -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US) # To use a managed certificate from the certificate store, use the Get-Item cmdlet. # To use a certificate file, use Get-Certificate for a .cer file, or Get-PfxCertificate for a .pfx file. # To use a test certificate, use the New-SelfSignedCertificate cmdlet # See https://learn.microsoft.com/powershell/module/pki/new-selfsignedcertificate for usage details, including using the -Provider parameter # $Cert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" -Subject "CN=<YourAppName>" -KeySpec KeyExchange $Cert = Get-Item "<YourCertificateLocation>" # Use the privileged endpoint to create the new app registration $SpObject = Invoke-Command -Session $Session -ScriptBlock {New-GraphApplication -Name "<YourAppName>" -ClientCertificates $using:cert} $AzureStackInfo = Invoke-Command -Session $Session -ScriptBlock {Get-AzureStackStampInformation} $Session | Remove-PSSession # Using the stamp info for your Azure Stack Hub instance, populate the following variables: # - Az endpoint used for Azure Resource Manager operations # - Audience for acquiring an OAuth token used to access Graph API # - GUID of the directory tenant $ArmEndpoint = $AzureStackInfo.TenantExternalEndpoints.TenantResourceManager $GraphAudience = "https://graph." + $AzureStackInfo.ExternalDomainFQDN + "/" $TenantID = $AzureStackInfo.AADTenantID # Register and set an Az environment that targets your Azure Stack Hub instance Add-AzEnvironment -Name "AzureStackUser" -ArmEndpoint $ArmEndpoint # Sign in using the new service principal $SpSignin = Connect-AzAccount -Environment "AzureStackUser" ` -ServicePrincipal ` -CertificateThumbprint $SpObject.Thumbprint ` -ApplicationId $SpObject.ClientId ` -TenantId $TenantID # Output the service principal details $SpObject
Una vez que se complete el script, mostrará la información de registro de aplicación.
ClientID
yThumbprint
se autentican y, posteriormente, se autorizan para el acceso a los recursos que administra Azure Resource Manager.ApplicationIdentifier : S-1-5-21-1512385356-3796245103-1243299919-1356 ClientId : 00001111-aaaa-2222-bbbb-3333cccc4444 Thumbprint : 30202C11BE6864437B64CE36C8D988442082A0F1 ApplicationName : Azurestack-MyApp-c30febe7-1311-4fd8-9077-3d869db28342 ClientSecret : PSComputerName : azs-ercs01 RunspaceId : a78c76bb-8cae-4db4-a45a-c1420613e01b
Mantenga la sesión de la consola de PowerShell abierta, ya que la usará con el valor ApplicationIdentifier
en la sección siguiente.
Actualización de credenciales de certificado
Ahora que ha registrado la aplicación, en esta sección verá cómo hacer lo siguiente:
- Crear un nuevo certificado X509 autofirmado para pruebas.
- Actualice las credenciales de la aplicación mediante la actualización de su propiedad Thumbprint para que coincida con el nuevo certificado.
Actualice la credencial de certificado con PowerShell y sustituya sus propios valores para los marcadores de posición siguientes:
Marcador de posición | Descripción | Ejemplo |
---|---|---|
<PepVM> | Nombre de la VM del extremo de conexión con privilegios en la instancia de Azure Stack Hub. | "AzS-ERCS01" |
<YourAppName> | Nombre descriptivo del registro de la nueva aplicación. | "Mi herramienta de administración" |
<YourCertificateLocation> | Ubicación de su certificado X509 en el almacén de certificados local. | "Cert:\CurrentUser\My\AB5A8A3533CC7AA2025BF05120117E06DE407B34" |
<AppIdentifier> | Identificador asignado al registro de la aplicación. | "S-1-5-21-1512385356-3796245103-1243299919-1356" |
Con la sesión de Windows PowerShell con privilegios elevados, ejecute los siguientes cmdlets:
# Create a PSSession to the PrivilegedEndpoint VM $Session = New-PSSession -ComputerName "<PepVM>" -ConfigurationName PrivilegedEndpoint -Credential $Creds -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US) # Create a self-signed certificate for testing purposes, using the New-SelfSignedCertificate cmdlet # See https://learn.microsoft.com/powershell/module/pki/new-selfsignedcertificate for usage details, including using the -Provider parameter $NewCert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" -Subject "CN=<YourAppName>" -KeySpec KeyExchange # In production, use Get-Item to retrieve a managed certificate from the certificate store. # Alteratively, use Get-Certificate for a .cer file, or Get-PfxCertificate for a .pfx file. # $Cert = Get-Item "<YourCertificateLocation>" # Use the privileged endpoint to update the certificate thumbprint, used by <AppIdentifier> $SpObject = Invoke-Command -Session $Session -ScriptBlock {Set-GraphApplication -ApplicationIdentifier "<AppIdentifier>" -ClientCertificates $using:NewCert} $Session | Remove-PSSession # Output the updated service principal details $SpObject
Cuando el script finaliza, muestra la información de registro de la aplicación actualizada, incluido el valor de huella digital del nuevo certificado autofirmado.
ApplicationIdentifier : S-1-5-21-1512385356-3796245103-1243299919-1356 ClientId : Thumbprint : AF22EE716909041055A01FE6C6F5C5CDE78948E9 ApplicationName : Azurestack-MyApp-c30febe7-1311-4fd8-9077-3d869db28342 ClientSecret : PSComputerName : azs-ercs01 RunspaceId : a580f894-8f9b-40ee-aa10-77d4d142b4e5
Creación de un registro de aplicación que usa una credencial de secreto de cliente
Advertencia
Es menos seguro utilizar un secreto de cliente que una credencial de certificado X509. No solo es el mecanismo de autenticación menos seguro, si no que además suele requerir la inserción del secreto en el código fuente de la aplicación cliente. Por lo tanto, para las aplicaciones de producción, se recomienda encarecidamente usar una credencial de certificado.
Ahora cree otro registro de aplicación, pero esta vez especifique una credencial de secreto de cliente. A diferencia de una credencial de certificado, el directorio tiene la capacidad de generar una credencial de secreto de cliente. En lugar de especificar el secreto de cliente, use el conmutador -GenerateClientSecret
para solicitar que se genere. Sustituya sus propios valores por los marcadores de posición siguientes:
Marcador de posición | Descripción | Ejemplo |
---|---|---|
<PepVM> | Nombre de la VM del extremo de conexión con privilegios en la instancia de Azure Stack Hub. | "AzS-ERCS01" |
<YourAppName> | Nombre descriptivo del registro de la nueva aplicación. | "Mi herramienta de administración" |
Abra una sesión de Windows PowerShell con privilegios elevados y ejecute los siguientes cmdlets:
# Sign in to PowerShell interactively, using credentials that have access to the VM running the Privileged Endpoint (typically <domain>\cloudadmin) $Creds = Get-Credential # Create a PSSession to the Privileged Endpoint VM $Session = New-PSSession -ComputerName "<PepVM>" -ConfigurationName PrivilegedEndpoint -Credential $Creds -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US) # Use the privileged endpoint to create the new app registration $SpObject = Invoke-Command -Session $Session -ScriptBlock {New-GraphApplication -Name "<YourAppName>" -GenerateClientSecret} $AzureStackInfo = Invoke-Command -Session $Session -ScriptBlock {Get-AzureStackStampInformation} $Session | Remove-PSSession # Using the stamp info for your Azure Stack Hub instance, populate the following variables: # - Az endpoint used for Azure Resource Manager operations # - Audience for acquiring an OAuth token used to access Graph API # - GUID of the directory tenant $ArmEndpoint = $AzureStackInfo.TenantExternalEndpoints.TenantResourceManager $GraphAudience = "https://graph." + $AzureStackInfo.ExternalDomainFQDN + "/" $TenantID = $AzureStackInfo.AADTenantID # Register and set an Az environment that targets your Azure Stack Hub instance Add-AzEnvironment -Name "AzureStackUser" -ArmEndpoint $ArmEndpoint # Sign in using the new service principal $securePassword = $SpObject.ClientSecret | ConvertTo-SecureString -AsPlainText -Force $credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $SpObject.ClientId, $securePassword $SpSignin = Connect-AzAccount -Environment "AzureStackUser" -ServicePrincipal -Credential $credential -TenantId $TenantID # Output the service principal details $SpObject
Una vez que se complete el script, mostrará la información de registro de aplicación.
ClientID
yClientSecret
se autentican y, posteriormente, se autorizan para el acceso a los recursos que administra Azure Resource Manager.ApplicationIdentifier : S-1-5-21-1634563105-1224503876-2692824315-2623 ClientId : 11112222-bbbb-3333-cccc-4444dddd5555 Thumbprint : ApplicationName : Azurestack-YourApp-6967581b-497e-4f5a-87b5-0c8d01a9f146 ClientSecret : 6RUWLRoBw3EebBLgaWGiowCkoko5_j_ujIPjA8dS PSComputerName : azs-ercs01 RunspaceId : 286daaa1-c9a6-4176-a1a8-03f543f90998
Mantenga la sesión de la consola de PowerShell abierta, ya que la usará con el valor ApplicationIdentifier
en la sección siguiente.
Actualización de una credencial de secreto de cliente
Actualice la credencial de secreto de cliente con PowerShell, mediante el parámetro ResetClientSecret, que cambia inmediatamente el secreto de cliente. Sustituya sus propios valores por los marcadores de posición siguientes:
Marcador de posición | Descripción | Ejemplo |
---|---|---|
<PepVM> | Nombre de la VM del extremo de conexión con privilegios en la instancia de Azure Stack Hub. | "AzS-ERCS01" |
<AppIdentifier> | Identificador asignado al registro de la aplicación. | "S-1-5-21-1634563105-1224503876-2692824315-2623" |
Con la sesión de Windows PowerShell con privilegios elevados, ejecute los siguientes cmdlets:
# Create a PSSession to the PrivilegedEndpoint VM $Session = New-PSSession -ComputerName "<PepVM>" -ConfigurationName PrivilegedEndpoint -Credential $Creds -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US) # Use the privileged endpoint to update the client secret, used by <AppIdentifier> $SpObject = Invoke-Command -Session $Session -ScriptBlock {Set-GraphApplication -ApplicationIdentifier "<AppIdentifier>" -ResetClientSecret} $Session | Remove-PSSession # Output the updated service principal details $SpObject
Cuando el script finaliza, muestra la información de registro de la aplicación actualizada, incluido el secreto de cliente recién generado.
ApplicationIdentifier : S-1-5-21-1634563105-1224503876-2692824315-2623 ClientId : 11112222-bbbb-3333-cccc-4444dddd5555 Thumbprint : ApplicationName : Azurestack-YourApp-6967581b-497e-4f5a-87b5-0c8d01a9f146 ClientSecret : MKUNzeL6PwmlhWdHB59c25WDDZlJ1A6IWzwgv_Kn PSComputerName : azs-ercs01 RunspaceId : 6ed9f903-f1be-44e3-9fef-e7e0e3f48564
Eliminación de un registro de aplicación
Ahora verá cómo quitar un registro de aplicación del directorio mediante PowerShell.
Sustituya sus propios valores por los marcadores de posición siguientes:
Marcador de posición | Descripción | Ejemplo |
---|---|---|
<PepVM> | Nombre de la VM del extremo de conexión con privilegios en la instancia de Azure Stack Hub. | "AzS-ERCS01" |
<AppIdentifier> | Identificador asignado al registro de la aplicación. | "S-1-5-21-1634563105-1224503876-2692824315-2623" |
# Sign in to PowerShell interactively, using credentials that have access to the VM running the Privileged Endpoint (typically <domain>\cloudadmin)
$Creds = Get-Credential
# Create a PSSession to the PrivilegedEndpoint VM
$Session = New-PSSession -ComputerName "<PepVM>" -ConfigurationName PrivilegedEndpoint -Credential $Creds -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
# OPTIONAL: Use the privileged endpoint to get a list of applications registered in AD FS
$AppList = Invoke-Command -Session $Session -ScriptBlock {Get-GraphApplication}
# Use the privileged endpoint to remove application <AppIdentifier>
Invoke-Command -Session $Session -ScriptBlock {Remove-GraphApplication -ApplicationIdentifier "<AppIdentifier>"}
No se devolverá ninguna salida de la llamada al cmdlet Remove-GraphApplication en el punto de conexión con privilegios, pero verá la salida de confirmación textual en la consola durante la ejecución del cmdlet:
VERBOSE: Deleting graph application with identifier S-1-5-21-1634563105-1224503876-2692824315-2623.
VERBOSE: Remove-GraphApplication : BEGIN on AZS-ADFS01 on ADFSGraphEndpoint
VERBOSE: Application with identifier S-1-5-21-1634563105-1224503876-2692824315-2623 was deleted.
VERBOSE: Remove-GraphApplication : END on AZS-ADFS01 under ADFSGraphEndpoint configuration
Asignar un rol
El acceso a los recursos de Azure para usuarios y aplicaciones se autoriza a través del control de acceso basado en roles (RBAC). Para permitir que una aplicación acceda a los recursos de la suscripción, es preciso asignar su entidad de servicio a un rol para un recurso concreto. Primero decida qué rol representa los permisos adecuados para la aplicación. Para obtener más información sobre los roles disponibles, vea Roles integrados en los recursos de Azure.
El tipo de recurso que se elija también establece el ámbito de acceso de la aplicación. Puede establecer el ámbito de acceso en el nivel de la suscripción, el grupo de recursos o el recurso. Los permisos se heredan en los niveles inferiores del ámbito. Por ejemplo, el hecho de agregar una aplicación al rol "Lector" para un grupo de recursos significa que esta puede leer el grupo de recursos y los recursos que contiene.
Inicie sesión en el portal adecuado, en función del directorio que especificó durante la instalación de Azure Stack Hub (azure Portal para el identificador de Entra de Microsoft o el portal de usuarios de Azure Stack Hub para AD FS, por ejemplo). En este ejemplo, se muestra un usuario que ha iniciado sesión en el portal de usuarios de Azure Stack Hub.
Nota:
Para agregar asignaciones de rol para un recurso determinado, su cuenta de usuario debe pertenecer a un rol que declare el permiso
Microsoft.Authorization/roleAssignments/write
. Por ejemplo, los roles integrados Propietario o Administrador de acceso de usuario.Vaya al recurso al que desea permitir que la aplicación acceda. En este ejemplo, asigne la aplicación a un rol en el ámbito de la suscripción. Para ello, seleccione Suscripciones y, después, una suscripción específica. En su lugar, también puede seleccionar un grupo de recursos o un recurso específico, como una máquina virtual.
Seleccione la página Access Control (IAM) página, que es universal en todos los recursos compatibles con RBAC.
Seleccione + Agregar.
En Rol, seleccione el rol que quiere asignar a la aplicación.
En Seleccionar, busque la aplicación con un nombre de aplicación completo o parcial. Durante el registro, el nombre de la aplicación se genera como Azurestack-YourAppName-GUID><<>. Por ejemplo, si usó un nombre de aplicación de App2 y GUID 2bbe67d8-3fdb-4b62-87cf-cc41dd4344ff durante la creación, el nombre completo sería Azurestack-App2-2bbe67d8-3fdb-4b62-87cf-cc41dd4344ff. Puede buscar la cadena exacta o una parte de esta, como Azurestack o Azurestack App2.
Cuando encuentre la aplicación, selecciónela y se mostrará en Miembros seleccionados.
Haga clic en Guardar para finalizar la asignación del rol.
Cuando termine, la aplicación se mostrará en la lista de entidades de seguridad asignadas para el ámbito actual y el rol especificado.
Ahora que ha asignado una identidad a la aplicación y que la ha autorizado para que accedan recursos, puede habilitar el script o el código para iniciar sesión y acceder de forma segura a los recursos de Azure Stack Hub.
Pasos siguientes
Administración de permisos de usuario
Documentación de Microsoft Entra
Servicios de federación de Active Directory