服务主体 az cli 登录失败 - 未找到订阅

phy*_*man 7 powershell azure azure-cli azure-cli2

尝试az cli使用服务主体执行登录并抛出错误说明No subscriptions found for <Service_Principal_AppId>. If this is expected, use '--allow-no-subscriptions'. 此代码以前运行良好,但现在似乎不再起作用。正在使用的命令行如下:

$sp_appid = (Get-AzureRmADServicePrincipal -DisplayName $spDisplayName).ApplicationId.Guid
$sp_secret = (Get-AzureKeyVaultSecret -VaultName $kvName -Name $appKeySecretName).SecretValueText
az login --service-principal --username $sp_appid --password $sp_secret --tenant $tenant_Id
Run Code Online (Sandbox Code Playgroud)

我验证了Contributor在订阅级别为服务主体分配了角色。

Ben*_*jam 25

在中创建服务主体后,Azure Active Directory您需要为该新用户提供订阅中的一些角色:

  • 转到您的订阅
  • Access Control (IAM)
  • 添加roles assignment(例如使您的服务主体contributor

然后az login应该可以工作。

  • 有关更多详细信息,请参阅[在门户中创建 Azure AD 应用程序和服务主体 - Microsoft 身份平台 | Microsoft 文档](https://learn.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal)。 (2认同)

RSW*_*RSW 7

对我来说,运行缓存清除有效:

az cache purge

另外,如果它仍然不起作用,请尝试使用以下命令打印详细信息:

az login --verbose


Joy*_*ang 2

实际上,我不建议您将 Azure Powershell 和 CLI 混合在一起。如果你坚持这样做,我已经尝试过你的脚本,我无法重现你的问题,它工作正常。根据错误,你可以尝试传递 a --subscription,它也可以。

$sp_appid = (Get-AzADServicePrincipal -DisplayName joywebapp2).ApplicationId.Guid
$sp_secret = (Get-AzKeyVaultSecret -VaultName joykeyvault1 -Name joywebapp2).SecretValueText
$tenant_Id = "xxxxxxxxxxxx"
$subscription_Id = "xxxxxxxxxxx"
az login --service-principal --username $sp_appid --password $sp_secret --tenant $tenant_Id --subscription $subscription_Id
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

注意:由于AzureRMpowershell模块已被弃用,我使用新的Azpowershell模块,如果你想升级到Az,请参阅此链接。(可能不是问题的原因,但我建议您升级。)

更新

我们必须仅使用 AZ CLI 来获取我们想要获取的属性...没有 PowerShell 等效项。

实际上你可以通过 powershell 使用服务主体登录,这strong password是秘密,更多详细信息请参阅这篇文章

$azureAplicationId ="Azure AD Application Id"
$azureTenantId= "Your Tenant Id"
$azurePassword = ConvertTo-SecureString "strong password" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($azureAplicationId , $azurePassword)
Add-AzureRmAccount -Credential $psCred -TenantId $azureTenantId  -ServicePrincipal
Run Code Online (Sandbox Code Playgroud)

  • az login 不接受订阅参数。错误:无法识别的参数:--subscription 7cd27cfd-2ba5-4907-a46b-b0eb4b992636 (3认同)