Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是Azure服务主体?_Azure_Azure Cli - Fatal编程技术网

什么是Azure服务主体?

什么是Azure服务主体?,azure,azure-cli,Azure,Azure Cli,我的要求很简单。我想在非交互模式下通过shell脚本登录Azure,但“az login-u username-p password”命令会出现以下错误: Get Token request returned http error: 400 and server response: {"error":"invalid_grant","error_description":"AADSTS70002: Error validating credentials. : SAML token is inv

我的要求很简单。我想在非交互模式下通过shell脚本登录Azure,但“az login-u username-p password”命令会出现以下错误:

Get Token request returned http error: 400 and server response: {"error":"invalid_grant","error_description":"AADSTS70002: Error validating credentials. : SAML token is invalid. : The element with ID 'xxxxxx' was either unsigned or the signature was invalid.
一些网站告诉我创建一个服务主体。现在我的问题是,什么是服务主体,如何创建服务主体,以便从shell脚本中执行命令(用于创建不同的资源,如app gateway)?

给你:

当您的应用程序需要访问或修改资源时,必须设置Azure Active Directory(AD)应用程序并为其分配所需的权限。这种方法比使用您自己的凭据运行应用程序更可取,因为:

  • 您可以为应用程序标识分配不同于您自己权限的权限。通常,这些权限仅限于应用程序需要执行的操作
  • 如果您的职责发生变化,您不必更改应用程序的凭据
  • 在执行无人参与脚本时,可以使用证书自动进行身份验证
请参考这个

Azure服务主体是用户创建的应用程序使用的安全标识 用于访问特定Azure的应用程序、服务和自动化工具 资源。将其视为“用户身份”(登录名和密码或密码) 证书),具有特定的角色和严格控制的权限 访问您的资源。它只需要能够做具体的工作 与一般用户标识不同的是。它提高了安全性,如果你 仅授予它执行其任务所需的最低权限级别 管理任务

如果要使用Azure CLi 2.0创建新的服务主体(sp)。您可以使用Azure AD用户登录。然后执行以下命令

az ad sp create-for-rbac --name {appId} --password "{strong password}"
az login --service-principal -u <appid> --password {password-or-path-to-cert} --tenant {tenant}
结果如下:

{
  "appId": "a487e0c1-82af-47d9-9a0b-af184eb87646d",
  "displayName": "MyDemoWebApp",
  "name": "http://MyDemoWebApp",
  "password": {strong password},
  "tenant": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}
appId
是您的登录用户,
password
是登录密码

创建sp后,您还需要赋予它
Contributor
角色,然后您可以管理Azure资源

az role assignment create --assignee <objectID> --role Contributor
az角色分配创建--受让人--角色贡献者
现在,您可以使用以下命令以非交互模式登录

az ad sp create-for-rbac --name {appId} --password "{strong password}"
az login --service-principal -u <appid> --password {password-or-path-to-cert} --tenant {tenant}
az登录--服务主体-u--密码{密码或证书路径}--租户{租户}

服务主体只是在Azure AD中充当用户的模拟。请参阅-


使用此工具,您可以使用RESTAPI对Azure执行任何类型的管理任务。通过这种方式,您可以避免在弹出窗口中提供凭据,从而帮助使用REST API在Azure中实现自动化。

Hi Shen将尝试一下,如果您有任何问题,请稍后与您联系,请在此处发布。此处的appid是什么?我的问题是,我需要根据shell资源中的certin计算部署多个资源。当您使用cli 2.0登录Azure时,这些资源可能是公共Ip或应用程序网关等。appid是用户名。它也被称为客户端id。密码被称为客户端机密。@ShuiShengbao我被一些文章和示例弄糊涂了,这些文章和示例说明必须首先在Azure AD中创建应用程序,并且必须使用相应的AppId来创建服务主体。而您的答案直接创建了服务主体。其他一些文章交替使用服务主体和应用程序,这让我更加不知所措!你能帮我澄清一下吗?