代码之家  ›  专栏  ›  技术社区  ›  BlindSniper

什么是Azure服务主体?

  •  51
  • BlindSniper  · 技术社区  · 8 年前

    我的要求很简单。我想在非交互模式下通过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)?

    3 回复  |  直到 6 年前
        1
  •  61
  •   Shui shengbao    8 年前

    请参考此 official document .

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

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

    az ad sp create-for-rbac --name {appId} --password "{strong password}"
    

    结果如下:

    {
      "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 login --service-principal -u <appid> --password {password-or-path-to-cert} --tenant {tenant}
    
        2
  •  7
  •   kunal    7 年前

    服务主体只是Azure AD中用户的模拟。请参阅- https://sanganakauthority.blogspot.com/2019/04/how-to-create-service-principal-or-app.html

    使用此功能,您可以使用REST API对Azure执行任何类型的管理任务。这样,您就避免了在弹出窗口中提供凭据的需要,从而有助于使用RESTAPI在Azure中实现自动化。

        3
  •  5
  •   rickvdbosch    8 年前

    给你: Use portal to create an Azure Active Directory application and service principal that can access resources .

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

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