Autoriser/Bloquer l’accès invité à des groupes Office 365

Exchange Online
 

Dernière rubrique modifiée :2017-08-01

Vous pouvez autoriser ou bloquer les utilisateurs invités qui utilisent un domaine spécifique. Par exemple, supposons que votre entreprise (Contoso) ait conclu un partenariat avec une autre entreprise (Fabrikam). Vous pouvez ajouter Fabrikam à votre liste verte afin que vos utilisateurs puissent ajouter ces invités à leurs groupes.

Ou bien, supposons que vous vouliez bloquer des domaines d’adresse de messagerie personnels. Vous pouvez configurer une liste rouge contenant des domaines tels que Gmail.com et Outlook.com.

  • Vous pouvez créer une liste verte ou une liste rouge. Cependant, vous ne pouvez pas configurer ces deux types de listes. Par défaut, les domaines qui ne figurent pas dans une liste verte sont sur une liste rouge, et vice versa.

  • Vous pouvez créer une seule stratégie par organisation. Vous pouvez mettre à jour cette stratégie en y ajoutant des domaines ou la supprimer pour en créer une autre.

  • Cette liste fonctionne indépendamment de la liste d’autorisation/de blocage de SPO. Vous devez configurer une liste d’autorisation/de blocage pour SPO si vous voulez limiter le partage de fichiers individuels de site connecté de groupe.

  • Cette liste ne s’applique pas aux membres invités déjà ajoutés, mais elle est mise en œuvre pour tous les invités ajoutés après la configuration de la liste. Vous pouvez toutefois les supprimer par le biais du script.

IMPORTANT : les procédures décrites dans cet article nécessitent la version d’ÉVALUATION du module Azure Active Directory pour Windows PowerShell, notamment la version du module AzureADPreview2.0.0.98 ou version ultérieure.

  1. Ouvrez Windows PowerShell en tant qu’administrateur :

    1. Dans la barre de votre recherche, saisissez Windows PowerShell.

    2. Cliquez avec le bouton droit sur Windows PowerShell et sélectionnez Exécuter en tant qu’administrateur.

    La fenêtre Windows PowerShell s’ouvre. L’invite C:\Windows\system32 signifie que vous l’avez ouverte en tant qu’administrateur.

  2. Exécutez cette commande pour vérifier si une version du module Azure Active Directory pour Windows PowerShell est installée sur votre ordinateur :

    Get-Module -ListAvailable AzureAD*
    
    • Si vous ne recevez aucun résultat, exécutez cette commande pour installer la dernière version du module AzureADPreview :

      Install-Module AzureADPreview
      
    • Si seul le module AzureAD apparaît dans les résultats, exécutez ces commandes pour installer le module AzureADPreview :

      Uninstall-Module AzureAD
      
      Install-Module AzureADPreview
      
    • Si seul le module AzureADPreview apparaît dans les résultats, mais que la version est antérieure à 2.0.0.98, exécutez ces commandes pour le mettre à jour :

      Uninstall-Module AzureADPreview
      
      Install-Module AzureADPreview
      
    • Si les modules AzureAD et AzureADPreview apparaissent dans les résultats, mais que la version du module AzureADPreview est antérieure à 2.0.0.98, exécutez ces commandes pour le mettre à jour :

      Uninstall-Module AzureAD
      
      Uninstall-Module AzureADPreview
      
      Install-Module AzureADPreview
      

  1. Avez-vous installé le module AzureADPreview selon les instructions ci-dessus ? Le fait de ne pas avoir installé la version d’évaluation constitue la raison principale de l’échec de ces étapes.

  2. Accédez à la section Script de stratégie d’autorisation/de blocage au bas de cet article et enregistrez-le sous le nom Set-GuestAllowBlockDomainPolicy.ps1.

  3. Exécutez le script avec cette commande :

    Set-GuestAllowBlockDomainPolicy.ps1 -Update -AllowList @("contoso.com", "fabrikam.com")
    

    Où vous remplacez contoso.com et fabrikam.com par les noms de domaines que vous souhaitez autoriser.

    OU

    		Set-GuestAllowBlockDomainPolicy.ps1 -Update -BlockList @("contoso.com", "fabrikam.com")
    
    

    N’oubliez pas que vous ne pouvez créer qu’une seule stratégie. Vous obtiendrez une erreur si vous essayez d’en créer une autre.

Pour remplacer la stratégie existante par une nouvelle liste de domaines, exécutez cette commande :

Set-GuestAllowBlockDomainPolicy.ps1 -Update -AllowList @("contoso.com", "fabrikam.com")

Où vous remplacez contoso.com et fabrikam.com par les noms de domaines que vous souhaitez autoriser.

OU

Set-GuestAllowBlockDomainPolicy.ps1 -Update -BlockList @("contoso.com", "fabrikam.com")

Pour ajouter un nouveau domaine à votre stratégie, exécutez cette commande :

Set-GuestAllowBlockDomainPolicy.ps1 -Append -AllowList @("contoso.com")

Où vous remplacez contoso.com et fabrikam.com par les noms de domaines que vous souhaitez autoriser.

OU

Set-GuestAllowBlockDomainPolicy.ps1 -Append -BlockList @("contoso.com")

Cette liste fonctionne indépendamment de la liste d’autorisation/de blocage SharePoint Online. Vous devez configurer une liste d’autorisation/de blocage pour SharePoint Online si vous voulez limiter le partage de fichiers individuels de site connecté de groupe.

Toutefois, si votre organisation dispose déjà d’une liste d’autorisation/de blocage pour SharePoint Online, vous pouvez migrer cette liste à l’aide de cette commande.

  1. Installez l’outil SharePoint Online Management.

  2. Ensuite, exécutez la commande suivante :

    Set-GuestAllowBlockDomainPolicy.ps1 -MigrateFromSharepoint
    

Pour supprimer tous les domaines de votre stratégie, exécutez cette commande :

Set-GuestAllowBlockDomainPolicy.ps1 -Remove

Set-GuestAllowBlockDomainPolicy.ps1 -help

Voici le script permettant de créer votre stratégie d’autorisation/de blocage. Pour enregistrer ce script en tant que fichier .ps1, procédez comme suit :

  1. Ouvrez Windows PowerShell ISE.

  2. Choisissez Fichier > Nouveau.

  3. Copiez et collez le script suivant dans le volet.

  4. Enregistrez le fichier en tant que Set-GuestAllowBlockDomainPolicy.ps1.

# .SYNOPSIS
#   Helps admin to update the AzureADPolicy for Allow/Block domain list for inviting external Users.
#   Powershell must be connected to Azure AD Preview V2 before running this script.
#
#   Copyright (c) Microsoft Corporation. All rights reserved.
#
#   THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE RISK
#   OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE USER.
#
# .PARAMETER Update
#    Parameter to update allow or block domain list.
#
# .PARAMETER Append
#    Parameter to append domains to an existing allow or block domain list.
#
# .PARAMETER AllowList
#    Parameter to specify list of allowed domains.
#
# .PARAMETER BlockList
#    Parameter to specify list of blocked domains.
#
# .PARAMETER MigrateFromSharepoint
#    Switch parameter to migrate AllowBlockDomainList from SPO.
#
# .PARAMETER Remove
#    Switch parameter to delete the existing policy.
#
# .PARAMETER QueryPolicy
#    Switch parameter to query the existing policy.
#
# .Example
#	Set-GuestAllowBlockDomainPolicy.ps1 -Update -AllowList @("contoso.com", "fabrikam.com")
#
# .Example
#	Set-GuestAllowBlockDomainPolicy.ps1 -Append -AllowList @("contoso.com")
#
# .Example
#	Set-GuestAllowBlockDomainPolicy.ps1 -Update -BlockList @("fabrikam.com", "contoso.com")
#
# .Example
#	Set-GuestAllowBlockDomainPolicy.ps1 -Append -BlockList @("fabrikam.com")
#
# .Example
#	Set-GuestAllowBlockDomainPolicy.ps1 -MigrateFromSharepoint
#
# .Example
#	Set-GuestAllowBlockDomainPolicy.ps1 -Remove
#
# .Example
#	Set-GuestAllowBlockDomainPolicy.ps1 -QueryPolicy
#
Param(
        [Parameter(Mandatory=$true, ParameterSetName="Update+BlockList")]
        [Parameter(Mandatory=$true, ParameterSetName="Update+AllowList")]
        [Switch] $Update,
        [Parameter(Mandatory=$true, ParameterSetName="Append+BlockList")]
        [Parameter(Mandatory=$true, ParameterSetName="Append+AllowList")]
        [Switch] $Append,
        [Parameter(Mandatory=$true, ParameterSetName="Append+BlockList")]
        [Parameter(Mandatory=$true, ParameterSetName="Update+BlockList")]
        [String[]] $BlockList,
        [Parameter(Mandatory=$true, ParameterSetName="Append+AllowList")]
        [Parameter(Mandatory=$true, ParameterSetName="Update+AllowList")]
        [String[]] $AllowList,
        [Parameter(Mandatory=$true, ParameterSetName="MigrateFromSPOSet")]
        [switch] $MigrateFromSharepoint,
        [Parameter(Mandatory=$true, ParameterSetName="ClearPolicySet")]
        [switch] $Remove,
        [Parameter(Mandatory=$true, ParameterSetName="ExistingPolicySet")]
        [switch] $QueryPolicy
)

# Gets Json for the policy with given Allowed and Blocked Domain List
function GetJSONForAllowBlockDomainPolicy([string[]] $AllowDomains = @(), [string[]] $BlockedDomains = @())
{
    # Remove any duplicate domains from Allowed or Blocked domains specified.
    $AllowDomains = $AllowDomains | select -uniq
    $BlockedDomains = $BlockedDomains | select -uniq

    return @{B2BManagementPolicy=@{InvitationsAllowedAndBlockedDomainsPolicy=@{AllowedDomains=@($AllowDomains); BlockedDomains=@($BlockedDomains)}}} | ConvertTo-Json -Depth 3 -Compress
}

# Converts Json to Object since ConvertFrom-Json does not support the depth parameter.
function GetObjectFromJson([string] $JsonString)
{
    ConvertFrom-Json -InputObject $JsonString |
        ForEach-Object {
            foreach ($property in ($_ | Get-Member -MemberType NoteProperty)) 
                {
                    $_.$($property.Name) | Add-Member -MemberType NoteProperty -Name 'Name' -Value $property.Name -PassThru
                }
        }
}

# Gets AllowBlockedList from SPO
function GetSPOPolicy
{
    try
    {
        $SPOTenantSettings = Get-SPOTenant
    }
    catch [System.InvalidOperationException]
    {
        Write-Error "You must call Connect-SPOService cmdlet before using this parameter."
        Exit;
    }

    # Return JSON for Allow\Block domain list in SPO
    switch($SPOTenantSettings.SharingDomainRestrictionMode)
    {
        "AllowList"
        {
            Write-Host "`nSPO Allowed DomainList:" $SPOTenantSettings.SharingAllowedDomainList
            $AllowDomainsList = $SPOTenantSettings.SharingAllowedDomainList.Split(' ')
            return  GetJSONForAllowBlockDomainPolicy -AllowDomains $AllowDomainsList
            break;
        }
        "BlockList"
        {
            Write-Host "`nSPO Blocked DomainList:" $SPOTenantSettings.SharingBlockedDomainList
            $BlockDomainsList = $SPOTenantSettings.SharingBlockedDomainList.Split(' ')
            return GetJSONForAllowBlockDomainPolicy -BlockedDomains $BlockDomainsList
            break;
        }
        "None"
        {
            Write-Error "There is no AllowBlockDomainList policy set for this SPO tenant."
            return $null
        }
    }
}

# Gets the existing AzureAD policy for AllowBlockedList if it exists
function GetExistingPolicy
{
    $currentpolicy = Get-AzureADPolicy | ?{$_.Type -eq 'B2BManagementPolicy'} | select -First 1

    return $currentpolicy;
}

# Print Allowed and Blocked Domain List for the given policy
function PrintAllowBlockedList([String] $defString)
{
    $policyObj = GetObjectFromJson $defString;

    Write-Host "AllowedDomains: " $policyObj.InvitationsAllowedAndBlockedDomainsPolicy.AllowedDomains
    Write-Host "BlockedDomains: " $policyObj.InvitationsAllowedAndBlockedDomainsPolicy.BlockedDomains
}

# Gets AllowDomainList from the existing policy
function GetExistingAllowedDomainList()
{
    $policy = GetExistingPolicy

    if($policy -ne $null)
    {
        $policyObject = GetObjectFromJson $policy.Definition[0];

        if($policyObject.InvitationsAllowedAndBlockedDomainsPolicy -ne $null -and $policyObject.InvitationsAllowedAndBlockedDomainsPolicy.AllowedDomains -ne $null)
        {
            Write-Host "Existing Allowed Domain List: " $policyObject.InvitationsAllowedAndBlockedDomainsPolicy.AllowedDomains
            return $policyObject.InvitationsAllowedAndBlockedDomainsPolicy.AllowedDomains;
        }
    }

    return $null
}

# Gets BlockDomainList from the existing policy
function GetExistingBlockedDomainList()
{
    $policy = GetExistingPolicy

    if($policy -ne $null)
    {
        $policyObject = GetObjectFromJson $policy.Definition[0];

        if($policyObject.InvitationsAllowedAndBlockedDomainsPolicy -ne $null -and $policyObject.InvitationsAllowedAndBlockedDomainsPolicy.BlockedDomains -ne $null)
        {
            Write-Host "Existing Blocked Domain List: " $policyObject.InvitationsAllowedAndBlockedDomainsPolicy.BlockedDomains
            return $policyObject.InvitationsAllowedAndBlockedDomainsPolicy.BlockedDomains;
        }
    }

    return $null
}

# Main Script which sets the Allow/Block domain list policy according to the parameters specified by the user.
try
{
    $currentpolicy = GetExistingPolicy;
}
catch [Microsoft.Open.Azure.AD.CommonLibrary.AadNeedAuthenticationException]
{
    Write-Error "You must call Connect-AzureAD cmdlet before running this script."
    Exit
}

$policyExist = ($currentpolicy -ne $null)

switch ($PSCmdlet.ParameterSetName)
{
    "Update+BlockList"
    {
        Write-Host "Setting BlockDomainsList for B2BManagementPolicy";
        $policyValue = GetJSONForAllowBlockDomainPolicy -BlockedDomains $BlockList

        break;
    }
    "Update+AllowList"
    {
        Write-Host "Setting AllowedDomainList for B2BManagementPolicy";
        $policyValue = GetJSONForAllowBlockDomainPolicy -AllowDomains $AllowList

        break;
    }
    "Append+BlockList"
    {
        $ExistingBlockList = GetExistingBlockedDomainList

        if($ExistingBlockList -ne $null)
        {
            Write-Host "Appending Block Domain List to the current BlockDomainPolicy."
            $BlockList = $BlockList + $ExistingBlockList
        }
        else
        {
            Write-Host "Existing Block List is empty. Adding the domain list specified."
        }

        $policyValue = GetJSONForAllowBlockDomainPolicy -BlockedDomains $BlockList

        break;
    }
    "Append+AllowList"
    {
        $ExistingAllowList = GetExistingAllowedDomainList

        if($ExistingAllowList -ne $null)
        {
            Write-Host "Appending Allow Domain List to the current AllowDomainPolicy."
            $AllowList = $AllowList + $ExistingAllowList
            Write-Host $AllowList
        }
        else
        {
            Write-Host "Existing Allow List is empty. Adding the domain list specified."
        }

        $policyValue = GetJSONForAllowBlockDomainPolicy -AllowDomains $AllowList

        break;
    }
    "MigrateFromSPOSet"
    {
        $policyValue = GetSPOPolicy

        break;
    }
    "ClearPolicySet"
    {
        if($policyExist -eq $true)
        {
            Write-Host "Removing AzureAd Policy.";
            Remove-AzureADPolicy -Id $currentpolicy.Id | Out-Null
        }
        else
        {
            Write-Host "No policy to Remove."
        }

        Exit
    }
    "ExistingPolicySet"
    {
        if($currentpolicy -ne $null)
        {
            Write-Information "`nCurrent Allow/Block domain list policy:`n"
            PrintAllowBlockedList $currentpolicy.Definition[0];
        }
        else
        {
            Write-Host "No policy found for Allow/Block domain list in AzureAD."
        }

        Exit
    }
    "None"
    {
        Write-Error "`n`tPlease specify valid Parameters!`n`tExecute 'help GuestAllowBlockDomainPolicy.ps1 -examples' for examples."
        Exit
    }
}

if($policyExist -and $policyValue -ne $null)
{
    Write-Host "There is already an existing Policy for Allow/Block domain list."
    Write-Output "`nDetails for the Existing Policy in Azure AD: "
    PrintAllowBlockedList $currentpolicy.Definition[0];

    Write-Host "`nNew Policy Changes:"
    PrintAllowBlockedList $policyValue;

    $title = "Policy Change";
    $message = "Do you want to continue changing existing policy?";
    $yes = New-Object System.Management.Automation.Host.ChoiceDescription "Y"
    $no = New-Object System.Management.Automation.Host.ChoiceDescription "N"

    [System.Management.Automation.Host.ChoiceDescription[]]$options = $no,$yes;
    $confirmation = $host.ui.PromptForChoice($title, $message, $options, 0);

    if ($confirmation -eq 0)
    {
        Exit
    }
    else
    {
        Write-Host "Executing User command."
    }

    Set-AzureADPolicy -Definition $policyValue -Id $currentpolicy.Id | Out-Null
}
else
{
    New-AzureADPolicy -Definition $policyValue -DisplayName B2BManagementPolicy -Type B2BManagementPolicy -IsOrganizationDefault $true -InformationAction Ignore | Out-Null
}

Write-Output "`nNew AzureAD Policy: "
$currentPolicy = GetExistingPolicy;
PrintAllowBlockedList $currentpolicy.Definition[0];

Exit
 
Afficher: