如何列出 Azure Active Directory 中所有过期的服务主体凭据

如何列出 Azure Active Directory 中所有过期的服务主体凭据

我最近遇到了一个问题,结果发现是由过期的服务主体凭据引起的。我希望有一种简单的方法来获取所有到期日期/过期的 sp 凭据的列表,以避免将来出现此问题。我一直在查看 odata 和 jsonpath 文档,但总是出现错误。
目前我可以在 AZ CLI 中运行此命令:

az ad sp list --all --query "[*].[appId]" -o tsv | xargs -I 1 az ad sp credential list --id 1 --query "[].endDate" > end.txt

这将生成一个 json 数组或所有endDates,但是它不会保存appId与 相对应的endDate,并且对于没有任何凭据的服务主体,会在终端中打印如下错误消息:

ERROR: Can't find associated application id from '00000000-0000-0000-0000-000000000000'

有 2 件事我想解决。1 :通过仅获取具有 的
来避免ERROR上述消息。我尝试添加过滤器来实现此目的:appIdoauth2Permissionsany()

az ad sp list --all --filter "oauth2permissions/any()" --query "[*].[appId]" -o tsv | xargs -I 1 az ad sp credential list --id 1 --query "[].endDate" > end.txt

但是我尝试过的这个和其他的变化都会导致错误或状态Collection open properties are not supported in this release.什么是正确/最好的方法?

2:为了利用输出结束日期,我希望 endDate 附带一些有关 SP 的信息,至少是。因此,我希望元素是类似于以下的字典,appId而不仅仅是列表元素:["2021-05-27T15:39:26.667907+00:00"]

[
  {
    "appId": "00000000-0000-0000-0000-000000000000"
    "endDate": "2021-05-27T15:39:26.667907+00:00"
  }
]

如果凭证本身有该appId字段,那么这将很简单,但凭证本身没有。我该如何向输出添加信息?

除了分别解决这两个问题之外,是否有其他工具/解决方案可以在单个命令中提供类似的最终输出?

答案1

微软最近发布了一些可以帮助查找过期凭据/证书的 PS 脚本。链接如下:https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/app-management-powershell-samples

答案2

我最近遇到了一个问题,结果发现是由于服务主体凭证过期引起的。

几天前我遇到了类似的问题,并以不同的方式解决了它,但与您尝试实现的解决方案非常相似(我认为)。

为了解决您描述的两个问题,我最终得到了这个(不是最优雅的,但运行良好):

az ad sp list --all --output tsv \
  --query "[? publisherName=='<COMPANY_DOMAIN>' && oauth2Permissions[0]!=null].[appId]" \
  | xargs -I 1 bash -c "eval az ad sp credential list \
    --id 1 --output json --query "[].\{endDate:endDate\}" \
    | jq '. | select(. | . != []) | .[] += {\"appId\": \"1\"}'"
  1. 应该[? publisherName=='<COMPANY_DOMAIN>' && oauth2Permissions[0]!=null]解决这些问题can't find associated application idcollection open properties are not supported in this release错误。
  2. 将会+= {\"appId\": \"1\"}把附加appId到列表中,并1用正确的值替换(来自 xargs)。

我希望这有帮助。

相关内容