Поиск по сайту:

PowerShell: настройка проверки подлинности на основе сертификатов для Exchange Online (Azure)


Microsoft Entra ID (ранее Azure AD) поддерживает проверку подлинности на основе сертификатов (CBA). Это означает, что вы можете использовать проверку подлинности с помощью сертификата для автоматического запуска сценариев PowerShell без ввода пароля и без использования Azure MFA. Благодаря аутентификации на основе сертификатов вам больше не нужно беспокоиться о безопасном хранении паролей в сценариях PowerShell или использовании стороннего хранилища с помощью модуля SecretManagement.

Ниже описано, как использовать сертификаты для аутентификации из сценариев PowerShell с помощью Microsoft Entra ID (Azure AD) и Exchange Online.

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

Создайте самозаверяющий сертификат со сроком действия 3 года:

$certvalid = (Get-Date).AddYears(3)
$newcert = New-SelfSignedCertificate -DnsName "pre_prod.active-directory.ru" -CertStoreLocation "cert:\LocalMachine\My" -NotAfter $certvalid -KeySpec KeyExchange -FriendlyName "Azure Microsoft Entra ID PowerShell Auth cert"
$newcert|fl Subject,Thumbprint,NotBefore,NotAfter

Скопируйте значение отпечатка сертификата.

Затем экспортируйте сертификат в файлы CER и PFX:

$newcert | Export-Certificate -FilePath "C:\PS\azure-auth.cer"
$newcert | Export-PfxCertificate -FilePath "C:\PS\azure-auth.pfx" -Password $(ConvertTo-SecureString -String "S3dPswrd@123" -AsPlainText -Force)

Теперь вам нужно создать приложение в Azure Microsoft Entra:

  1. Войдите на портал Azure и перейдите в раздел Microsoft Entra ID -> Регистрации приложений -> Новая регистрация;

  2. Укажите название приложения (

    testCertAuthPowerShell

    ), выберите Только учетные записи в этом организационном каталоге (один клиент) и нажмите Зарегистрироваться;

  3. Скопируйте значение Приложение (идентификатор клиента);

  4. Затем назначьте разрешения для вашего приложения. Откройте Разрешения API -> Добавить разрешение. В этом примере мы предоставим разрешения на управление конфигурацией Exchange Online (API, которые использует моя организация -> Office 365 Exchange Online) Azure -> Разрешения приложения -> Exchange.ManageAsApp -> Добавить разрешения -> Предоставить согласие администратора);

  5. Затем перейдите в раздел Сертификаты и секреты и загрузите со своего компьютера файл самозаверяющего сертификата;

  6. Затем назначьте своему приложению роль Администратора Exchange. Перейдите в Azure Active Directory -> Роли и администраторы -> выберите роль Администратор Exchange -> Добавить назначения -> Выберите свое приложение из списка (testCertAuthPowerShell). .

Как только это будет сделано, вы можете попытаться подключиться к Exchange Online из сценария PowerShell на своем компьютере, используя сертификат. Обратите внимание, что в этом примере модуль Exchange Online PowerShell (EXO) уже установлен на компьютере.

Вам понадобятся значения следующих переменных (те, которые вы скопировали ранее):

$certThumbprint = "9CF05589A4B29BECEE6456F08A76EBC3DC2BC581"
$AzureAppID = "111111-2222-3333-4444-123456789"
$tenant="active-directory.onmicrosoft.com"

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

Connect-ExchangeOnline -AppId $AzureAppID -CertificateThumbprint $certThumbprint -Organization $tenant

При подключении к Microsoft Entra ID не будет запроса пароля и формы современной аутентификации.

Список почтовых ящиков в вашем клиенте Exchange:

Get-EXOMailbox

Не забудьте добавить команду для отключения сеанса Exchange Online в конце сценария PowerShell:

Disconnect-ExchangeOnline -Confirm:$false

Аналогичным образом вы можете настроить проверку подлинности на основе сертификатов для других служб Microsoft 365. Здесь важно правильно назначить разрешения для вашего приложения Azure.

Например, если вы используете модуль Teams PowerShell, вы должны выполнить следующую команду для аутентификации с помощью сертификата:

Connect-MicrosoftTeams -CertificateThumbprint $certThumbprint -ApplicationId $AzureAppID -TenantId $tenant

Чтобы использовать модуль Azure AD PowerShell с сертификатом для подключения к Microsoft Entra ID:

Connect-AzureAD -TenantId $tenant -ApplicationId $AzureAppID -CertificateThumbprint $certThumbprint

Узнайте больше о создании приложений в Azure, назначении разрешений и использовании API Microsoft Graph в PowerShell.

Кроме того, вы можете импортировать сертификат на другой хост Windows, используя файл PFX, содержащий закрытый ключ, защищенный паролем. Используйте оснастку MMC «Сертификаты» или PowerShell для импорта сертификата:

$password = ConvertTo-SecureString -String "S3dPswrd@123" -Force -AsPlainText
Import-PfxCertificate -Password $password -FilePath "C:\PS\azure-auth.pfx" -CertStoreLocation Cert:\CurrentUser\My

Затем вы сможете использовать проверку подлинности на основе сертификатов Azure в сценариях PowerShell на этом компьютере.

Статьи по данной тематике