你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure CLI 创建 Azure 服务主体
使用 Azure 服务的自动化工具的权限应始终受到限制,以确保 Azure 资源的安全。 因此,Azure 提供了服务主体,而不是让应用程序以具有完全特权的用户身份登录。 Azure 服务主体是为与应用程序、托管服务和自动化工具配合使用而创建的标识。 此标识用于访问资源。
本教程介绍如何执行下列操作:
- 创建服务主体
- 使用服务主体和密码登录
- 使用服务主体和证书登录
- 管理服务主体角色
- 使用服务主体创建 Azure 资源
- 重置服务主体凭据
先决条件
- 在订阅中,必须具有
User Access Administrator
或Role Based Access Control Administrator
权限或更高权限才能创建服务主体。 有关可用于 Azure 基于角色的访问控制 (Azure RBAC) 的角色列表,请参阅 Azure 内置角色。
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 中的 Bash 快速入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 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 内置角色。获取范围参数的值。
查找并复制新服务主体需访问的 Azure 资源的资源 ID。 此信息通常可在 Azure 门户的属性或每个资源的终结点页中找到。 下面是常见的
--scopes
示例,但依赖于实际格式和值的资源 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 的范围。
创建服务主体。
在此示例中,会新建名为myServicePrincipalName1的服务主体,该服务主体对资源组RG1中的所有资源具有读取者权限。
# Bash script az ad sp create-for-rbac --name myServicePrincipalName1 \ --role reader \ --scopes /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG1
--scopes
参数接受以空格分隔的范围列表。 在此示例中,会新建名为myServicePrincipalName2的服务主体,该服务主体对资源组myRG1中的所有资源具有读取者权限。 此服务主体还将获得针对myVM(位于myRG2中)的读取者权限。# 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 服务主体后,请继续执行下一步,了解如何通过基于密码的身份验证来使用服务主体。