Pour permettre la collecte de données et l'utilisation des alertes ou de la plateforme MyDataSecurity/MyDataManagement par vos utilisateurs, nous vous invitons à remplir les cinq prérequis ci-dessous.
Pour collecter votre environnement de partage de fichiers, IDECSI utilise un LEM (Local Extractor Module) comme proxy entre votre serveur local sur site et la plateforme de surveillance SAAS. Un compte de service local permet au LEM de se connecter aux serveurs.
Création de la VM
Afin d'être pleinement opérationnel pour la protection des utilisateurs, le LEM doit être installé sur une machine virtuelle avec au moins la configuration matérielle suivante :
- RAM 16 Gb
- CPU 2 core
- Disque 100 Gb
Le collecteur LEM peut fonctionner sur les systèmes d'exploitation suivants :
- Windows Server 2016 Standard 64bits
- Windows Server 2019 Standard 64bits
Une fois la VM créée, installez Microsoft Framework .net 4.8.
Votre chargé de clientèle vous enverra un e-mail avec votre WorkerID et le fichier setup.exe pour installer le logiciel LEM sur la VM.
🛑 Dans certains cas, nous devons dimensionner les spécifications du LEM en fonction de votre infrastructure, veuillez nous fournir les informations suivantes concernant la volumétrie de vos partages de fichiers :
- Nombre de fichiers
- Taille totale des serveurs de fichiers
- Si possible, le nombre total (ou moyen) d'accès aux fichiers.
Flux d'ouverture
Veuillez vérifier ou ouvrir les connexions suivantes :
De | Pour | Protocole |
I2A VM (LEM) | Centre de données I2A Centre de données (Internet) | TCP 443 |
I2A VM (LEM) | Serveur (SMB) | TCP 445 |
I2A VM (LEM) | Serveur (WMI) | TCP 135 |
I2A VM (LEM) | Contrôleur Active Directory | TCP ET UDP 389 |
I2A VM (LEM) | Contrôleur Active Directory | TCP 636 |
I2A VM (LEM) | https://updates.i-2a.com/lem/wyserver.wys | TCP 443 |
NetApp (serveur de politique d'accès) | I2A VM (LEM) | TCP 2002 |
I2A VM (LEM) | NetApp (Admin REST API) | TCP 443 |
Installation du LEM
Lancez le fichier setup.exe sur la VM et procédez à l'installation.
Pour valider le choix du compte système local par rapport à un compte personnalisé, veuillez lire ce qui suit.
Ajout de la procuration, 4 cas :
- Pas de proxy: Utiliser le système local dans la configuration du LEM, utiliser les paramètres par défaut du système dans la configuration du proxy. Passez ensuite à la section Vérifier le compte de service.
- Proxy mais pas authentifié: Utilisez Local System dans la configuration du LEM et utilisez Custom Proxy settings dans la configuration du proxy.
Remplissez l'URI (http://), le port et définissez le Bypass (généralement true)
Puis allez à Check the service account. - Proxy authentifié avec le même compte que le compte du service I2A: Utilisez Custom User dans la configuration du LEM et remplissez les champs et utilisez Custom Proxy settings dans la configuration du proxy.
Remplissez l'URI (http://), le port et définissez le Bypass (généralement true)
Allez ensuite à Check the service account. - Proxy authentifié avec un autre compte :
- Le compte utilisé pour le proxy est dans le même domaine que le LEM : utilisez Custom User dans la configuration du LEM, remplissez les champs, et utilisez Custom Proxy settings dans la configuration du proxy. Remplissez l'URI et définissez l'option Bypass (généralement vrai).
- Le compte utilisé pour le proxy se trouve dans un domaine différent de celui du LEM : Utilisez le système local et éditez les fichiers de configuration. Modifiez le fichier proxy.config et remplacez le contenu du fichier par :
Edit the file settings.json just after the opening bracket { and copy-paste the following (with commas):
"CustomProxy.Login": "login",
"CustomProxy.Password": "password",
"CustomProxy.ProxyAddress": "http://hostname:port", Vérification du compte de service
A la fin de l'installation, vous devez ouvrir la MMC, arrêter le service I2A Worker et définir le login/mot de passe du compte de service.
Redémarrez ensuite le service I2A Worker.
Valider les droits NTFS du compte de service.
[Facultatif] Installation du LEM (mode silencieux)
Un mode silencieux est disponible pour l'installation d'IDECSI LEM.
Par exemple : I2AWorker 4.8.18303.0121.exe /SILENT /WorkerId=00000000-0000-0000-0000-000000000000 /IsCustomAccount=true /Username="idecsi\svc_lem" /Password="Password12345″.
Si vous souhaitez inclure dans un paramètre une virgule, une barre verticale ("|") ou une accolade fermante ("}") à l'intérieur de la constante, vous devez y échapper via "%-encoding". Remplacez le caractère par un caractère "%", suivi de son code hexagonal à deux chiffres. Une virgule est "%2c", une barre verticale est "%7c" et une accolade fermante est "%7d". Si vous souhaitez inclure un véritable caractère "%", utilisez "%25".
Paramètres
/SILENT, /VERYSILENT
Indique à l'installation d'être silencieuse ou très silencieuse. Lorsque l'installation est silencieuse, l'assistant et la fenêtre d'arrière-plan ne sont pas affichés, mais la fenêtre de progression de l'installation l'est. Lorsque l'installation est très silencieuse, la fenêtre de progression de l'installation n'est pas affichée.
Paramètres du travailleur I2A
/WorkerId=00000000-0000-0000-0000-000000000000
/IsCustomAccount=true|false (Si nécessaire, Par défaut : False)
/Username="idecsi\svc_lem" (Si IsCustomAccount = True)
/Password="Password12345″ (Si IsCustomAccount = True)
/IsCustomProxy=true|false (Si nécessaire, Défaut : False)
/ProxyAddress="http://proxy.domain.com:3128″ (Si IsCustomProxy = True)
/ProxyBypassLocal=true|false (Si IsCustomProxy = True)
Pour être opérationnel, un compte de service est nécessaire. Ce compte permettra au LEM de se connecter aux serveurs dont il aura la charge.
Il est donc recommandé d'utiliser un compte de service technique dédié à la gestion du Filer (pour éviter tout risque de changement de compte/mot de passe).
Droits de l'homme
Lorsque le LEM se connecte à un serveur pour effectuer la découverte, le niveau de droits du compte utilisé affectera les informations qu'il sera possible d'obtenir.
Néanmoins, dans tous les cas, le LEM essaiera toujours de faire le maximum d'actions possibles.
Ainsi, par exemple, même si le compte n'a aucun droit sur le serveur, mais que les paramètres lui permettent d'entrer dans certaines actions, le LEM le fera.
Découverte
La "découverte" ne nécessite aucun droit particulier pour fonctionner.
Toutefois, si le compte de service dispose des droits "Administrateur", "Power User", "Print Operator" ou "Server Operator", le "LEM" fournira davantage d'informations sur la configuration du partage de réseau.
NTFS
Le LEM tentera de se connecter et de parcourir les actions ; la navigation dans les arbres sera basée sur les droits.
L'IDECSI ne peut pas faire de recommandation sur les droits nécessaires, cela dépend beaucoup de la politique de l'entreprise.
Pour éviter de donner trop de droits au compte de service, certains de nos clients ne donnent aucun droit de base au compte, et serveur par serveur, ajoutent des droits NTFS (ou positionnent le compte dans le groupe local Administrateurs du serveur) afin que les serveurs puissent être complètement collectés.
Activer les journaux d'événements du serveur Windows
Les audits d'accès peuvent être activés manuellement ou par GPO.
Ce paramètre est accessible à partir de l'application Politique de sécurité locale / Configuration de la politique d'audit avancée / Politiques d'audit du système - Objet de la politique de groupe locale / Accès à l'objet.

Il est nécessaire d'activer les journaux suivants :
- Audit du partage de fichiers
- Audit détaillé du partage de fichiers
Ce paramètre active la génération des événements 5140, 5142, 5143, 5144, 5168 et 5145 dans le journal des événements de sécurité.
Veuillez vérifier la taille du journal des événements (Event Log Security) afin que la durée de conservation soit minimale (quelques heures).
Cette taille varie en fonction de l'activité du serveur.
Autorisation d'accès au journal des événements Windows
Le LEM, lorsqu'il en reçoit l'ordre, peut collecter à distance les journaux d'accès générés sur le serveur.
Ces journaux sont disponibles dans la section Sécurité du journal des événements.
Pour les visualiser à distance, il est nécessaire de fournir des droits au compte de service.
Le script ci-dessous permet de gérer plus facilement les droits accordés à un compte sur le journal des événements d'un serveur. Vous pouvez utiliser le copier-coller dans un fichier .ps1 pour l'utiliser.
<#
.SYNOPSIS
Grants or revokes access to an Event Log
.DESCRIPTION
Controls access to an Event Log, supporting:
Grant or revoke access
Local or domain user or group
Local or remote Event Log
Read or read/write access
Connect to remote machine as current or alternate user
Target a group of remote machines via a text file
.PARAMETER Action
The action to take (Get, Grant or Revoke)
.PARAMETER LogName
The Event Log log name (Application, Security or System)
.PARAMETER AccountName
The domain-qualified user or group name
.PARAMETER Access
The type of rights to grant (Read or ReadWrite)
.PARAMETER ComputerName
The remote computer name (optional)
.PARAMETER UserName
User name for remote computer login (optional)
.PARAMETER Password
Password for remote computer login (optional)
.PARAMETER ComputerNamesFile
Name of a text file containing computer names to affect, one name per line (optional)
.EXAMPLE
ControlEventLogPermissions.ps1 -Action 'Grant' -LogName 'Application' -AccountName 'DOMAIN\GroupName' -Access 'Read'
.EXAMPLE
ControlEventLogPermissions.ps1 -Action 'Revoke' -LogName 'System' -AccountName 'DOMAIN\GroupName' -Access 'ReadWrite' -ComputerName 'REMOTESRVR'
.EXAMPLE
ControlEventLogPermissions.ps1 -Action 'Grant' -LogName 'Security' -AccountName 'DOMAIN\GroupName' -Access 'Read' -ComputerName 'REMOTESRVR' -UserName 'DOMAIN\Admin' -Password 'SecurePwd'
.EXAMPLE
ControlEventLogPermissions.ps1 -Action 'Grant' -LogName 'Security' -AccountName 'DOMAIN\GroupName' -Access 'Read' -ComputerNamesFile 'Machines.txt' -UserName 'DOMAIN\Admin' -Password 'SecurePwd'
.NOTES
Released under The MIT License (MIT)
Copyright (c) 2015 Thomas F. Abraham (http://www.tfabraham.com)
.LINK
https://gallery.technet.microsoft.com/scriptcenter
#>
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true, HelpMessage='Enter Get, Grant or Revoke')]
[ValidateSet('Get','Grant','Revoke')]
[string]$Action,
[Parameter(Mandatory=$true, HelpMessage='Enter log name')]
[string]$LogName,
[Parameter(Mandatory=$true, HelpMessage='Enter local or domain-qualified account name')]
[string]$AccountName,
[Parameter(Mandatory=$false, HelpMessage='Enter Read or ReadWrite')]
[ValidateSet('Read','ReadWrite')]
[string]$Access = 'Read',
[Parameter(Mandatory=$false, HelpMessage='Enter remote computer name')]
[string]$ComputerName,
[Parameter(Mandatory=$false, HelpMessage='Enter username for remote computer connection')]
[string]$UserName,
[Parameter(Mandatory=$false, HelpMessage='Enter password for remote computer connection')]
[string]$Password,
[Parameter(Mandatory=$false, HelpMessage='Enter name of a text file containing computer names to affect, one name per line')]
[string]$ComputerNamesFile
)
Function ConvertAccountNameToSID {
<#
.SYNOPSIS
Converts a local or domain account name to the SID
.DESCRIPTION
Converts a local or domain account name to the SID
.PARAMETER AccountName
The domain-qualified user or group name
.EXAMPLE
.NOTES
.LINK
https://gallery.technet.microsoft.com/scriptcenter
#>
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true, HelpMessage='Enter local or domain-qualified account name')]
[string]$AccountName
)
[array]$accountNameParts = $null
[string]$sid = ''
[System.Security.Principal.NTAccount]$ntAcct = $null
# Split the account name to determine if it is domain-qualified
$accountNameParts = $AccountName.Split("\\")
# Attempt to convert the account name to a SID
Write-Host Translating $AccountName to SID...
if ($accountNameParts.Length -eq 1) {
$ntAcct = New-Object System.Security.Principal.NTAccount($AccountName)
}
else {
$ntAcct = New-Object System.Security.Principal.NTAccount($accountNameParts[0], $accountNameParts[1])
}
try {
$sid = $ntAcct.Translate([System.Security.Principal.SecurityIdentifier])
}
catch {
Write-Error -Message "Could not resolve account" $AccountName ". Check spelling and domain-qualify if necessary."
Return
}
Write-Host Account $AccountName has SID $sid
Write-Host
Return $sid
}
Function ControlEventLogPermissions {
<#
.SYNOPSIS
Grants or revokes access to an Event Log
.DESCRIPTION
Controls access to an Event Log
.PARAMETER Action
The action to take (Get, Grant or Revoke)
.PARAMETER LogName
The Event Log log name (Application, Security or System)
.PARAMETER AccountName
The domain-qualified user or group name
.PARAMETER Access
The type of rights to grant (Read or ReadWrite)
.PARAMETER ComputerName
The remote computer name (optional)
.PARAMETER UserName
User name for remote computer login (optional)
.PARAMETER Password
Password for remote computer login (optional)
.EXAMPLE
.NOTES
.LINK
https://gallery.technet.microsoft.com/scriptcenter
#>
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true, HelpMessage='Enter Get, Grant or Revoke')]
[ValidateSet('Get','Grant','Revoke')]
[string]$Action,
[Parameter(Mandatory=$true, HelpMessage='Enter log name')]
[string]$LogName,
[Parameter(Mandatory=$true, HelpMessage='Enter local or domain-qualified account name')]
[string]$AccountName,
[Parameter(Mandatory=$false, HelpMessage='Enter Read or ReadWrite')]
[ValidateSet('Read','ReadWrite')]
[string]$Access = 'Read',
[Parameter(Mandatory=$false, HelpMessage='Enter remote computer name')]
[string]$ComputerName,
[Parameter(Mandatory=$false, HelpMessage='Enter username for remote computer connection')]
[string]$UserName,
[Parameter(Mandatory=$false, HelpMessage='Enter password for remote computer connection')]
[string]$Password,
[Parameter(Mandatory=$true, HelpMessage='Enter SID for account')]
[string]$sid
)
[array]$logConfig = ''
[array]$channelAccessArray = $null
[array]$remoteParams = $null
[array]$params = $null
[string]$channelAccess = ''
[string]$sddlRights = ''
[string]$newChannelAccess = ''
if ($Action -ieq "Grant") {
Write-Host Grant $AccountName $Access access to log $LogName on $ComputerName ...
}
elseif ($Action -ieq "Revoke") {
Write-Host Revoke $AccountName $Access access to log $LogName on $ComputerName ...
}
elseif ($Action -ieq "Get") {
Write-Host Get current access for $AccountName to log $LogName on $ComputerName ...
}
if ($ComputerName -ine '') {
$remoteParams = @("/r:""$ComputerName""")
if ($UserName -ine '') {
$remoteParams += "/u:""$UserName"""
if ($Password -ine '') {
$remoteParams += "/p:""$Password"""
}
}
}
# Get the current configuration of the desired log
Write-Host "Reading current configuration of log $LogName on $ComputerName..."
$params = @("gl", "$LogName")
$params += $remoteParams
$logConfig = & wevtutil $params
if ($LASTEXITCODE -ne 0) {
Write-Error -Message "Failed to read current configuration of log $LogName on $ComputerName"
Return
}
Write-Host "Successfully read current configuration of log $LogName on $ComputerName."
# Search for the channelAccess (permissions) configuration section
$channelAccessArray = $logConfig -like "channelAccess:*"
if ($channelAccessArray.Length -eq 0) {
Write-Error -Message "Expected to find a string starting with channelAccess. Actual: " $logConfig
Return
}
# Trim off the channelAccess label
$channelAccess = $channelAccessArray[0].Replace("channelAccess: ","")
Write-Debug -Message "Current channelAccess for $LogName on $ComputerName is $channelAccess"
if ($Action -ieq "Grant") {
# Search for an existing SDDL token using the target SID
if ($channelAccess -match "(\(\w*\;\w*\;\w*\;\w*\;\w*\;$sid\))") {
# Remove the existing SDDL token
$channelAccess = $channelAccess.Replace($matches[0], "")
}
# Convert the permissions string to SDDL
if ($Access -ieq "ReadWrite") {
$sddlRights = "0x3"
}
else {
$sddlRights = "0x1"
}
# Build and append a new SDDL onto the existing SDDL
$newChannelAccess = $channelAccess + "(A;;" + $sddlRights + ";;;" + $sid + ")"
}
elseif ($Action -ieq "Revoke") {
# Search for an existing SDDL token using the target SID
if ($channelAccess -match "(\(\w*\;\w*\;\w*\;\w*\;\w*\;$sid\))") {
# Remove the existing SDDL token
$newChannelAccess = $channelAccess.Replace($matches[0], "")
}
else {
Write-Host "SID does not exist in channel access string on $ComputerName. Nothing to revoke." -ForegroundColor Yellow
Return
}
}
elseif ($Action -ieq "Get") {
# Search for an existing SDDL token using the target SID
if ($channelAccess -match "(\(\w*\;\w*\;\w*\;\w*\;\w*\;$sid\))") {
if ($matches[0].Contains("0x3")) {
Write-Host "$AccountName currently has READ/WRITE access to $LogName on $ComputerName." -ForegroundColor Green
}
elseif ($matches[0].Contains("0x1")) {
Write-Host "$AccountName currently has READ access to log $LogName on $ComputerName." -ForegroundColor Green
}
else {
Write-Host "$AccountName currently has an UNKNOWN access right to log $LogName on $ComputerName." -ForegroundColor Green
}
}
else {
Write-Host "$AccountName currently has NO access rights to log $LogName on $ComputerName." -ForegroundColor Green
Return
}
Return
}
Write-Debug -Message "New channel access string is $newChannelAccess"
# Write the updated configuration
Write-Host "Writing new channel access string to log $LogName configuration on $ComputerName ..."
$params = @("sl", "$LogName", "/ca:$newChannelAccess")
$params += $remoteParams
& wevtutil $params
if ($LASTEXITCODE -ne 0) {
Write-Error -Message "Failed to write new configuration of log $LogName on $ComputerName"
Return
}
Write-Host "Done writing new configuration of $LogName on $ComputerName." -ForegroundColor Green
}
[hashtable]$scriptParameters = $PSBoundParameters
[array]$computerNamesFileContent
[string]$listComputerName
[string]$sid
$Error.Clear()
Try {
$sid = ConvertAccountNameToSid -AccountName "$AccountName"
$scriptParameters['sid'] = $sid
$scriptParameters.Remove('ComputerNamesFile')
if ($ComputerNamesFile -ieq '') {
if ($scriptParameters.ContainsKey("ComputerName") -eq $false) {
$scriptParameters["ComputerName"] = $env:COMPUTERNAME
}
ControlEventLogPermissions @scriptParameters
}
else {
$computerNamesFileContent = Get-Content $ComputerNamesFile
foreach ($listComputerName in $computerNamesFileContent) {
$scriptParameters["ComputerName"] = $listComputerName
ControlEventLogPermissions @scriptParameters
}
}
}
Catch {
Write-Error -Message $Error[0].Exception.Message
} Activer le journal des événements NetApp
Commandes FPOLICY pour enregistrer un LEM
Légende :
- VSERVER_ADMIN (niveau cluster)
- VSERVER_NODE (nœud du cluster)
- VSERVER_DATA (Serveur de fichiers)
- valeur : Proposition de nom, modifiable
- [valeur] : Insérer la valeur appropriée
Commandes globales
Enregistrement
fpolicy policy event create -vserver [VSERVER_ADMIN] -event-name fp_event_idecsi_cifs -file-operations create,create_dir,open,delete,delete_dir,read,write,rename,rename_dir,setattr -protocol cifs -filters first-read,first-write,open-with-delete-intent
fpolicy policy external-engine create -vserver [VSERVER_ADMIN] -engine-name fp_ex_eng -primary-servers [LEM_IP] -port 2002 -extern-engine-type asynchronous -ssl-option no-auth Permettre au LEM de se déconnecter
security login rest-role create -vserver [VSERVER_ADMIN] -role rest_role_idecsi -api "/api/protocols/fpolicy" -access all
security login create -user-or-group-name svc_rest_idecsi -application http -authmethod password -role rest_role_idecsi -vserver [VSERVER_ADMIN] Commandes à collecter par serveur
fpolicy policy create -vserver [VSERVER_DATA] -policy-name IDECSI -events fp_event_idecsi_cifs -engine fp_ex_eng -is-mandatory false
fpolicy policy scope create -vserver [VSERVER_DATA] -policy-name IDECSI -volumes-to-include "*" -export-policies-to-include "*"
fpolicy enable -vserver [VSERVER_DATA] -policy-name IDECSI -sequence-number 5 Commandes de débogage pour s'assurer de l'état ou de la publication des événements de redémarrage
vserver fpolicy policy event show fp_event_idecsi_cifs -instance
fpolicy policy external-engine show
fpolicy show-engine
vserver fpolicy show
vserver fpolicy show -vserver [VSERVER_DATA]
fpolicy policy scope show -vserver [VSERVER_VM] - policy-name [IDECSI]
fpolicy engine-connect -node [NODE] -vserver [VSERVER_VM] -policy-name [IDECSI] -server [LEM_IP]
network ping -lif [LIF_NAME] -destination [LEM_IP] -show-detail [Optionnel] Paramètres cryptés du compte de service NetApp
A insérer dans le fichier crypté
|---------------------------|------------------------------|
| Key | Value |
|---------------------------|------------------------------|
| NetAppRestApiBaseUri | http://servername |
| NetAppRestApiLogin | username |
| NetAppRestApiPwd | password |
|---------------------------|------------------------------| Pour permettre aux utilisateurs de se connecter à leur MyDataSecurity ou MyDataManagement, nous pouvons intégrer votre fédération d'identité. Vous trouverez ci-dessous la procédure à suivre avec Azure AD. Pour d'autres solutions, veuillez consulter la base de connaissances.
| 1. Accédez à votre tableau de bord d'administrateur dans Azure Active Directory. | |
| et cliquez sur Active Directory > Enterprise Applications | ![]() |
| 2. Cliquez sur + Créez votre propre application | ![]() |
| Saisissez un nom pertinent dans Input Name (par exemple I2A Platform), sélectionnez l'option "Integrate any other application you don't find in the gallery (non-gallery)", et cliquez sur Create. | ![]() |
| 3. Ensuite, vous êtes redirigé vers l'application nouvellement créée Vue d'ensemble, allez à Affecter des utilisateurs et des groupes à partir de la tuile ou du menu latéral. | ![]() |
| 4. Si vous souhaitez restreindre l'utilisation, vous pouvez ajouter des utilisateurs et/ou des groupes pour accéder à la plateforme I2A. Nous vous recommandons d'ajouter un groupe avec tous vos utilisateurs tenant , I2A reconnaîtra les utilisateurs avec un compte. | ![]() |
| 5. Cliquez sur Single sign-on dans le menu latéral et sélectionnez SAML comme méthode d'authentification unique. | ![]() |
| 6. Cliquez sur Télécharger le fichier de métadonnées et sélectionnez le fichier XML fourni par votre Client Success Manager. | ![]() |
| 7. Après l'importation, vous aurez : | ![]() |
Dans le bloc de configuration Basic SAML : Identifiant (ID de l'entité) : https://dcxx-auth.i-2a.com Vous pouvez maintenant tester votre authentification à l'aide du bouton Test. | |
| 8. Veuillez nous envoyer le fichier XML des métadonnées de la Fédération à l'adresse suivante : clientsuccess@idecsi.com | ![]() |
Votre Client Success Manager vous informera de l'intégration de vos métadonnées.
Pour encourager les utilisateurs à adopter la solution, nous proposons l'utilisation d'une application qui permettra à notre plateforme d'envoyer des courriels à partir de votre tenant Microsoft. A défaut, IDECSI utilisera Graph API pour envoyer des emails depuis une adresse générique (alerts@idecsi.com).
Si vous souhaitez utiliser une adresse e-mail particulière de votre domaine,nous pouvons utiliser l'API Microsoft Graph pour envoyer des e-mails IDECSI par le biais d'une application accordée à votre tenant.
L'IDECSI propose d'utiliser l'application générique "I2A Mail Sender" pour envoyer les notifications.
L'application utilisée pour envoyer les notifications ne peut pas être la même que celle utilisée pour la remédiation, car la permission "Mail.Send" doit être définie sur le compte.
Étape 1 : Autoriser cette application
L'étape suivante consiste à accorder à l'application les droits d'administrateur global. Voici le lien pour accorder à l'application générique gérée par IDECSI les droits d'administrateur global :
https://login.microsoftonline.com/common/adminConsent?client_id=ba28a8f5-601a-4523-a7e9-570dc40d49d7
La seule autorisation à accorder est la suivante :
| Autorisation | Chaîne d'affichage | Description | Consentement administratif requis |
| Mail.Send | Envoyer du courrier en tant qu'utilisateur | Permet à l'application d'envoyer des courriers électroniques en tant qu'utilisateurs de l'organisation. | Oui |
Plus d'informations sur la permission : Référence des permissions de Microsoft Graph - Microsoft Graph | Microsoft Docs
Étape 2 : Appliquer une politique de restriction pour limiter la portée de l'autorisation
Pour garantir la meilleure sécurité possible et limiter les autorisations de l'application accordée à l'étape 2, il est nécessaire de limiter le droit d'envoyer du courrier à un seul compte de service utilisé à cette fin.
Pour cela, il est nécessaire de créer une ApplicationAccessPolicy.
#0. Select the application you want to configure:
$myAppId = {my app id}
#1. Connect to Exchange Online with the ExchangeOnlineManagement PowerShell module
Connect-ExchangeOnline
#2. Create a mail-enabled security group that contains all the accounts you want to send mails from
$myRestrictedGroup = New-DistributionGroup -Name "Mail service accounts" -Type "Security" -Members @("senderemail@mydomain.com")
#3. Optionally hide the group from the address list
Set-DistributionGroup -Identity $myRestrictedGroup.Identity -HiddenFromAddressListsEnabled $true
#4. Create the application access policy to only allow sending the app mails for the specified distribution group
$params = @{
AccessRight = "RestrictAccess"
AppId = $myAppId
PolicyScopeGroupId = $myRestrictedGroup .PrimarySmtpAddress
Description = "Restrict I2A Sender Mail app permissions to only allow access to service account"
}
New-ApplicationAccessPolicy @params A partir de là, l'application "I2A Mail Sender" ne sera autorisée que pour l'adresse e-mail de l'expéditeur souhaitée "senderemail@mydomain.com"
Plus d'informations :
- Limiter les permissions d'application à des boîtes aux lettres Exchange Online spécifiques - Microsoft Graph | Microsoft Docs
- Envoi sécurisé de courriels à partir de scripts PowerShell avec une authentification moderne - nicolonsky tech
- New-ApplicationAccessPolicy (ExchangePowerShell) | Microsoft Docs
Étape 3 : Communiquez à votre gestionnaire de la réussite des clients l'adresse électronique autorisée.
Votre Client Success Manager configurera alors l'adresse électronique comme le compte utilisé pour envoyer des notifications aux utilisateurs finaux et aux équipes de sécurité.
- L'adresse électronique qui sera utilisée pour envoyer des courriels (et les alias).
- ID de l'application
- App Secret








