Создание субъекта-службы 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 для управления ролями:
- Get-AzureRmRoleDefinition
- New-AzureRmRoleDefinition
- Remove-AzureRmRoleDefinition
- Set-AzureRmRoleDefinition
Изменение учетных данных субъекта безопасности
Из соображений безопасности рекомендуется регулярно просматривать разрешения и обновлять пароли. Можно также изменять учетные данные безопасности и управлять ими в случае изменения приложений. Например, можно изменить пароль субъекта-службы, создав новый пароль и удалив старый.
Добавление нового пароля субъекта-службы
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