AzureADのエンタープライズアプリケーション(SAMLアプリ)の証明書の期限一覧を出す

AzureADを管理するうえで避けれないのが SAML連携済みのアプリの証明書の失効 ちまちまとGUIで確認したくなかったのでコマンドラインでなんとかならんかなと思い、なんとかしてみました。

どうやるかというと

  1. Azureポータル開く。
  2. Cloud Shellを開く。
    • 右上のコレ
    • f:id:undersooon:20211118151815p:plain
  3. 下記をコピペして貼る。
  4. 終わったらダウンロードボタンからダウンロード。
    • Cloud Shellのメニューの中にあるコレ
    • f:id:undersooon:20211118152701p:plain
    • Cloud Shellのメニューの中にあるコレ
    • 下記スクリプトの例では「EnterpriseAppsList.csv」という名前でCSV出力するようにしています。
  5. 以上
#参考元
#https://docs.microsoft.com/ja-jp/azure/active-directory/manage-apps/scripts/powershell-export-all-enterprise-apps-secrets-and-certs

Connect-AzureAD #AzureADに接続

#現状のエンタープライズアプリケーションを全て出力
$EnterpriseApps = Get-AzureADServicePrincipal -all $true
$Logs = @() #初期値

$Path = ".\EnterpriseAppsList.csv" #ログ出力先

foreach ($Eapp in $EnterpriseApps) {
    $EndDateString = "" #初期値
    $Log = New-Object System.Object #初期値
    $DisplayName = $Eapp.DisplayName
    $ObjectId = $Eapp.ObjectId
    $PublisherName = $Eapp.PublisherName #アプリ発行元
    $EndDate = $Eapp."KeyCredentials"."EndDate" #証明書失効日
    
    #Publisherで不要アプリを判別: Microsoft提供のものを無視
    #「Azure Graph」などデフォルトアプリを除く
    #※Microsoft提供のSaaSとSAML連携していたら除かれてしまうかも。でもそういう製品あるのかわからない。
    if ( $PublisherName -Match "^Microsoft.*"){
        continue
    }
    #Publisherで不要アプリを判別: Publisherが空の場合も無視。
    if ( $PublisherName -eq $Null){
        continue
    }
    
    #ログを見やすくするためにyyyy/MM/dd形式に変換
    if ( $EndDate -ne $Null ){
        $EndDateString = $EndDate[0].toString("yyyy/MM/dd")
    }
    
    #ログ出力
    $Log | Add-Member -MemberType NoteProperty -Name "DisplayName" -Value $DisplayName
    $Log | Add-Member -MemberType NoteProperty -Name "ObjectId" -Value $ObjectId
    $Log | Add-Member -MemberType NoteProperty -Name "EndDate" -Value $EndDateString
    $Logs += $Log
}

#ログをCSVにエクスポート
$Logs | Export-CSV $Path -NoTypeInformation -Encoding UTF8