Вход в Azure PowerShell без интерактивного взаимодействия для сценариев автоматизации
Субъект-служба в Azure — это неинтерактивная учетная запись, которая предоставляет удостоверение, используемое приложениями, службами и средствами автоматизации для доступа к определенным ресурсам Azure. Проверка подлинности с помощью субъекта-службы — лучший способ написания безопасных скриптов, так как они действуют как удостоверение безопасности с назначенными разрешениями, определяющими, какие действия можно выполнять и какие ресурсы можно получить. Субъекты-службы помогают безопасно автоматизировать задачи управления без использования личных учетных записей пользователей, упрощая более безопасный и управляемый доступ к ресурсам Azure. Как и другие учетные записи пользователей, вы управляете своими разрешениями с помощью Microsoft Entra. Предоставив субъекту-службе только необходимые разрешения, вы обеспечите защиту скриптов автоматизации.
Необходимые компоненты
- Установите последнюю версию модуля Az PowerShell.
Вход с помощью управляемого удостоверения
Управляемые удостоверения — это особый тип субъекта-службы, предоставляющего службы Azure автоматически управляемым удостоверением. Использование этого типа удостоверения не требует хранения учетных данных в конфигурации или коде для проверки подлинности в любой службе Azure, поддерживающей управляемые удостоверения.
Существует два типа управляемых удостоверений:
- Управляемое удостоверение, назначаемое системой
- Управляемое удостоверение, назначаемое пользователем
Управляемые удостоверения обеспечивают безопасный способ взаимодействия с другими службами Azure без необходимости управлять учетными данными. Они также помогают снизить риск утечки учетных данных.
Вот как работают управляемые удостоверения в реальных сценариях:
- Azure автоматически управляет созданием и удалением учетных данных, используемых управляемым удостоверением.
- Служба Azure, включенная с управляемым удостоверением, может безопасно получить доступ к другим службам, таким как Azure Key Vault, База данных SQL Azure, Хранилище BLOB-объектов Azure и т. д., с помощью токенов Microsoft Entra.
- Это удостоверение управляется непосредственно в Azure без необходимости дополнительной подготовки.
Управляемые удостоверения упрощают модель безопасности, избегая необходимости хранить учетные данные и управлять ими, и они играют важную роль в безопасных облачных операциях, уменьшая риск, связанный с обработкой секретов.
Управляемое удостоверение, назначаемое системой
Azure автоматически создает управляемое удостоверение, назначаемое системой, для экземпляра службы Azure (например, виртуальной машины Azure, Служба приложений или Функции Azure). При удалении экземпляра службы Azure автоматически очищает учетные данные и удостоверение, связанное с службой.
Следующий пример подключается с помощью управляемого удостоверения, назначаемого системой, в среде узла. При выполнении на виртуальной машине с назначенным управляемым удостоверением код позволяет выполнить вход с помощью назначенного удостоверения.
Connect-AzAccount -Identity
Управляемое удостоверение, назначаемое пользователем
Управляемое удостоверение, назначаемое пользователем, — это удостоверение, создаваемое и управляемое в Microsoft Entra. Его можно назначить одному или нескольким экземплярам службы Azure. Жизненный цикл управляемого удостоверения, назначаемого пользователем, управляется отдельно от экземпляров служб, которым он назначен.
При использовании управляемого удостоверения, назначаемого пользователем, необходимо указать параметр AccountId и параметр Identity , как показано в следующем примере.
Connect-AzAccount -Identity -AccountId <user-assigned-identity-clientId-or-resourceId>
Следующие команды подключаются с помощью управляемого myUserAssignedIdentity
удостоверения. Он добавляет удостоверение, назначаемое пользователем, в виртуальную машину, а затем подключается с помощью ClientId удостоверения, назначаемого пользователем.
$identity = Get-AzUserAssignedIdentity -ResourceGroupName myResourceGroup -Name myUserAssignedIdentity
Get-AzVM -ResourceGroupName contoso -Name testvm | Update-AzVM -IdentityType UserAssigned -IdentityId $identity.Id
Connect-AzAccount -Identity -AccountId $identity.ClientId # Run on the virtual machine
Account SubscriptionName TenantId Environment
------- ---------------- -------- -----------
00000000-0000-0000-0000-000000000000 My Subscription 00000000-0000-0000-0000-000000000000 AzureCloud
Дополнительные сведения см. в статье Настройка управляемых удостоверений для ресурсов Azure на виртуальной машине Azure.
Вход с помощью субъекта-службы
Чтобы войти с помощью субъекта-службы, используйте параметр ServicePrincipal командлета Connect-AzAccount
. Вам также потребуется следующая информация для субъекта-службы:
- AppId
- Учетные данные входа или доступ к сертификату, используемому для создания субъекта-службы
- Идентификатор клиента
Способ входа с помощью субъекта-службы зависит от того, настроена ли она для проверки подлинности на основе сертификатов или паролей.
Проверка подлинности на основе сертификатов
Сведения о создании субъекта-службы для Azure PowerShell см. в статье "Создание субъекта-службы Azure" с помощью Azure PowerShell.
Для проверки подлинности на основе сертификатов Azure PowerShell требуется получить сведения из локального хранилища сертификатов на основе отпечатка сертификата.
Connect-AzAccount -ApplicationId $appId -Tenant $tenantId -CertificateThumbprint <thumbprint>
При использовании субъекта-службы вместо зарегистрированного приложения укажите параметр ServicePrincipal и укажите идентификатор приложения субъекта-службы в качестве значения параметра ApplicationId.
Connect-AzAccount -ServicePrincipal -ApplicationId $servicePrincipalId -Tenant $tenantId -CertificateThumbprint <thumbprint>
В Windows PowerShell 5.1 хранилище сертификатов можно управлять и проверять с помощью модуля PKI . Для PowerShell 7.x и более поздних версий процесс отличается. В следующих сценариях показано, как импортировать существующий сертификат в хранилище сертификатов, доступном PowerShell.
Импорт сертификата в PowerShell 7.x и более поздних версий
# Import a PFX
$storeName = [System.Security.Cryptography.X509Certificates.StoreName]::My
$storeLocation = [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser
$store = [System.Security.Cryptography.X509Certificates.X509Store]::new($storeName, $storeLocation)
$certPath = <path to certificate>
$credentials = Get-Credential -Message "Provide PFX private key password"
$flag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable
$certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($certPath, $credentials.Password, $flag)
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$store.Add($Certificate)
$store.Close()
Импорт сертификата в Windows PowerShell 5.1
# Import a PFX
$credentials = Get-Credential -Message 'Provide PFX private key password'
Import-PfxCertificate -FilePath <path to certificate> -Password $credentials.Password -CertStoreLocation cert:\CurrentUser\My
Аутентификация на основе пароля
Создайте субъект-службу для использования с примерами в этом разделе. См. статью Создание субъекта-службы Azure с помощью Azure PowerShell.
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName
Внимание
Предоставленный секрет субъекта-службы хранится в AzureRmContext.json
файле в профиле пользователя ($env:USERPROFILE\.Azure
). Убедитесь, что этот каталог имеет соответствующие защиты.
Чтобы получить учетные данные субъекта-службы в качестве объекта, используйте Get-Credential
командлет. Этот командлет запрашивает имя пользователя и пароль. Используйте значение AppId
субъекта-службы в качестве имени пользователя и преобразуйте значение secret
в обычный текст для пароля.
# Retrieve the plain text password for use with Get-Credential in the next command.
$sp.PasswordCredentials.SecretText
$pscredential = Get-Credential -UserName $sp.AppId
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId
В сценариях автоматизации вам нужно создать учетные данные на основе значений AppId
и SecretText
субъекта-службы:
$SecureStringPwd = $sp.PasswordCredentials.SecretText | ConvertTo-SecureString -AsPlainText -Force
$pscredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $sp.AppId, $SecureStringPwd
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId
При автоматизации подключений субъекта-службы используйте соответствующие методики хранения паролей.
См. также
- Создание субъекта-службы Azure с помощью Azure PowerShell
- Что такое управляемые удостоверения для ресурсов Azure?
- Назначение доступа к управляемому удостоверению к ресурсу с помощью PowerShell
- Просмотр субъекта-службы управляемого удостоверения с помощью PowerShell
- Connect-AzAccount
- New-AzADServicePrincipal
- Get-Credential