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


Использование субъекта-службы Azure с проверкой подлинности на основе сертификатов

При создании субъекта-службы вы задаете используемый им тип аутентификации для входа. Для субъектов-служб Azure доступно два типа проверки подлинности: проверка подлинности на основе паролей и проверка подлинности на основе сертификатов.

Мы рекомендуем использовать проверку подлинности на основе сертификатов из-за ограничений безопасности проверки подлинности на основе паролей. Проверка подлинности на основе сертификатов позволяет применять фишинговую проверку подлинности с помощью политик условного доступа, что лучше защищает ресурсы Azure. Дополнительные сведения о том, почему проверка подлинности на основе сертификатов более безопасна, см. в статье о проверке подлинности на основе сертификатов Microsoft Entra.

В этом руководстве объясняется, как использовать сертификат субъекта-службы для доступа к ресурсу Azure.

Создание субъекта-службы, содержащего новый сертификат

Чтобы создать для аутентификации самозаверяющий сертификат, укажите параметр --create-cert:

az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --create-cert

Выходные данные консоли:

{
  "appId": "myServicePrincipalID",
  "displayName": "myServicePrincipalName",
  "fileWithCertAndPrivateKey": "certFilePath\certFileName.pem",
  "password": null,
  "tenant": "myOrganizationTenantID"
}

Выходные данные включают ключ fileWithCertAndPrivateKey (если только сертификат не хранится в Key Vault). Значение этого ключа позволяет определить, где хранится сгенерированный сертификат. Скопируйте сертификат в безопасное расположение. В случае утраты доступа к закрытому ключу сертификата сбросьте учетные данные субъекта-службы.

Содержимое PEM-файла можно просмотреть с помощью текстового редактора. Ниже приведен пример PEM-файла:

Снимок экрана: PEM-файл

Создание субъекта-службы с помощью существующего сертификата

Создайте субъект-службу с существующим сертификатом --cert с помощью параметра. Любой инструмент, использующий этот субъект-службу, должен иметь доступ к закрытому ключу сертификата. Сертификаты должны иметь формат ASCII, например PEM, CER или DER. Передайте certi897ficate в виде строки или используйте @path формат для загрузки сертификата из файла.

При использовании PEM-файла сертификат должен быть добавлен в закрытый ключ в файле.

# create a service principal with the certificate as a string
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert "-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----"
# create a service principal with the certificate file location
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert @/path/to/cert.pem

Работа с Azure Key Vault

Этот --keyvault параметр можно добавить для создания или извлечения сертификатов в Azure Key Vault. При использовании --keyvault параметра --cert также требуется параметр. В этом примере --cert значение — это имя сертификата.

# Create a service principal storing the certificate in Azure Key Vault
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --create-cert \
                         --cert myCertificateName \
                         --keyvault myVaultName
# Create a service principal using an existing certificate in Azure Key Vault
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert myCertificateName \
                         --keyvault myVaultName

Получение сертификата из Azure Key Vault

Для сертификата, хранящегося в Azure Key Vault, получите сертификат с закрытым ключом с помощью az keyvault secret show и преобразуйте его в PEM-файл. В Azure Key Vault имя секрета сертификата совпадает с именем сертификата.

az keyvault secret download --file /path/to/cert.pfx \
                            --vault-name VaultName \
                            --name CertName \
                            --encoding base64
openssl pkcs12 -in cert.pfx -passin pass: -passout pass: -out cert.pem -nodes

az login --service-principal -u "<myAppClientID>" -p cert.pem --tenant "<myTenantID>"

Преобразование существующего файла PKCS12

Если у вас уже есть PKCS#12-файл, его можно преобразовать в формат PEM с помощью OpenSSL. Если у вас есть пароль, измените passin аргумент.

openssl pkcs12 -in fileName.p12 -clcerts -nodes -out fileName.pem -passin pass: -passout pass:

Добавление сертификата к субъекту-службе

--append Используйте параметр в az ad sp credential reset, чтобы добавить сертификат к существующему субъекту-службе. По умолчанию эта команда очищает все пароли и ключи, поэтому используйте тщательно.

az ad sp credential reset --id myServicePrincipalID \
                          --append \
                          --cert @/path/to/cert.pem

Выходные данные консоли:

Certificate expires yyyy-mm-dd hh:mm:ss+00:00. Adjusting key credential end date to match.
The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli
{
  "appId": "myServicePrincipalID",
  "password": null,
  "tenant": "myOrganizationTenantID"
}

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

Чтобы войти с помощью сертификата, сертификат должен быть доступен локально в виде PEM или DER-файла в формате ASCII. PKCS#12 файлы (P12/.pfx) не работают. При использовании PEM-файла в файле необходимо добавить закрытый ключ и СЕРТИФИКАТ . Вам не нужно префиксировать путь так @ же, как и с другими командами az.

az login --service-principal \
         --username myServicePrincipalID \
         --tenant myOwnerOrganizationId \
         --password /path/to/cert

Next Steps

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