Поделиться через


Создание субъекта-службы Azure с помощью Azure PowerShell

Предупреждение

Модуль AzureRM PowerShell официально устарел с 29 февраля 2024 г. Пользователям рекомендуется выполнить миграцию из AzureRM в модуль Az PowerShell, чтобы обеспечить постоянную поддержку и обновления.

Хотя модуль AzureRM по-прежнему может функционировать, он больше не поддерживается или не поддерживается, размещая любое постоянное использование на усмотрение и риск пользователя. Ознакомьтесь с нашими ресурсами миграции, чтобы получить рекомендации по переходу в модуль Az.

Если вы планируете управлять приложением или службой с помощью Azure PowerShell, его следует запустить под субъектом-службой Microsoft Entra Azure, а не собственными учетными данными. В этой статье объясняется, как создать субъект безопасности с помощью Azure PowerShell.

Примечание.

Можно также создать субъект-службу на портале Azure. Дополнительные сведения см. в статье Создание приложения Azure Active Directory и субъекта-службы с доступом к ресурсам с помощью портала.

Что такое субъект-служба?

Субъект-служба Azure — это идентификатор безопасности, который созданные пользователем приложения, службы и средства автоматизации используют для доступа к определенным ресурсам Azure. Это что-то вроде удостоверения пользователя (имя пользователя и пароль или сертификат) с определенной ролью и строго контролируемыми разрешениями. В отличие от удостоверений пользователей субъект-служба должен выполнять только определенные задачи. Это решение повышает безопасность, если вы предоставите ему минимальный уровень разрешений для выполнения задач управления.

Проверка уровня разрешений

Во-первых, необходимо иметь достаточные разрешения как в идентификаторе Microsoft Entra, так и в подписке Azure. У вас должно быть право создавать приложения в Active Directory и назначать роли субъекту-службе.

Проверить, есть ли у вас необходимые разрешения, проще всего на портале. Ознакомьтесь с проверкой наличия необходимых разрешений на портале.

Создание субъекта-службы для приложения

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

  • Уникальное имя развернутого приложения, например MyDemoWebApp в следующих примерах.
  • Идентификатор приложения, глобальный уникальный идентификатор, связанный с развернутым приложением, службой или объектом.

Получение сведений о приложении

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

Get-AzureRmADApplication -DisplayNameStartWith MyDemoWebApp
DisplayName             : MyDemoWebApp
ObjectId                : 00001111-aaaa-2222-bbbb-3333cccc4444
IdentifierUris          : {http://MyDemoWebApp}
HomePage                : http://www.contoso.com
Type                    : Application
ApplicationId           : 00001111-aaaa-2222-bbbb-3333cccc4444
AvailableToOtherTenants : False
AppPermissions          :
ReplyUrls               : {}

Создание субъекта-службы для приложения

Используйте командлет New-AzureRmADServicePrincipal, чтобы создать субъект-службу.

$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

Здесь вы можете либо непосредственно использовать свойство $servicePrincipal.Secret в командлете Connect-AzureRmAccount (см. раздел "Вход с помощью субъекта-службы" ниже), либо преобразовать SecureString в простую текстовую строку для дальнейшего использования:

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

Вход с помощью субъекта-службы

Теперь вы можете выполнить вход от имени нового субъекта-службы для вашего приложения, используя указанный appId и автоматически созданный пароль. Для субъекта-службы также нужно указать идентификатор клиента. Идентификатор клиента отображается, если вы вошли в Azure с помощью личных учетных данных. Чтобы выполнить вход с помощью субъекта-службы, используйте следующие команды:

$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

После успешного входа вы увидите примерно такие выходные данные:

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

Поздравляем! Эти учетные данные можно использовать для запуска приложения. Теперь необходимо настроить права субъекта-службы.

Управление ролями

Примечание.

Управление доступом на основе ролей в Azure (RBAC) — это модель для определения ролей пользователя и субъектов-служб и управления этими ролями. Ролям назначаются связанные наборы разрешений, которые определяют ресурсы, доступные субъекту для чтения, доступа, записи или управления. Дополнительные сведения об RBAC и ролях см. в статье Встроенные роли для управления доступом на основе ролей в Azure.

В Azure PowerShell доступны следующие командлеты для управления назначением ролей:

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

В этом примере мы назначаем роль читателя предыдущему примеру субъекта-службы и удаляем роль участника:

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   : 00001111-aaaa-2222-bbbb-3333cccc4444
ObjectId           : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType         : ServicePrincipal
Remove-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Contributor

Вот как просмотреть текущие назначенные роли:

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   : 00001111-aaaa-2222-bbbb-3333cccc4444
ObjectId           : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType         : ServicePrincipal

Другие командлеты Azure PowerShell для управления ролями:

Изменение учетных данных субъекта безопасности

Из соображений безопасности рекомендуется регулярно просматривать разрешения и обновлять пароли. Можно также изменять учетные данные безопасности и управлять ими в случае изменения приложений. Например, можно изменить пароль субъекта-службы, создав новый пароль и удалив старый.

Добавление нового пароля субъекта-службы

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

Получение списка учетных данных субъекта-службы

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 00001111-aaaa-2222-bbbb-3333cccc4444 Password

Удаление старого пароля субъекта-службы

Remove-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp -KeyId 00001111-aaaa-2222-bbbb-3333cccc4444
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

Проверка списка учетных данных субъекта-службы

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

Получение сведений о субъекте-службе

$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