我的要求很简单我想通过我的shell脚本以非拦截模式登录z,但是“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网关等不同的资源)?
答案 0 :(得分:6)
请参阅此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}
答案 1 :(得分:1)
如果您的应用程序需要访问或修改资源,则必须设置Azure Active Directory(AD)应用程序并为其分配所需的权限。这种方法比使用您自己的凭据运行应用程序更可取,因为:
- 您可以为应用程序标识分配与您自己的权限不同的权限。通常,这些权限仅限于应用程序需要执行的操作。
- 如果您的职责发生变化,您无需更改应用的凭据。
- 执行无人参与脚本时,您可以使用证书自动执行身份验证。
答案 2 :(得分:0)
服务主体仅充当Azure AD中用户的模拟。请参阅-https://sanganakauthority.blogspot.com/2019/04/how-to-create-service-principal-or-app.html
使用此功能,您可以使用REST API对Azure执行任何类型的管理任务。这样,您就无需在弹出窗口中提供凭据,从而避免使用REST API在Azure中自动执行操作。