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


Создание сервисного принципала Azure с помощью Azure PowerShell

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

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

В этой статье описаны шаги по созданию, получению сведений и сбросу служебного принципала с помощью Azure PowerShell.

Осторожность

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

Предпосылки

Создайте сервисного принципала

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

Это важно

Начиная с модуля Az PowerShell версии 7.x, New-AzADServicePrincipal больше не назначает роль Contributor служебному принципалу по умолчанию. Чтобы назначить определенную роль сервисному принципалу, см. статью Действия по назначению роли.

Замечание

Если у вашей учетной записи нет разрешения на создание субъекта-службы, New-AzADServicePrincipal возвращает сообщение об ошибке, которое содержит текст "Недостаточно привилегий для завершения операции". Чтобы создать сервисный принципал, обратитесь к администратору Microsoft Entra.

В каталоге Microsoft Entra ID, где для параметра Пользователи могут регистрировать приложения установлено значение Нет, вы должны быть членом одной из следующих встроенных ролей Microsoft Entra ID (которые имеют действие: microsoft.directory/applications/createAsOwner или microsoft.directory/applications/create):

Дополнительные сведения о параметрах пользователей в идентификаторе Microsoft Entra см. в разделе "Ограничение возможностей создания приложений".

Существует два типа проверки подлинности для субъектов-служб: аутентификация на основе паролей и проверка подлинности на основе сертификатов.

Аутентификация на основе пароля

Это важно

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

Если другие параметры аутентификации не указаны, используется аутентификация на основе пароля, который генерируется случайным образом. Если требуется проверка подлинности на основе пароля, рекомендуется использовать этот метод.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

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

Следующий код позволяет экспортировать секрет:

$sp.PasswordCredentials.SecretText

Объект, возвращенный из New-AzADServicePrincipal, содержит элементы Id и DisplayName, каждый из которых можно использовать для входа с помощью учетной записи служебного принципала.

Это важно

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

(Get-AzContext).Tenant.Id

Проверка подлинности на основе сертификатов

Это важно

При создании принципала службы аутентификации на основе сертификата роль по умолчанию не назначается. Сведения о назначении ролей см. в разделе Управление ролями субъекта-службы.

Принципы службы, использующие аутентификацию на основе сертификатов, создаются с помощью параметра CertValue. Этот параметр принимает строку ASCII открытого сертификата в кодировке Base64 Это представлено PEM-файлом или текстовым кодом CRT или CER. Двоичные кодировки общедоступного сертификата не поддерживаются. В этих инструкциях предполагается, что у вас уже есть сертификат.

$cert = <public certificate as base64-encoded string>
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName -CertValue $cert

Объект, возвращаемый из New-AzADServicePrincipal, содержит свойства Id и DisplayName, которые можно использовать для авторизации с использованием сервисного принципала. Клиентам, которые входят в систему с помощью субъекта-службы, также требуется доступ к закрытому ключу сертификата.

Это важно

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

(Get-AzContext).Tenant.Id

Получение существующего сервисного принципала

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

  • DisplayNameBeginsWith запрашивает служебные учетные записи, имеющие префикс , совпадающий с указанным значением. Отображаемое имя сервиса-принципала — это значение, заданное при создании с помощью параметра DisplayName.
  • DisplayName  — запрашивает точное совпадение имени принципала службы.

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

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

Дополнительные сведения об управлении доступом на основе ролей (RBAC) и ролях см. в RBAC: Встроенные роли.

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

New-AzRoleAssignment -ApplicationId <service principal application ID> -RoleDefinitionName 'Reader'
Remove-AzRoleAssignment -ObjectId <service principal object ID> -RoleDefinitionName 'Contributor'

Это важно

Командлеты назначения ролей не принимают идентификатор объекта сервисного субъекта. Они используют связанный идентификатор приложения, который генерируется во время создания. Чтобы получить идентификатор приложения для субъекта-службы, используйте Get-AzADServicePrincipal.

Замечание

Если у вашей учетной записи нет разрешения на назначение роли, появится сообщение об ошибке о том, что у вашей учетной записи нет авторизации для выполнения действия "Microsoft.Authorization/roleAssignments/write". Чтобы управлять ролями, обратитесь к администратору Microsoft Entra.

Добавление роли не ограничивает назначенные ранее разрешения. При ограничении разрешений субъекта-службы обязательно удалите роль сотрудника.

Изменения можно проверить, перечислив назначенные роли:

Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName

Вход с помощью учётной записи службы

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

Чтобы войти с использованием учетной записи сервиса и пароля:

# Use the application ID as the username, and the secret as password
$credentials = Get-Credential
Connect-AzAccount -ServicePrincipal -Credential $credentials -Tenant <tenant ID>

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

Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>

Инструкции по импорту сертификата в хранилище учетных данных, доступное из PowerShell, см. в разделе аутентификация на основе сертификатов.

Сброс учетных данных доступа

Если вы забыли учетные данные для учетной записи службы, используйте New-AzADSpCredential, чтобы добавить новые учетные данные со случайным паролем. Этот командлет не поддерживает учетные данные, заданные пользователем, при сбросе пароля.

Это важно

Перед назначением новых учетных данных может потребоваться удалить существующие учетные данные, чтобы запретить вход с ними. Для выполнения этой задачи используйте командлет Remove-AzADSpCredential:

Remove-AzADSpCredential -DisplayName ServicePrincipalName
$newCredential = New-AzADSpCredential -ServicePrincipalName ServicePrincipalName

Устранение неполадок

Если вы получаете ошибку New-AzADServicePrincipal: Another object with the same value for property identifierUris already exists (New-AzADServicePrincipal: другой объект с таким же значением свойства identifierUris уже существует), убедитесь, что субъект-служба с таким же именем не существует.

Get-AzAdServicePrincipal -DisplayName ServicePrincipalName

Если существующий сервисный принципал больше не нужен, вы можете удалить его, воспользуйтесь следующим примером.

Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName

Эта ошибка также может возникнуть, если вы ранее создали служебный принципал для приложения Azure Active Directory. Если удалить основного объекта службы, приложение по-прежнему будет доступно. Это приложение предотвращает создание другого субъекта-службы с тем же именем.

В следующем примере можно убедиться, что приложение Microsoft Entra с тем же именем не существует:

Get-AzADApplication -DisplayName ServicePrincipalName

Если приложение с тем же именем существует и больше не требуется, его можно удалить с помощью следующего примера.

Remove-AzADApplication -DisplayName ServicePrincipalName

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