Предоставление приложению доступа к ресурсам Azure Stack Hub
Приложение, которое развертывает или настраивает ресурсы с помощью Azure Resource Manager, должно быть представлено собственным удостоверением, известным как субъект безопасности. Так же, как пользователь представлен субъектом-пользователем, приложение представлено субъектом-службой.
Удостоверение также можно использовать для делегирования только необходимых разрешений пользователю или приложению. Например, приложение управления конфигурацией может использовать Azure Resource Manager для инвентаризации ресурсов Azure. Приложение будет зарегистрировано в каталоге, а затем добавлено в роль читателя в соответствующей области, ограничив приложение доступом только для чтения.
Обзор
Как и пользователь, приложение должно представлять учетные данные во время проверки подлинности, для чего требуется два элемента:
- Идентификатор приложения, который иногда называют идентификатором клиента. Это глобальный уникальный идентификатор (GUID), однозначно определяющий регистрацию приложения в клиенте Active Directory.
- Секрет. Можно создать строку секрета клиента (аналогично паролю) или указать отпечаток сертификата X509 (который использует его открытый ключ).
Запускать приложение с собственным идентификатором предпочтительнее по сравнению с запуском с идентификатором пользователя по следующим причинам:
- Более надежные учетные данные — приложение может выполнять вход с помощью сертификата X.509 вместо общего текстового секрета или пароля.
- Более ограниченные разрешения — их можно назначить приложению. Как правило, приложение получает именно те разрешения, которые требуются для его работы. Это называется принцип минимальных привилегий.
- Разрешения и учетные данные субъекта-службы не требуется изменять так часто, как учетные данные пользователя. Например, когда изменяются обязанности пользователя или пользователь покидает организацию, требования к паролю определяют изменение.
Сначала необходимо создать регистрацию приложения в каталоге, в результате чего создается связанный объект субъекта-службы, представляющий удостоверение приложения в каталоге. Процесс регистрации зависит от каталога, выбранного для экземпляра Azure Stack Hub:
- Идентификатор Microsoft Entra: Идентификатор Microsoft Entra — это мультитенантная, облачная, служба управления каталогами и удостоверениями. Вы можете использовать идентификатор Microsoft Entra с подключенным экземпляром Azure Stack Hub. Приведенные далее примеры будут использовать портал Azure для регистрации приложения Microsoft Entra.
- службы федерации Active Directory (AD FS) (AD FS): AD FS предоставляет упрощенные, защищенные федерации удостоверений и возможности единого входа в Интернет. AD FS можно использовать с подключенными и отключенными экземплярами Azure Stack Hub. Приведенные ниже примеры будут использовать Azure Stack Hub PowerShell для регистрации приложений AD FS.
После регистрации приложения вы узнаете, как назначить его роли, ограничив доступ к ресурсам.
Управление приложением Microsoft Entra
Если вы развернули Azure Stack Hub с идентификатором Microsoft Entra в качестве службы управления удостоверениями, вы создаете удостоверения для приложений так же, как и для Azure. В этом разделе показано, как выполнить действия с помощью портал Azure. Просмотрите разрешения, необходимые для регистрации приложения перед началом работы, чтобы убедиться, что у вас есть достаточные разрешения для регистрации приложения.
Создание регистрации приложения, использующего учетные данные секрета клиента
В этом разделе описано, как зарегистрировать приложение в клиенте Microsoft Entra с помощью портал Azure. В следующем примере вы указываете учетные данные секрета клиента, но портал также поддерживает учетные данные на основе сертификата X509.
Войдите на портал Azure с помощью учетной записи Azure.
Выберите идентификатор Microsoft Entra Регистрация приложений>> New.
Укажите имя для приложения.
Выберите необходимые поддерживаемые типы учетных записей.
В разделе URI перенаправления выберите Веб как тип приложения и (необязательно) укажите URI перенаправления, если это необходимо приложению.
Выбрав нужные значения, нажмите кнопку Зарегистрировать. После этого создается регистрация приложения и открывается страница Обзор.
Скопируйте идентификатор приложения и вставьте его в код приложения. Эта строка также называется идентификатором клиента.
Чтобы создать секрет клиента, перейдите на страницу Сертификаты и секреты. Щелкните Создать секрет клиента.
Введите описание секрета и срок его действия.
Когда все будет готово, нажмите Добавить.
После этого отобразится значение секрета. Скопируйте и сохраните его в другом месте, так как позже вы не сможете получить его. Чтобы войти, вы предоставляете секрет с идентификатором приложения в клиентском приложении.
Перейдите к назначению роли, чтобы узнать, как установить управление доступом на основе ролей для удостоверения приложения.
Дополнительные статьи по управлению приложениями Microsoft Entra
Дополнительные сведения об управлении приложениями Microsoft Entra см. в следующих статьях Azure.
- Дополнительные сведения о регистрации приложения Microsoft Entra, включая создание регистрации приложения, использующего учетные данные сертификата.
- Удаление регистрации приложения.
- Как восстановить или удалить недавно удаленную регистрацию приложения.
Управление приложением AD FS
Если вы развернули Azure Stack Hub с помощью AD FS в качестве службы управления удостоверениями, настроить идентификатор приложения необходимо с использованием PowerShell. В следующих примерах показаны как сертификат X509, так и учетные данные секрета клиента.
Сценарии необходимо выполнять в консоли PowerShell, открытой с повышенными привилегиями ("Запуск от имени администратора"). Это также открывает другой сеанс на виртуальной машине, на котором размещена привилегированная конечная точка экземпляра Azure Stack Hub. После установки сеанса привилегированной конечной точки дополнительные командлеты используются для создания регистрации приложения и управления ими. Дополнительные сведения о привилегированной конечной точке см. в статье Использование привилегированной конечной точки в Azure Stack Hub.
Создание регистрации приложения, использующего учетные данные сертификата
При создании учетных данных сертификата должны выполняться следующие требования.
- Сертификаты должны быть выданы внутренним или общедоступным центром сертификации. Используя общедоступный центр сертификации, необходимо включить центр в базовый образ операционной системы в рамках программы по использованию доверенного корневого центра сертификации Майкрософт. Полный список см. в разделе "Список участников " Доверенные корневые программы Майкрософт". Пример создания самозаверяющего тестового сертификата также будет показан позже в ходе обновления учетных данных сертификата.
- Поставщик служб шифрования должен быть указан как устаревший поставщик ключей поставщика служб шифрования (CSP) Майкрософт.
- Сертификат должен быть PFX-файлом, так как и открытый, и закрытый ключи являются обязательными. Серверы Windows используют PFX-файлы, содержащие файлы открытого ключа (файл сертификата TLS/SSL) и связанные файлы закрытого ключа.
- У инфраструктуры Azure Stack Hub должен быть сетевой доступ к расположению списка отзыва сертификатов (CRL) центра сертификации, опубликованного в сертификате. Этот список отзыва сертификатов должен быть конечной точкой HTTP.
После получения сертификата используйте приведенный ниже сценарий PowerShell, чтобы зарегистрировать приложение и войти с помощью удостоверения приложения. Вместо приведенных ниже заполнителей используйте собственные значения.
Заполнитель | Описание: | Пример |
---|---|---|
<PepVM> | Имя виртуальной машины с привилегированной конечной точкой в экземпляре Azure Stack Hub. | AzS-ERCS01 |
<YourCertificateLocation> | Расположение сертификата X509 в локальном хранилище сертификатов. | Cert:\CurrentUser\My\AB5A8A3533CC7AA2025BF05120117E06DE407B34 |
<YourAppName> | Описательное имя новой регистрации приложения. | Инструмент управления |
Откройте сеанс Windows PowerShell с повышенными правами и выполните следующий скрипт.
# 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
После завершения скрипта отображаются сведения о регистрации приложения.
ClientID
иThumbprint
проходят проверку подлинности и затем получают доступ к ресурсам, управляемым 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
Не закрывайте сеанс в консоли PowerShell, так как в следующем разделе он будет использоваться со значением ApplicationIdentifier
.
Обновление учетных данных сертификата
Теперь, когда вы зарегистрировали приложение, в этом разделе показано, как:
- Создать самозаверяющий сертификат X509 для тестирования.
- Обновите учетные данные приложения, обновив его свойство Отпечатка , чтобы соответствовать новому сертификату.
Обновите учетные данные на основе сертификата с помощью PowerShell, подставив собственные значения приведенных ниже заполнителей.
Заполнитель | Описание: | Пример |
---|---|---|
<PepVM> | Имя виртуальной машины с привилегированной конечной точкой в экземпляре Azure Stack Hub. | AzS-ERCS01 |
<YourAppName> | Описательное имя новой регистрации приложения. | Инструмент управления |
<YourCertificateLocation> | Расположение сертификата X509 в локальном хранилище сертификатов. | Cert:\CurrentUser\My\AB5A8A3533CC7AA2025BF05120117E06DE407B34 |
<AppIdentifier> | Идентификатор, присвоенный регистрации приложения. | S-1-5-21-1512385356-3796245103-1243299919-1356 |
В сеансе Windows PowerShell, открытом с повышенными правами, выполните следующие командлеты:
# 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
После выполнения сценария отобразятся сведения об обновленной регистрации приложения, включая значение отпечатка нового самозаверяющего сертификата.
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
Создание регистрации приложения, использующего учетные данные секрета клиента
Предупреждение
Учетные данные на основе секрета клиента менее безопасны, чем на основе сертификата X509. Дело не только в менее безопасном механизме проверки подлинности. При использовании этого типа учетных данных секрет необходимо внедрять в исходный код клиентского приложения. Учитывая вышесказанное, для рабочих приложений советуем использовать учетные данные на основе сертификата.
Теперь необходимо создать другую регистрацию приложения, но в этот раз укажите учетные данные на основе секрета клиента. В отличие от учетных данных на основе сертификата каталог поддерживает создание учетных данных на основе секрета клиента. Вместо указания секрета клиента вы с помощью параметра -GenerateClientSecret
можете создать запрос на их создание. Вместо приведенных ниже заполнителей используйте собственные значения.
Заполнитель | Описание: | Пример |
---|---|---|
<PepVM> | Имя виртуальной машины с привилегированной конечной точкой в экземпляре Azure Stack Hub. | AzS-ERCS01 |
<YourAppName> | Описательное имя новой регистрации приложения. | Инструмент управления |
Откройте сеанс Windows PowerShell с повышенными правами и выполните следующие командлеты.
# 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
После завершения скрипта отображаются сведения о регистрации приложения.
ClientID
иClientSecret
проходят проверку подлинности и затем получают доступ к ресурсам, управляемым 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
Не закрывайте сеанс в консоли PowerShell, так как в следующем разделе он будет использоваться со значением ApplicationIdentifier
.
Обновление учетных данных секрета клиента
Обновите учетные данные на основе секрета клиента с помощью параметра ResetClientSecret в PowerShell, который немедленно изменяет секрет клиента. Вместо приведенных ниже заполнителей используйте собственные значения.
Заполнитель | Описание: | Пример |
---|---|---|
<PepVM> | Имя виртуальной машины с привилегированной конечной точкой в экземпляре Azure Stack Hub. | AzS-ERCS01 |
<AppIdentifier> | Идентификатор, присвоенный регистрации приложения. | S-1-5-21-1634563105-1224503876-2692824315-2623 |
В сеансе Windows PowerShell, открытом с повышенными правами, выполните следующие командлеты:
# 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
После завершения выполнения сценария отобразятся сведения об обновленной регистрации приложения, включая новый секрет клиента.
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
Удаление регистрации приложения
Теперь вы узнаете, как удалить регистрацию приложения из каталога с помощью PowerShell.
Вместо приведенных ниже заполнителей используйте собственные значения.
Заполнитель | Описание: | Пример |
---|---|---|
<PepVM> | Имя виртуальной машины с привилегированной конечной точкой в экземпляре Azure Stack Hub. | AzS-ERCS01 |
<AppIdentifier> | Идентификатор, присвоенный регистрации приложения. | 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>"}
При вызове командлета Remove-GraphApplication на привилегированной конечной точке выходные данные не возвращаются, но во время выполнения этого командлета в консоли отобразится подтверждение в виде строки verbatim:
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
Назначение роли
Пользователи и приложения получают доступ к ресурсам Azure с помощью механизма управления доступом на основе ролей (RBAC). Чтобы разрешить приложению доступ к ресурсам в подписке, необходимо назначить этому субъекту-службе роль для конкретного ресурса. Сначала укажите, какая роль предоставит приложению необходимые разрешения. Дополнительные сведения о доступных ролях см. в статье Встроенные роли для ресурсов Azure.
Выбранный тип ресурса также устанавливает область доступа для приложения. Вы можете задать область доступа на уровне подписки, группы ресурсов или ресурса. Разрешения наследуют более низкие уровни области действия. Например, добавление приложения в роль читателя для группы ресурсов означает, что оно может считывать группу ресурсов и все содержащиеся в ней ресурсы.
Войдите на соответствующий портал на основе каталога, указанного во время установки Azure Stack Hub (например, портал Azure для идентификатора Microsoft Entra или пользовательского портала Azure Stack Hub для AD FS). В этом примере используется пользовательский портал Azure Stack Hub.
Примечание.
Чтобы добавить назначение ролей для определенного ресурса, учетной записи пользователя должна быть назначена роль с разрешением
Microsoft.Authorization/roleAssignments/write
. Это, например, либо встроенная роль Владелец, либо Администратор доступа пользователей.Перейдите к ресурсу, к которому требуется разрешить доступ приложению. В этом примере назначьте приложению роль в области подписки, выбрав подписки, а затем конкретную подписку. Вы также можете выбрать группу ресурсов или конкретный ресурс, например виртуальную машину.
Перейдите на страницу Управление доступом (IAM). Эта универсальная страница доступна для всех ресурсов, которые поддерживают RBAC.
Выберите + Добавить.
В разделе Роль выберите роль, которая будет назначена приложению.
В разделе Выбор найдите приложение, используя полное или частичное его имя. Во время регистрации имя приложения создается как Azurestack-YourAppName-GUID><<>. Например, если вы использовали имя приложения App2 и GUID 2bbe67d8-3fdb-4b62-87cf-cc41dd434ff, полное имя будет azurestack-App2-2bbe67d8-3fdb-4b62-87cf-cc41dd434ff. Вы можете выполнять поиск по точной строке или по фрагменту, например Azurestack или Azurestack-App2.
Когда найдете приложение, выберите его. Оно отобразится в разделе Выбранные элементы.
Выберите Сохранить, чтобы завершить назначение роли.
По завершении приложение отобразится в списке субъектов, назначенных в текущей области, для этой роли.
Теперь, когда вы предоставили приложению удостоверение и дали ему разрешение на доступ к ресурсам, вы можете активировать сценарий или код для входа и безопасного доступа к ресурсам Azure Stack Hub.
Следующие шаги
Управление разрешениями пользователей
Документация по Microsoft Entra
Active Directory Federation Services (Службы федерации Active Directory)