若要访问Azure REST API(如Log Analytics API),或发送自定义指标,请基于客户端 ID 和机密生成授权令牌。 在 REST API 请求中传递令牌。 本文介绍如何注册客户端应用并创建客户端密码以生成令牌。
先决条件
注册应用程序
使用Azure门户、Azure CLI或Azure PowerShell创建服务主体并注册应用。
若要注册应用,请在Azure门户中打开“Microsoft Entra ID概述”页。
从侧栏中选择 “应用注册 ”。
选择“新建注册”
在“注册应用程序”页上,输入应用程序的名称。
选择注册
在应用的概述页上,选择 “证书和机密”
记下 应用程序(客户端)ID。 它用于获取令牌的 HTTP 请求中。
在“客户端机密”选项卡中,选择“新建客户端密码”
输入说明并选择添加
复制并保存客户端密码值。
注释
客户端密码值只能在创建后立即查看。 请确保在离开该页面之前保存该机密。
为要通过 API 访问的资源为应用分配角色:
- 在Azure门户中,转到要向其授予访问权限的资源、资源组或订阅,然后选择访问控制(IAM)。
- 选择“添加”>“添加角色分配”。
- 在“ 角色 ”选项卡上,选择“ 读取者 ”角色,然后选择“ 下一步”。
- 在“ 成员 ”选项卡上,选择“ 分配对>用户、组或服务主体的访问权限”,然后选择“ 选择成员 ”并选择你的应用。
- 选择审核 + 分配。
以下Azure CLI示例使用az ad sp create-for-rbac命令。 它使用--name参数创建Microsoft Entra应用程序和服务主体。
# Set variables
servicePrincipalName="<ServicePrincipalDisplayName>"
# Create the service principal and app registration
az ad sp create-for-rbac --name "$servicePrincipalName"
响应如下所示:
{
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"displayName": "AzMonAPIApp",
"password": "123456.ABCDE.~XYZ876123ABcEdB7169",
"tenant": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
}
重要
输出包括必须保护的凭据。 不要把这些凭据写入代码,也不要将其提交到源代码管理系统。
以下Azure CLI示例使用az role assignment create命令。 它使用 --scope 参数向服务主体授予对使用 API 面向的资源的访问权限。
# Set variables
appId="<AppId>"
roleName="<RoleName>"
scope="<ScopeResourceId>"
# Assign the role to the service principal
az role assignment create \
--assignee "$appId" \
--role "$roleName" \
--scope "$scope"
以下Azure PowerShell示例使用 New-AzADServicePrincipal cmdlet。 它会创建应用注册,并使用 Scope 参数分配角色。
# Set variables
$servicePrincipalName = "<ServicePrincipalDisplayName>"
$roleName = "<RoleName>"
$scope = "<ScopeResourceId>"
# Create a Microsoft Entra application and service principal with an auto-generated credential
$servicePrincipal = New-AzADServicePrincipal -DisplayName $servicePrincipalName
# Save the generated secret securely. It can't be retrieved after this point.
$servicePrincipal.PasswordCredentials.SecretText
# Define parameters for New-AzRoleAssignment
$newAzRoleAssignmentParams = @{
RoleDefinitionName = $roleName
ServicePrincipalName = $servicePrincipal.AppId
Scope = $scope
}
# Assign the role to the service principal
New-AzRoleAssignment @newAzRoleAssignmentParams
后续步骤
你注册了一个应用,并为其分配了一个角色。 接下来,使用应用、客户端 ID 和客户端密码生成持有者令牌来访问 REST API。
分配的角色取决于资源类型和使用的 API。 例如:
有关分配角色的详细信息,请参阅 使用 Azure 门户分配 Azure 角色。
注释
使用Microsoft Entra身份验证时,Azure 应用程序 Insights REST API 可能需要长达 60 分钟才能识别新的基于角色的访问控制(RBAC)权限。 虽然权限正在传播,但 REST API 调用可能会失败,错误代码为 403。