使用 Azure 服务的自动化工具应始终具有受限的权限,以确保 Azure 资源安全。 因此,Azure 提供服务主体,而不是让应用程序以完全特权用户的身份登录。 Azure 服务主体是为应用程序、托管服务和自动化工具创建的身份。 此标识用于访问资源。
本教程中,您将学习如何:
- 创建服务主体
- 使用服务主体和密码登录
- 使用服务主体和证书登录
- 管理服务主体角色
- 使用服务主体创建 Azure 资源
- 重置服务主体凭据
先决条件
- 在订阅中,必须具有
User Access Administrator
或Role Based Access Control Administrator
权限或更高权限才能创建服务主体。 有关可用于 Azure 基于角色的访问控制的角色列表(Azure RBAC),请参阅 Azure 内置角色。
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅 使用 Azure CLI 向 Azure 进行身份验证。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 使用和管理 Azure CLI 中的扩展。
运行az version命令,以查看已安装的版本和依赖库。 若要升级到最新版本,请运行az upgrade。
创建服务主体
使用 az ad sp create-for-rbac Azure CLI 参考命令创建服务主体。 此示例未指定 --name
参数,因此会自动创建包含时间戳的名称。
az ad sp create-for-rbac
输出控制台:
{
"appId": "myAppId",
"displayName": "myServicePrincipalName",
"password": "myServicePrincipalPassword",
"tenant": "myTentantId"
}
如果以后不遵循资源命名约定并计划为新服务主体创建角色和范围,则不带参数的 az ad sp create-for-rbac
命令是可接受的解决方案。 但是,如果没有角色和范围,新服务主体无权访问资源。 它只是存在。
在不使用参数的情况下创建服务主体时,还要完成以下步骤:
- 记录系统分配的密码,因为无法再次检索密码。 如果丢失密码,请使用 az ad sp credential reset 进行重置 ,如 重置服务主体凭据中所述。
- 使用 az role assignment create 为新的服务主体设置角色分配,如 管理服务主体角色中所述。
注释
如果您的账户没有创建服务主体的权限,az ad sp create-for-rbac
会返回一条包含“权限不足,无法完成操作”的错误消息。 请联系您的 Microsoft Entra 管理员以创建服务主体。
在 Microsoft Entra ID 目录中,当用户设置 用户可以注册应用程序 已设置为 否 时,您必须是以下 Microsoft Entra ID 内置角色之一的成员(这些角色具有操作:microsoft.directory/applications/createAsOwner
或 microsoft.directory/applications/create
):
有关 Microsoft Entra ID 中用户设置的更多信息,请参阅限制谁可以创建应用程序。
创建具有角色和范围的服务主体
始终在创建服务主体时分配特定的--role
和 --scopes
是最佳做法。 执行以下步骤:
确定正确的角色。
确定角色时,请始终使用最低特权原则。 例如,如果服务主体只需要访问资源组中的 Azure 存储,请不要向订阅授予服务主体
contributor
权限。 考虑一个专门的角色,例如 存储 Blob 数据贡献者。 有关 Azure RBAC 中可用角色的完整列表,请参阅 Azure 内置角色。获取 scopes 参数的值。
查找并复制新服务主体需要访问的 Azure 资源 的资源 ID 。 此信息通常在 Azure 门户的每个资源的 “属性 ”或 “终结点 ”页中找到。 下面是常见
--scopes
示例,但对于实际格式和数值,请依赖您的Resource ID。范围 示例: 订阅 /subscriptions/mySubscriptionID
资源组 /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName
虚拟机 /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachines/myVMname
存储帐户文件服务 /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.Storage/storageAccounts/myStorageAccountName/fileServices/default
数据工厂 /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.DataFactory/factories/myDataFactoryName
有关更多范围示例,请参阅 了解 Azure RBAC 的范围。
创建服务主体。
在此示例中,将使用对资源组 RG1 中的所有资源的读取者权限创建名为 myServicePrincipalName1 的新服务主体。
# Bash script az ad sp create-for-rbac --name myServicePrincipalName1 \ --role reader \ --scopes /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG1
该
--scopes
参数接受以空格分隔的范围列表。 在此示例中,将使用对资源组 myRG1 中的所有资源的读取者权限创建名为 myServicePrincipalName2 的新服务主体。 此服务主体还被授予在 myRG2 中的 myVM 的 读取者权限。# Bash script az ad sp create-for-rbac --name myServicePrincipalName2 \ --role reader \ --scopes /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG2/providers/Microsoft.Compute/virtualMachines/myVM
如果你决定授予对新服务主体的权限太少或太多,请通过 管理服务主体角色来更改权限。
使用变量创建服务主体
还可以使用变量创建服务主体:
# Bash script
let "randomIdentifier=$RANDOM*$RANDOM"
servicePrincipalName="msdocs-sp-$randomIdentifier"
roleName="azureRoleName"
subscriptionID=$(az account show --query id --output tsv)
# Verify the ID of the active subscription
echo "Using subscription ID $subscriptionID"
resourceGroup="myResourceGroupName"
echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup"
az ad sp create-for-rbac --name $servicePrincipalName \
--role $roleName \
--scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup
有关服务主体属性的完整列表,请使用 az ad sp list,并参阅 获取现有服务主体。
警告
使用 az ad sp create-for-rbac
命令创建 Azure 服务主体时,输出包含必须保护的凭据。 请确保没有将这些凭据包含在代码中,也没有将凭据签入到源代码管理中。 或者,请考虑使用 托管标识(如果可用),以避免需要使用凭据。
后续步骤
了解如何创建 Azure 服务主体后,请继续执行下一步,了解如何将服务主体与基于密码的身份验证配合使用。