powershell 使用托管标识访问Azure AD

31moq8wy  于 2022-11-10  发布在  Shell
关注(0)|答案(2)|浏览(189)

我熟悉如何向Azure中的服务主体(或应用程序注册)授予API权限访问权限,但我们已经在Azure VM上管理了身份设置,我想使用它(通过PowerShell)来查询我们的应用程序注册。
当我运行下面的.

$Applications = Get-AzADApplication

我收到以下错误...

Get-AzADApplication : Insufficient privileges to complete the operation.

即使我将自己PIM为应用程序管理员角色,也会发生这种情况,因此我不确定问题是什么。
Get-AzureADApplication命令运行得很好,但是因为我想自动运行这个脚本,所以我不想运行‘Connect-azuread’(它会提示我登录)……

Get-AzureADApplication : You must call the Connect-AzureAD cmdlet before calling any other cmdlets.

..。这就是为什么我希望使用托管身份。
我不知道在哪里可以检查托管身份拥有什么访问权限,因为没有要查看的‘API权限’。..。除非我错过了什么。
有什么主意吗?

fhity93d

fhity93d1#

由于您已将应用程序管理员角色分配给您的托管身份,因此您可以使用以下脚本连接到Azure AD:

Connect-azaccount -identity
$context = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile.DefaultContext
$graphToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, "https://graph.microsoft.com").AccessToken
$aadToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, "https://graph.windows.net").AccessToken
Write-Output "Hi I'm $($context.Account.Id)"
Connect-AzureAD -AadAccessToken $aadToken -AccountId $context.Account.Id -TenantId $context.tenant.id

然后,您就可以运行Get-AzureADApplication命令

wbgh16ku

wbgh16ku2#

只需使用托管身份执行一些自动化操作,这就奏效了。因此,如果您希望它看起来更像PowerShell,您可以使用以下命令:

Disable-AzContextAutosave -Scope Process
$AzureContext = (Connect-AzAccount -Identity).context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext
$token = (Get-AzAccessToken -ResourceTypeName AadGraph).token
Connect-AzureAD -AadAccessToken $token -AccountId $AzureContext.Account -TenantId $AzureContext.Tenant

您将需要Az.Account和AzureAD PowerShell模块。此外,托管身份还需要适当的权限(可能是AAD的目录读取器和订阅的读取器)。

相关问题