0
votes

Journal d'activité Azure

Je veux surveiller qui a effectué une modification de la mission RBAC, j'ai créé le script PowerShell pour les données de collecte du journal d'activité Azure. J'ai utilisé ci-dessous un morceau de code. En utilisant cette solution, je suis capable d'obtenir des articles comme: appelant - utilisateur qui a fait un changement de rôle change, horodatage, Nom de la ressource - sur ce changement d'affectation de ressources a été fourni, Type d'action - Écrivez ou supprimez

dans le panneau de journal d'activité dans le portail Azure, dans le portail récapitulatif (message: partagé avec "Info utilisateur"), je peux voir le nom d'un utilisateur qui a reçu des autorisations / affectation à la ressource, mais Utilisation de mon script PowerShell, je ne suis pas en mesure d'attraper ces informations, y a-t-il une méthode pour obtenir cette information? P>

Caller         : username@xxx.com
Resource   :/subscriptions/xxxx/resourceGroups/Powershell/providers/Microsoft.Compute/virtualMachines/xx/providers/Microsoft.Authorization/roleAssignments/xxxx
Action         : write
EventTimestamp : 8/29/2019 10:12:31 AM


0 commentaires

3 Réponses :


0
votes

Est-ce que cela fonctionne pour vous? XXX PRE>

My Sortie: P>

Caller         : username@domain.com
Resource       : /subscriptions/xxxx/resourceGroups/xxxx/providers/Microsoft.Authorization/roleAssignments/xxxx
Action         : write
Name           : John Doe
EventTimestamp : 30.08.2019 12.05.52


1 commentaires

Bonjour, pas exactement, sous le nom de propriété: John Doe, nous pouvons voir le nom d'un utilisateur qui a effectué Tha Change, nom = appelant, j'ai besoin de nom d'un utilisateur qui a reçu des autorisations / affectation à la ressource. Par exemple, si j'ajoute utilisateur1 au rôle RBAC dans la lame d'accès à la commande d'accès, Suivant (assignation de rôle), dans la sortie du script, j'ai besoin de son nom, User1.



0
votes

Assez certain que cela ne serait pas exposé avec cette cmdlet. Je ne vois même pas ces informations dans les missions de rôle. Donc, pas sûr que voulez-vous dire exactement?


3 commentaires

Vous pouvez voir cette information dans: Abonnement -> Journal d'audit -> Créer un filtre pour le fonctionnement, Tapez "Affectation de rôle" Choisissez les trois cases à cocher, tapez "Définition des rôles" Choisissez trois cases à cocher, modifier le filtre "Timespan" au mois dernier. Ensuite, événement de ramassage avec une description comme "Créer un mission de rôle", et dans l'onglet Résumé, vous verrez l'élément "partagé avec", et j'ai besoin de ce nom d'utilisateur à l'aide de PowerShell.


à droite, alors vous devriez faire de même, mais cela n'a aucun sens, car l'opération d'affectation aurait pu se produire il y a longtemps


Selon ceci -> "Mais cela n'a aucun sens, car l'opération d'affectation aurait pu se produire il y a longtemps" - J'ai besoin de capturer des modifications apportées à des ressources azur, telles que les nouveaux utilisateurs, la solution a donc un sens. Par exemple, une nouvelle mission sera créée le 1er Septembre, le script sera exécuté le 2 e de septembre et dans la sortie, vous verrez qui a fait une modification, sur quelle ressource, etc.



0
votes

Votre exigence de récupération du nom d'utilisateur à qui le rôle RBAC est attribué n'est actuellement pas pris en charge à l'aide de AZ PowerShell Cmdlet Get-azlog ou Get-Azurermog . Cependant, nous pouvons accomplir votre exigence en tirant parti de l'API de repos Azure pour Journaux d'activité - Liste et cmdlet AZ PowerShell Get-azreeaduser . P >

De cette façon, car nous dépendons de l'API de repos Azure pour Journaux d'activité - Liste (mais on dirait que vous voulez une manière de PowerShell d'accomplir l'exigence) Alors appelez l'API de repos dans PowerShell comme quelque chose indiqué ci-dessous. P>

$ActivityLogsFinalOutput| %{
    if(($_.properties.responseBody) -like "*principalId*"){
        $SplittedPrincipalID = $_.properties.responseBody -split "PrincipalID"
        $SplittedComma = $SplittedPrincipalID[1] -split ","
        $SplittedDoubleQuote = $SplittedComma[0] -split "`""
        $PrincipalID = $SplittedDoubleQuote[2]
        #Continue code for getting Azure AD User using above fetched $PrincipalID
        #...
        #...
    }
}


11 commentaires

Probablement votre réponse est correcte, mais je reçois toujours un message d'erreur -> "Invoke-ReatMethod: {" Erreur ": {" Code ":" InvalidAuthentiollingToken "," Message ":" Le jeton d'accès n'est pas valide. "}". J'ai créé une nouvelle PAT, avec un accès complet et j'ai essayé de lancer le script quelques fois et de faire face au même problème. Il y a quelque temps, j'ai eu un problème similaire et, après avoir été résolus quelque temps, je régénère ma tape peu de fois, peut-être que c'est une solution, essayera de lancer un script en 2 heures à nouveau avec une nouvelle clé PAT.


Je pense que je suis jeton que j'utilise est incorrect, savez-vous comment puis-je obtenir jeton que je peux utiliser avec invoke-reposmethod?


Oui je sais. Mise à jour de la réponse ci-dessus avec les informations requises en conséquence.


Merci pour votre Sullotion, mais expliquez où puis-je trouver $ Clientid, $ Clientsecret? Ceci est un script PowerShell Querrant des journaux d'activité Azure.


Sûr. ClientID, ClientsCretRetez l'ID d'application et le mot de passe d'application Azure AD Application (Service Principal) respectivement. Vous devrez peut-être générer un initialement une fois en utilisant New-AzadServicePRINCIPAL pour les obtenir. Pour plus d'informations, reportez-vous à Ceci doc. Alternativement AZ AD SP Create-for-RBAC est AZ CLI WAY.


J'ai $ AUTH, j'ai utilisé le script .PS1 du lien que vous avez proposé. J'ai utilisé $ filtrer = "EventTimeStamp Ge '2019-08-16T04: 36: 37.6407898Z" et EventTimeStamp Le' 2019-09-01t04: 36: 37.6407898Z '". Et j'ai une demande $ = "xxxxx / valeurs? API-Version = 2015-04-01 & $ filtre = {$ FILT ER}". J'ai exécuté cette ligne de code -> Invoke-ReatMethod -uriRi Demande $ -Déthod get -headers $ auththeader -ContentType "Application / JSON" et message d'erreur reçu -> "Invoke-RedemeThod: {" Code ":" BADREQUEST "," Message ":" Les critères de filtrage ne sont pas spécifiés. "}"


Eh bien, pour être précis, vous devriez avoir $ Demande = "xxxxx / valeurs? API-Version = 2015-04-01 &` $ filtre = {$ fil ter} "C'est-à-dire avoir un backquote juste avant" $ filtre "afin que son pas considéré comme variable. Une autre mise à jour est également une autre mise à jour d'invocation-reposmethod dans une variable I.E., "$ SORTIE = INVOKE-RESTMETHOD -URE Demande de Dethod get -headers $ Authheader" puis une ligne suivante.value ". En effet, toutes vos journaux d'activité requis sont stockées dans la propriété Note nommée "valeur" dans ce cas. J'ai mis à jour la réponse initiale avec ces changements légers et importants pour une référence facile.


Merci pour cette suggestion, ça marche bien !! Mais la dernière chose, je reçois des propriétés d'objet, comme je l'ai mentionné, j'ai besoin de "PrincipalID", cette propriété est imbriquée sous la propriété "Propriétés", comment puis-je obtenir ce "PrincipalID", j'ai essayé d'utiliser Select-Object - Developroperty, Mais n'a pas eu le résultat attendu. ci-dessous extraire de la sortie de script, la propriété "Propriétés": "@ {StatusCode = OK; ServiceReQuestid = xxxx; réponse de réponse = {" Propriétés ":" XXXX ":" XXXX "," Principalty PE ":" Utilisateur "," Portée " : "/ Abonnements / XXXX / Groupes de ressources / Coquille d'alimentation / Fournisseur / Virtua Lmachines / XXX", "Crea Tedon": "XXX"


Heureux que cela fonctionnait pour vous !! :) Vous pouvez développer le script de différentes manières possibles. Un seul exemple est montré dans la section "Update2" de la réponse. Je suis allé avec une approche mentionnée dans la section "Update2" de la réponse (tirant parti de "Split", "J'aime", etc.) car il n'y a pas de propriété de note spécifique ni d'un autre membre spécifique sous "La réponse de réponse" en utilisant lequel nous pouvons obtenir le "PrincipalID" "directement.


J'ai créé un script, fonctionne comme prévu. Merci pour votre soutien, tous vos commentaires étaient très utiles! J'apprécie vraiment cela!


Hi @ krishnag-msft: J'utilise le même script que vous avez mentionné et à l'aide du filtre $ filtre = "EventTimeStamp GE '2019-10-16T04: 36: 37.6407898Z" et EventTimeStamp Le' 2019-10-017T04: 36: 37.6407898 Z '"Mais obtenir cette erreur: invoke-reposmethod: {" Code ":" Badrequest "," Message ":" La propriété filtrante: {eventTimeStamp n'est pas prise en charge. "}. Toute idée que pourrait être la raison?