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) 应用事件网格并使用您需要的逻辑处理事件。
我在 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) 应用事件网格并使用您需要的逻辑处理事件。