获取所有服务主体的证书状态,例如证书是否在 Azure 中无效,以及最终它们在 Azure 中连接到的内容

问题描述

我有很多服务原则没有得到应有的维护。它们用于不同的管道,只有天知道是什么。

我正在尝试找出一种方法获取无效服务原则的列表。我可以通过使用 Get-AzADServicePrincipal 获取所有服务原则,但这只会获取我的身份信息,而不是证书状态。

Azure Resource Graph 似乎也不会给我这些信息。

所以我想知道是否有我不知道的获取这些信息的技巧。

编辑: 查看akb的答案后,脚本的第一部分将类似于

$value = Get-AzADServicePrincipal

$principleWithOutdatedCertList = [System.Collections.ArrayList]@()
$principlesWithNoCerts = [System.Collections.ArrayList]@()

for($num=1;$num -le $value.Count;$num++)
{
    $cert = Get-AzADSpCredential -ObjectId $value[$num].Id
    if ($cert.EndDate -lt (Get-Date)){
        $principleWithOutdatedCertList.Add($value[$num].Id)
        Write-Output $value[$num].Id
    }
    if($null -eq $cert)
    {
        $principlesWithNoCerts.Add($value[$num].Id)
    }
}

现在只是将这些服务原则连接到他们需要的资源:)

解决方法

此脚本将提供服务负责人是否拥有证书的信息

$value = Get-AzADServicePrincipal
$date = Get-Date -Format d
for($num=0;$num -le $value.Count;$num++)
{
    echo $value[$num].Id
    $cert = Get-AzADSpCredential -ObjectId $value[$num].Id
    if($cert -eq $null)
    {
        echo $value[$num].DisplayName "has no certs"
    }
    else
    {
        for($i=0;$i -le $cert.Count;$i++)
        {
            if($cert[$i].EndDate -gt $date)
            {
                echo $value[$num].DisplayName "has valid certs"
            }
        }
    }
    
}