Предоставление приложению доступа к ресурсам Azure Stack Hub

Приложение, которое развертывает или настраивает ресурсы с помощью Azure Resource Manager должно быть представлено собственным удостоверением, известным как субъект безопасности. Так же, как пользователь представлен субъектом-пользователем, приложение представлено субъектом-службой.

Удостоверение также можно использовать для делегирования только необходимых разрешений пользователю или приложению. Например, приложение управления конфигурацией может использовать Azure Resource Manager для инвентаризации ресурсов Azure. Приложение будет зарегистрировано в каталоге, а затем добавлено в роль читателя в соответствующей области, ограничивая приложение доступом только для чтения.

Обзор

Как и пользователь, приложение должно представлять учетные данные во время проверки подлинности, для чего требуются два элемента:

  • Идентификатор приложения, который иногда называют идентификатором клиента. Это глобальный уникальный идентификатор (GUID), однозначно определяющий регистрацию приложения в клиенте Active Directory.
  • Секрет. Вы можете создать строку секрета клиента (аналогичную паролю) или указать отпечаток сертификата X509 (который использует его открытый ключ).

Запускать приложение с собственным идентификатором предпочтительнее по сравнению с запуском с идентификатором пользователя по следующим причинам:

  • Более надежные учетные данные — приложение может выполнять вход с помощью сертификата X.509 вместо общего текстового секрета или пароля.
  • Более ограниченные разрешения — их можно назначить приложению. Как правило, приложение получает именно те разрешения, которые требуются для его работы. Это называется принцип минимальных привилегий.
  • Разрешения и учетные данные субъекта-службы не требуется изменять так часто, как учетные данные пользователя. Например, когда изменяются обязанности пользователя или пользователь покидает организацию, требования к паролю определяют изменение.

Сначала необходимо создать регистрацию приложения в каталоге, в результате чего создается связанный объект субъекта-службы, представляющий удостоверение приложения в каталоге. Процесс регистрации зависит от каталога, выбранного для экземпляра Azure Stack Hub:

  • Azure Active Directory (Azure AD): Azure AD — это мультитенантная облачная служба управления каталогами и удостоверениями. Azure AD можно использовать с подключенным экземпляром Azure Stack Hub. Приведенные ниже примеры будут использовать портал Azure для регистрации приложений Azure AD.
  • службы федерации Active Directory (AD FS) (AD FS): AD FS предоставляет упрощенные, защищенные федерации удостоверений и возможности единого входа (SSO). AD FS можно использовать с подключенными и отключенными экземплярами Azure Stack Hub. Приведенные ниже примеры будут использовать Azure Stack Hub PowerShell для регистрации приложений AD FS.

После регистрации приложения, которое вы узнаете, как назначить его роли, ограничив доступ к ресурсам.

Управление приложением Azure AD

Если вы развернули Azure Stack Hub с Azure AD в качестве службы управления удостоверениями, вы создаете удостоверения для приложений и управляете ими так же, как и для Azure. В этом разделе показано, как выполнить действия с помощью портал Azure. Просмотрите разрешения, необходимые для регистрации приложения перед началом работы, чтобы убедиться, что у вас есть достаточные разрешения для регистрации приложения.

Создание регистрации приложения, использующего учетные данные секрета клиента

В этом разделе описана регистрация приложения в клиенте Azure AD с помощью портал Azure. В следующем примере вы указываете учетные данные секрета клиента, но портал также поддерживает учетные данные на основе сертификатов X509.

  1. Войдите на портал Azure с помощью учетной записи Azure.

  2. Последовательно выберите элементы Azure Active Directory>Регистрация приложений>Новая регистрация.

  3. Укажите имя для приложения.

  4. Выберите необходимые поддерживаемые типы учетных записей.

  5. В разделе URI перенаправления выберите веб-сайт в качестве типа приложения и (необязательно) укажите универсальный код ресурса (URI) перенаправления, если приложение требует его.

  6. Выбрав нужные значения, нажмите кнопку Зарегистрировать. После этого создается регистрация приложения и открывается страница Обзор.

  7. Скопируйте идентификатор приложения и вставьте его в код приложения. Эта строка также называется идентификатором клиента.

  8. Чтобы создать секрет клиента, выберите страницу секретов сертификатов&. Выберите Создать секрет клиента.

  9. Введите описание секрета и срок его действия.

  10. Когда все будет готово, нажмите Добавить.

  11. После этого отобразится значение секрета. Скопируйте и сохраните его в другом месте, так как позже вы не сможете получить его. Чтобы войти, вы предоставляете секрет с идентификатором приложения в клиентском приложении.

    Saved key in client secrets

Перейдите к назначению роли , чтобы узнать, как установить управление доступом на основе ролей для удостоверения приложения.

Дополнительные статьи по управлению приложениями Azure AD

Дополнительные сведения об управлении приложениями Azure AD см. в следующих статьях Azure:

Управление приложением 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> Описательное имя новой регистрации приложения. Инструмент управления
  1. Откройте сеанс 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
    
    
  2. После завершения скрипта отображаются сведения о регистрации приложения. ClientID и Thumbprint проходят проверку подлинности и затем получают доступ к ресурсам, управляемым Azure Resource Manager.

    ApplicationIdentifier : S-1-5-21-1512385356-3796245103-1243299919-1356
    ClientId              : 3c87e710-9f91-420b-b009-31fa9e430145
    Thumbprint            : 30202C11BE6864437B64CE36C8D988442082A0F1
    ApplicationName       : Azurestack-MyApp-c30febe7-1311-4fd8-9077-3d869db28342
    ClientSecret          :
    PSComputerName        : azs-ercs01
    RunspaceId            : a78c76bb-8cae-4db4-a45a-c1420613e01b
    

Не закрывайте сеанс в консоли PowerShell, так как в следующем разделе он будет использоваться со значением ApplicationIdentifier.

Обновление учетных данных сертификата

Теперь, когда вы зарегистрировали приложение, в этом разделе показано, как:

  1. Создать самозаверяющий сертификат X509 для тестирования.
  2. Обновите учетные данные приложения, обновив его свойство Thumbprint в соответствии с новым сертификатом.

Обновите учетные данные на основе сертификата с помощью PowerShell, подставив собственные значения приведенных ниже заполнителей.

Заполнитель Описание Пример
<PepVM> Имя виртуальной машины с привилегированной конечной точкой в экземпляре Azure Stack Hub. AzS-ERCS01
<YourAppName> Описательное имя новой регистрации приложения. Инструмент управления
<YourCertificateLocation> Расположение сертификата X509 в локальном хранилище сертификатов. Cert:\CurrentUser\My\AB5A8A3533CC7AA2025BF05120117E06DE407B34
<AppIdentifier> Идентификатор, присвоенный регистрации приложения. S-1-5-21-1512385356-3796245103-1243299919-1356
  1. В сеансе 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
    
  2. После выполнения сценария отобразятся сведения об обновленной регистрации приложения, включая значение отпечатка нового самозаверяющего сертификата.

    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> Описательное имя новой регистрации приложения. Инструмент управления
  1. Откройте сеанс 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
    
  2. После завершения скрипта отображаются сведения о регистрации приложения. ClientID и ClientSecret проходят проверку подлинности и затем получают доступ к ресурсам, управляемым Azure Resource Manager.

    ApplicationIdentifier : S-1-5-21-1634563105-1224503876-2692824315-2623
    ClientId              : 8e0ffd12-26c8-4178-a74b-f26bd28db601
    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
  1. В сеансе 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
    
  2. После завершения выполнения сценария отобразятся сведения об обновленной регистрации приложения, включая новый секрет клиента.

    ApplicationIdentifier : S-1-5-21-1634563105-1224503876-2692824315-2623
    ClientId              : 8e0ffd12-26c8-4178-a74b-f26bd28db601
    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.

Выбранный тип ресурса также устанавливает область доступа для приложения. Вы можете задать область доступа на уровне подписки, группы ресурсов или ресурса. Разрешения наследуют более низкие уровни области действия. Например, добавление приложения в роль читателя для группы ресурсов означает, что оно может считывать группу ресурсов и все содержащиеся в ней ресурсы.

  1. Войдите на соответствующий портал в зависимости от каталога, указанного во время установки Azure Stack Hub (например, портал Azure для Azure AD или пользовательский портал Azure Stack Hub для AD FS). В этом примере используется пользовательский портал Azure Stack Hub.

    Примечание

    Чтобы добавить назначение ролей для определенного ресурса, учетной записи пользователя должна быть назначена роль с разрешением Microsoft.Authorization/roleAssignments/write. Это, например, либо встроенная роль Владелец, либо Администратор доступа пользователей.

  2. Перейдите к ресурсу, к которому требуется разрешить доступ приложению. В этом примере назначьте приложение роли в области подписки, выбрав "Подписки", а затем — определенную подписку. Вы также можете выбрать группу ресурсов или конкретный ресурс, например виртуальную машину.

    Select subscription for assignment

  3. Перейдите на страницу Управление доступом (IAM) . Эта универсальная страница доступна для всех ресурсов, которые поддерживают RBAC.

  4. Выберите + Добавить.

  5. В разделе Роль выберите роль, которая будет назначена приложению.

  6. В разделе Выбор найдите приложение, используя полное или частичное его имя. Во время регистрации имя приложения создается как Azurestack-YourAppName-ClientId<><>. Например, если вы использовали имя приложения App2 и ClientId 2bbe67d8-3fdb-4b62-87cf-cc41dd4344ff было назначено во время создания, полное имя будет azurestack-App2-2bbe67d8-3fdb-4b62-87cf-cc41dd4344ff. Вы можете выполнять поиск по точной строке или по фрагменту, например Azurestack или Azurestack-App2.

  7. Когда найдете приложение, выберите его. Оно отобразится в разделе Выбранные элементы.

  8. Выберите Сохранить, чтобы завершить назначение роли.

    Assign role

  9. По завершении приложение отобразится в списке субъектов, назначенных в текущей области, для этой роли.

    Assigned role

Теперь, когда вы предоставили приложению удостоверение и дали ему разрешение на доступ к ресурсам, вы можете активировать сценарий или код для входа и безопасного доступа к ресурсам Azure Stack Hub.

Дальнейшие действия

Управление разрешениями пользователей
Документация по Azure Active Directory
Active Directory Federation Services (Службы федерации Active Directory)