将 Azure 服务主体与基于密码的身份验证配合使用

在创建服务主体时,需选择其使用的登录身份验证的类型。 Azure 服务主体可以使用两种类型的身份验证:基于密码的身份验证基于证书的身份验证。 了解服务主体时,最好使用基于密码的身份验证,但我们建议对应用程序使用 基于证书的身份验证

本教程中的此步骤介绍如何使用服务主体密码访问 Azure 资源。

创建包含密码的服务主体

az ad sp create-for-rbac 的默认行为是创建具有随机密码的服务主体。

az ad sp create-for-rbac --name myServicePrincipalName \
                         --role reader \
                         --scopes /subscriptions/mySubscriptionId/resourceGroups/myResourceGroupName

输出控制台:

{
  "appId": "myServicePrincipalId",
  "displayName": "myServicePrincipalName",
  "password": "myServicePrincipalPassword",
  "tenant": "myOrganizationTenantId"
}

具有密码身份验证的服务主体的输出包括 password 密钥。 请确保复制此值 - 它不可检索。 如果您丢失了密码,请重置服务主体凭据

使用服务主体账号和密码登录

通过登录来测试新的服务主体的凭证和权限。 若要使用服务主体登录,需要 appId (也称为“服务主体 ID”、“用户名”或“被分配者 tenant”),以及 password。 下面是一个示例:

az login --service-principal \
         --username myServicePrincipalId \
         --password myServicePrincipalPassword \
         --tenant myOrganizationTenantID

如果您不知道appId--tenant,请使用az ad sp list命令来检索它。

spID=$(az ad sp list --display-name myServicePrincipalName --query "[].{spID:appId}" --output tsv)
tenantID=$(az ad sp list --display-name myServicePrincipalName --query "[].{tenant:appOwnerOrganizationId}" --output tsv)
echo "Using appId $spID in tenant $tenantID"

az login --service-principal \
         --username $spID \
         --password {paste your password here} \
         --tenant $tenantID

如果要在需要双重身份验证的组织中进行测试,错误消息“...需要交互式身份验证...”显示。 或者,使用证书或 托管标识

重要

如果想要避免在控制台中显示自己的密码并以交互方式使用 az login,请在 read -s 中使用 bash 命令。

read -sp "Azure password: " AZ_PASS && echo && az login --service-principal -u <app-id> -p $AZ_PASS --tenant <tenant>

在 PowerShell 中,使用 Get-Credential cmdlet。

$AzCred = Get-Credential -UserName <app-id>
az login --service-principal -u $AzCred.UserName -p $AzCred.GetNetworkCredential().Password --tenant <tenant>

后续步骤

了解如何使用密码处理服务主体后,请继续执行下一步,了解如何将服务主体与基于证书的身份验证配合使用。