Azure 中的服务主体监控

Service principal monitoring in azure

我在 powershell 中创建了一个脚本,用于检查 azure.The 中服务主体的到期日期 如果我直接在云中执行它,脚本本身工作正常 shell.But 这不是我要的 want.I 希望脚本可以由天蓝色的 运行book 执行,所以我创建了 运行book 以及“运行 作为帐户” user.The 问题是“运行 作为帐户”没有 运行 cmdlet“get-azadapplication”和“get-azadserviceprincipal”的权限。经过一些研究,我发现该用户需要全局 reader 权限AAD.Is 还有另一种方法如何在没有全局 reader 的情况下监控服务主体?有人实施了类似的解决方案吗?

例如,这是一个简单的代码来显示我得到的错误

#Connect to Azure
$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName         

    Connect-AzAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
}

#get all subscriptions
get-azsubscription

# read the credential for user sp-acr-c4r-pull
get-azadserviceprincipal -displayname sp-acr-c4r-pull | get-azadspcredential

然后当我 运行 运行book

时出现此错误
    Account                              SubscriptionName                 TenantId
-------                              ----------------                 -------- 
*                                        Cloud_Test…                        *
Cloud_Test
Get-AzADServicePrincipal: C:\Temps0vpqu0.tms
Line |
  30 |  get-azadserviceprincipal -displayname sp-acr-c4r-pull | get-azadspcre …
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Insufficient privileges to complete the operation.

如您所见,我可以 运行 get-azadsubscription 但不能 get-azadserviceprincipal

如果您不愿意授予它所需的权限,您希望 Runbook 如何从您的目录中读取数据?

您唯一的选择是为服务主体分配某种权限。全局 reader 对我来说似乎还不错,但如果那是不可接受的,您可以考虑制作自定义角色:https://docs.microsoft.com/en-us/azure/active-directory/roles/custom-create

您可以在 Key Vault 中创建一个条目(例如机密),其到期日期等于服务主体机密的到期日期。然后只需从该 Key Vault (https://docs.microsoft.com/en-us/azure/key-vault/general/event-grid-overview) and send event for e.g. Microsoft.KeyVault.SecretNearExpiry or Microsoft.KeyVault.SecretExpired (https://docs.microsoft.com/en-us/azure/event-grid/event-schema-key-vault?tabs=event-grid-event-schema) 应用事件网格并使用您需要的逻辑处理事件。