Как составить список всех учетных данных субъекта-службы с истекшим сроком действия в активном каталоге Azure

Недавно у меня возникла проблема, которая оказалась вызвана истекшим сроком действия учетных данных субъекта-службы. Я хотел бы иметь простой способ получить список всех дат истечения срока действия/учетных данных sp с истекшим сроком действия, чтобы избежать этой проблемы в будущем. Я просматривал документацию по odata и jsonpath, но постоянно получал ошибки.
В настоящее время я могу запустить эту команду в CLI AZ:

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

Это генерирует массив json или все s, однако не сохраняет тот, который соответствуетendDateа для субъектов-служб, у которых нет учетных данных, в терминале печатается подобное сообщение об ошибке:

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

Есть 2 вещи, которые я хотел бы решить.
1: Чтобы избежатьERRORсообщения, описанные выше, получая только те сообщения, которые имеютoauth2Permissions. Я попробовал добавитьany()фильтр для достижения этого:

      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, по крайней мере, файлом . Поэтому вместо того, чтобы просто иметь элемент списка, например["2021-05-27T15:39:26.667907+00:00"]Я бы хотел, чтобы элементы были словарями, похожими на:

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

Это было бы просто, если бы сами учетные данные имелиappIdполе, но это не так. Как добавить информацию в вывод?

В качестве альтернативы решению этих двух проблем по отдельности, существует ли другой инструмент/решение, которое обеспечит аналогичный конечный результат в одной команде?

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. The [? publisherName=='<COMPANY_DOMAIN>' && oauth2Permissions[0]!=null]следует обойти этиcan't find associated application idиcollection open properties are not supported in this releaseошибки.
  2. The += {\"appId\": \"1\"}добавитappIdв список, заменив это1(из xargs) с правильным значением.

Надеюсь, это поможет.

Microsoft недавно выпустила несколько сценариев PS, которые могут помочь в поиске кредитов/сертификатов с истекшим сроком действия. Ссылка следующая: https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/app-management-powershell-samples .

Другие вопросы по тегам