Configurare la sincronizzazione tra tenant usando PowerShell o Microsoft API Graph
Questo articolo descrive i passaggi principali per configurare una sincronizzazione tra tenant usando Microsoft Graph PowerShell o l'API Microsoft Graph. Se configurato, Microsoft Entra ID effettua automaticamente il provisioning e il deprovisioning degli utenti B2B nel tenant di destinazione. Per informazioni dettagliate sull'uso dell'Interfaccia di amministrazione di Microsoft Entra, vedere Configurare la sincronizzazione tra tenant.
Prerequisiti
Tenant di origine
- Licenze Microsoft Entra ID P1 o P2. Per altre informazioni, vedere Requisiti relativi alle licenze.
- Ruolo di Amministratore della sicurezza per configurare le impostazioni di accesso tra tenant.
- Ruolo di amministratore delle identità ibride per configurare la sincronizzazione tra tenant.
- Ruolo di amministratore di applicazioni cloud o amministratore di applicazioni per assegnare gli utenti a una configurazione ed eliminare una configurazione.
- Ruolo Amministratore globale per fornire il consenso alle autorizzazioni necessarie.
Tenant di destinazione
- Licenze Microsoft Entra ID P1 o P2. Per altre informazioni, vedere Requisiti relativi alle licenze.
- Ruolo di Amministratore della sicurezza per configurare le impostazioni di accesso tra tenant.
- Ruolo Amministratore globale per fornire il consenso alle autorizzazioni necessarie.
Passaggio 1: Accedere al tenant target
Tenant di destinazione
Avviare PowerShell.
Se necessario, installare Microsoft Graph PowerShell SDK.
Ottenere l'ID tenant dei tenant di origine e target e inizializzare le variabili.
$SourceTenantId = "<SourceTenantId>" $TargetTenantId = "<TargetTenantId>"
Usare il comando Connect-MgGraph per accedere al tenant target e fornire il consenso alle autorizzazioni necessarie elencate di seguito.
Policy.Read.All
Policy.ReadWrite.CrossTenantAccess
Connect-MgGraph -TenantId $TargetTenantId -Scopes "Policy.Read.All","Policy.ReadWrite.CrossTenantAccess"
Passaggio 2: Abilitare la sincronizzazione degli utenti nel tenant target
Tenant di destinazione
Nel tenant di destinazione usare il comando New-MgPolicyCrossTenantAccessPolicyPartner per creare una nuova configurazione partner in un criterio di accesso tra i tenant, in particolare tra il tenant di destinazione e il tenant di origine. Usare l'ID tenant di origine nella richiesta.
Se viene visualizzato l'errore
New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists
, potrebbe esistere già una configurazione. Per altre informazioni, vedere Sintomo: Errore New-MgPolicyCrossTenantAccessPolicyPartner_Create.$Params = @{ TenantId = $SourceTenantId } New-MgPolicyCrossTenantAccessPolicyPartner -BodyParameter $Params | Format-List
AutomaticUserConsentSettings : Microsoft.Graph.PowerShell.Models.MicrosoftGraphInboundOutboundPolicyConfiguration B2BCollaborationInbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting B2BCollaborationOutbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting B2BDirectConnectInbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting B2BDirectConnectOutbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting IdentitySynchronization : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantIdentitySyncPolicyPartner InboundTrust : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyInboundTrust IsServiceProvider : TenantId : <SourceTenantId> TenantRestrictions : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyTenantRestrictions AdditionalProperties : {[@odata.context, https://graph.microsoft.com/v1.0/$metadata#policies/crossTenantAccessPolicy/partners/$entity], [crossCloudMeetingConfiguration, System.Collections.Generic.Dictionary`2[System.String,System.Object]], [protectedContentSharing, System.Collections.Generic.Dictionary`2[System.String,System.Object]]}
Usare il comando Invoke-MgGraphRequest per abilitare la sincronizzazione degli utenti nel tenant di destinazione.
Se viene visualizzato un errore
Request_MultipleObjectsWithSameKeyValue
, potrebbe esistere già una policy. Per altre informazioni, vedere Sintomo:Errore Request_MultipleObjectsWithSameKeyValue.$Params = @{ userSyncInbound = @{ isSyncAllowed = $true } } Invoke-MgGraphRequest -Method PUT -Uri "https://graph.microsoft.com/v1.0/policies/crossTenantAccessPolicy/partners/$SourceTenantId/identitySynchronization" -Body $Params
Usare il comando Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization per verificare che
IsSyncAllowed
sia impostato su True.(Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId).UserSyncInbound
IsSyncAllowed ------------- True
Passaggio 3: Riscattare automaticamente gli inviti nel tenant di destinazione
Tenant di destinazione
Nel tenant di destinazione usare il comando Update-MgPolicyCrossTenantAccessPolicyPartner per riscattare automaticamente gli inviti e disabilitare le richieste di consenso per l'accesso in ingresso.
$AutomaticUserConsentSettings = @{ "InboundAllowed"="True" } Update-MgPolicyCrossTenantAccessPolicyPartner -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId -AutomaticUserConsentSettings $AutomaticUserConsentSettings
Passaggio 4: Accedere al tenant di origine
Tenant di origine
Avviare un'istanza di PowerShell.
Ottenere l'ID tenant dei tenant di origine e target e inizializzare le variabili.
$SourceTenantId = "<SourceTenantId>" $TargetTenantId = "<TargetTenantId>"
Usare il comando Connect-MgGraph per accedere al tenant di origine e fornire il consenso alle autorizzazioni necessarie elencate di seguito.
Policy.Read.All
Policy.ReadWrite.CrossTenantAccess
Application.ReadWrite.All
Directory.ReadWrite.All
AuditLog.Read.All
Connect-MgGraph -TenantId $SourceTenantId -Scopes "Policy.Read.All","Policy.ReadWrite.CrossTenantAccess","Application.ReadWrite.All","Directory.ReadWrite.All","AuditLog.Read.All"
Passaggio 5: Riscattare automaticamente gli inviti nel tenant di origine
Tenant di origine
Nel tenant di origine usare il comando New-MgPolicyCrossTenantAccessPolicyPartner per creare una nuova configurazione partner in un criterio di accesso tra i tenant, in particolare tra il tenant di origine e il tenant di destinazione. Usare l'ID tenant di destinazione nella richiesta.
Se viene visualizzato l'errore
New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists
, potrebbe esistere già una configurazione. Per altre informazioni, vedere Sintomo: Errore New-MgPolicyCrossTenantAccessPolicyPartner_Create.$Params = @{ TenantId = $TargetTenantId } New-MgPolicyCrossTenantAccessPolicyPartner -BodyParameter $Params | Format-List
AutomaticUserConsentSettings : Microsoft.Graph.PowerShell.Models.MicrosoftGraphInboundOutboundPolicyConfiguration B2BCollaborationInbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting B2BCollaborationOutbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting B2BDirectConnectInbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting B2BDirectConnectOutbound : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyB2BSetting IdentitySynchronization : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantIdentitySyncPolicyPartner InboundTrust : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyInboundTrust IsServiceProvider : TenantId : <TargetTenantId> TenantRestrictions : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCrossTenantAccessPolicyTenantRestrictions AdditionalProperties : {[@odata.context, https://graph.microsoft.com/v1.0/$metadata#policies/crossTenantAccessPolicy/partners/$entity], [crossCloudMeetingConfiguration, System.Collections.Generic.Dictionary`2[System.String,System.Object]], [protectedContentSharing, System.Collections.Generic.Dictionary`2[System.String,System.Object]]}
Usare il comando Update-MgPolicyCrossTenantAccessPolicyPartner per riscattare automaticamente gli inviti e disabilitare le richieste di consenso per l'accesso in uscita.
$AutomaticUserConsentSettings = @{ "OutboundAllowed"="True" } Update-MgPolicyCrossTenantAccessPolicyPartner -CrossTenantAccessPolicyConfigurationPartnerTenantId $TargetTenantId -AutomaticUserConsentSettings $AutomaticUserConsentSettings
Passaggio 6: Creare un'applicazione di configurazione nel tenant di origine
Tenant di origine
Nel tenant di origine usare il comando Invoke-MgInstantiateApplicationTemplate per aggiungere un'istanza di un'applicazione di configurazione dalla raccolta di applicazioni di Microsoft Entra nel tenant.
Invoke-MgInstantiateApplicationTemplate -ApplicationTemplateId "518e5f48-1fc8-4c48-9387-9fdf28b0dfe7" -DisplayName "Fabrikam"
Usare il comando Get-MgServicePrincipal per ottenere l'ID entità servizio e l'ID ruolo dell'app.
Get-MgServicePrincipal -Filter "DisplayName eq 'Fabrikam'" | Format-List
AccountEnabled : True AddIns : {} AlternativeNames : {} AppDescription : AppDisplayName : Fabrikam AppId : <AppId> AppManagementPolicies : AppOwnerOrganizationId : <AppOwnerOrganizationId> AppRoleAssignedTo : AppRoleAssignmentRequired : True AppRoleAssignments : AppRoles : {<AppRoleId>} ApplicationTemplateId : 518e5f48-1fc8-4c48-9387-9fdf28b0dfe7 ClaimsMappingPolicies : CreatedObjects : CustomSecurityAttributes : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCustomSecurityAttributeValue DelegatedPermissionClassifications : DeletedDateTime : Description : DisabledByMicrosoftStatus : DisplayName : Fabrikam Endpoints : ErrorUrl : FederatedIdentityCredentials : HomeRealmDiscoveryPolicies : Homepage : https://account.activedirectory.windowsazure.com:444/applications/default.aspx?metadata=aad2aadsync|ISV9.1|primary|z Id : <ServicePrincipalId> Info : Microsoft.Graph.PowerShell.Models.MicrosoftGraphInformationalUrl KeyCredentials : {} LicenseDetails : ...
Inizializzare una variabile per l'ID entità servizio.
Assicurarsi di usare l'ID entità servizio anziché l'ID applicazione.
$ServicePrincipalId = "<ServicePrincipalId>"
Inizializzare una variabile per l'ID ruolo dell'app.
$AppRoleId= "<AppRoleId>"
Passaggio 7: Testare la connessione al tenant di destinazione
Tenant di origine
Nel tenant di origine usare il comando Invoke-MgGraphRequest per testare la connessione al tenant di destinazione e convalidare le credenziali.
$Params = @{ "useSavedCredentials" = $false "templateId" = "Azure2Azure" "credentials" = @( @{ "key" = "CompanyId" "value" = $TargetTenantId } @{ "key" = "AuthenticationType" "value" = "SyncPolicy" } ) } Invoke-MgGraphRequest -Method POST -Uri "https://graph.microsoft.com/v1.0/servicePrincipals/$ServicePrincipalId/synchronization/jobs/validateCredentials" -Body $Params
Passaggio 8: Creare un processo di provisioning nel tenant di origine
Tenant di origine
Nel tenant di origine, per abilitare il provisioning, creare un processo di provisioning.
Determinare il modello di sincronizzazione da usare, ad esempio
Azure2Azure
.Un modello ha impostazioni di sincronizzazione preconfigurate.
Nel tenant di origine usare il comando New-MgServicePrincipalSynchronizationJob per creare un processo di provisioning basato su un modello.
New-MgServicePrincipalSynchronizationJob -ServicePrincipalId $ServicePrincipalId -TemplateId "Azure2Azure" | Format-List
Id : <JobId> Schedule : Microsoft.Graph.PowerShell.Models.MicrosoftGraphSynchronizationSchedule Schema : Microsoft.Graph.PowerShell.Models.MicrosoftGraphSynchronizationSchema Status : Microsoft.Graph.PowerShell.Models.MicrosoftGraphSynchronizationStatus SynchronizationJobSettings : {AzureIngestionAttributeOptimization, LookaheadQueryEnabled} TemplateId : Azure2Azure AdditionalProperties : {[@odata.context, https://graph.microsoft.com/v1.0/$metadata#servicePrincipals('<ServicePrincipalId>')/synchro nization/jobs/$entity]}
Inizializzare una variabile per l'ID processo.
$JobId = "<JobId>"
Passaggio 9: Salvare le credenziali personali
Tenant di origine
Nel tenant di origine usare il comando Invoke-MgGraphRequest per salvare le credenziali.
$Params = @{ "value" = @( @{ "key" = "AuthenticationType" "value" = "SyncPolicy" } @{ "key" = "CompanyId" "value" = $TargetTenantId } ) } Invoke-MgGraphRequest -Method PUT -Uri "https://graph.microsoft.com/v1.0/servicePrincipals/$ServicePrincipalId/synchronization/secrets" -Body $Params
Passaggio 10: Assegnare un utente alla configurazione
Tenant di origine
Per il funzionamento della sincronizzazione tra tenant, è necessario assegnare almeno un utente interno alla configurazione.
Nel tenant di origine usare il comando New-MgServicePrincipalAppRoleAssignedTo per assegnare un utente interno alla configurazione.
$Params = @{ PrincipalId = "<PrincipalId>" ResourceId = $ServicePrincipalId AppRoleId = $AppRoleId } New-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $ServicePrincipalId -BodyParameter $Params | Format-List
AppRoleId : <AppRoleId> CreatedDateTime : 7/31/2023 10:27:12 PM DeletedDateTime : Id : <Id> PrincipalDisplayName : User1 PrincipalId : <PrincipalId> PrincipalType : User ResourceDisplayName : Fabrikam ResourceId : <ServicePrincipalId> AdditionalProperties : {[@odata.context, https://graph.microsoft.com/v1.0/$metadata#appRoleAssignments/$entity]}
Passaggio 11: Testare il provisioning su richiesta
Tenant di origine
Dopo aver creato una configurazione, è possibile testare il provisioning su richiesta con uno degli utenti.
Nel tenant di origine usare il comando Get-MgServicePrincipalSynchronizationJobSchema per ottenere l'ID regola dello schema.
$SynchronizationSchema = Get-MgServicePrincipalSynchronizationJobSchema -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId $SynchronizationSchema.SynchronizationRules | Format-List
ContainerFilter : Microsoft.Graph.PowerShell.Models.MicrosoftGraphContainerFilter Editable : True GroupFilter : Microsoft.Graph.PowerShell.Models.MicrosoftGraphGroupFilter Id : <RuleId> Metadata : {defaultSourceObjectMappings, supportsProvisionOnDemand} Name : USER_INBOUND_USER ObjectMappings : {Provision Azure Active Directory Users, , , ...} Priority : 1 SourceDirectoryName : Azure Active Directory TargetDirectoryName : Azure Active Directory (target tenant) AdditionalProperties : {}
Inizializzare una variabile per l'ID regola
$RuleId = "<RuleId>"
Usare il comando New-MgServicePrincipalSynchronizationJobOnDemand per effettuare il provisioning di un utente di test su richiesta.
$Params = @{ Parameters = @( @{ Subjects = @( @{ ObjectId = "<UserObjectId>" ObjectTypeName = "User" } ) RuleId = $RuleId } ) } New-MgServicePrincipalSynchronizationJobOnDemand -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId -BodyParameter $Params | Format-List
Key : Microsoft.Identity.Health.CPP.Common.DataContracts.SyncFabric.StatusInfo Value : [{"provisioningSteps":[{"name":"EntryImport","type":"Import","status":"Success","description":"Retrieved User 'user1@fabrikam.com' from Azure Active Directory","timestamp":"2023-07-31T22:31:15.9116590Z","details":{"objectId": "<UserObjectId>","accountEnabled":"True","displayName":"User1","mailNickname":"user1","userPrincipalName":"use ... AdditionalProperties : {[@odata.context, https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.stringKeyStringValuePair]}
Passaggio 12: Avviare il processo di provisioning
Tenant di origine
Ora che il processo di provisioning è configurato, nel tenant di origine, usare il comando Start-MgServicePrincipalSynchronizationJob per avviare il processo di provisioning.
Start-MgServicePrincipalSynchronizationJob -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId
Passaggio 13: Monitorare il provisioning
Tenant di origine
Ora che il processo di provisioning è in esecuzione, nel tenant di origine, usare il comando Get-MgServicePrincipalSynchronizationJob per monitorare lo stato di avanzamento del ciclo di provisioning corrente e le statistiche fino a quel momento, ad esempio il numero di utenti e gruppi creati nel sistema di destinazione.
Get-MgServicePrincipalSynchronizationJob -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId | Format-List
Id : <JobId> Schedule : Microsoft.Graph.PowerShell.Models.MicrosoftGraphSynchronizationSchedule Schema : Microsoft.Graph.PowerShell.Models.MicrosoftGraphSynchronizationSchema Status : Microsoft.Graph.PowerShell.Models.MicrosoftGraphSynchronizationStatus SynchronizationJobSettings : {AzureIngestionAttributeOptimization, LookaheadQueryEnabled} TemplateId : Azure2Azure AdditionalProperties : {[@odata.context, https://graph.microsoft.com/v1.0/$metadata#servicePrincipals('<ServicePrincipalId>')/synchro nization/jobs/$entity]}
Oltre a monitorare lo stato del processo di provisioning, usare il comando Get-MgAuditLogProvisioning per recuperare i log di provisioning e ottenere tutti gli eventi di provisioning che si verificano. Ad esempio, eseguire una query per un determinato utente e determinare se è stato eseguito correttamente il provisioning.
Get-MgAuditLogDirectoryAudit | Select -First 10 | Format-List
ActivityDateTime : 7/31/2023 12:08:17 AM ActivityDisplayName : Export AdditionalDetails : {Details, ErrorCode, EventName, ipaddr...} Category : ProvisioningManagement CorrelationId : aaaa0000-bb11-2222-33cc-444444dddddd Id : Sync_aaaa0000-bb11-2222-33cc-444444dddddd_L5BFV_161778479 InitiatedBy : Microsoft.Graph.PowerShell.Models.MicrosoftGraphAuditActivityInitiator1 LoggedByService : Account Provisioning OperationType : Result : success ResultReason : User 'user2@fabrikam.com' was created in Azure Active Directory (target tenant) TargetResources : {<ServicePrincipalId>, } AdditionalProperties : {} ActivityDateTime : 7/31/2023 12:08:17 AM ActivityDisplayName : Export AdditionalDetails : {Details, ErrorCode, EventName, ipaddr...} Category : ProvisioningManagement CorrelationId : aaaa0000-bb11-2222-33cc-444444dddddd Id : Sync_aaaa0000-bb11-2222-33cc-444444dddddd_L5BFV_161778264 InitiatedBy : Microsoft.Graph.PowerShell.Models.MicrosoftGraphAuditActivityInitiator1 LoggedByService : Account Provisioning OperationType : Result : success ResultReason : User 'user2@fabrikam.com' was updated in Azure Active Directory (target tenant) TargetResources : {<ServicePrincipalId>, } AdditionalProperties : {} ActivityDateTime : 7/31/2023 12:08:14 AM ActivityDisplayName : Synchronization rule action AdditionalDetails : {Details, ErrorCode, EventName, ipaddr...} Category : ProvisioningManagement CorrelationId : aaaa0000-bb11-2222-33cc-444444dddddd Id : Sync_aaaa0000-bb11-2222-33cc-444444dddddd_L5BFV_161778395 InitiatedBy : Microsoft.Graph.PowerShell.Models.MicrosoftGraphAuditActivityInitiator1 LoggedByService : Account Provisioning OperationType : Result : success ResultReason : User 'user2@fabrikam.com' will be created in Azure Active Directory (target tenant) (User is active and assigned in Azure Active Directory, but no matching User was found in Azure Active Directory (target tenant)) TargetResources : {<ServicePrincipalId>, } AdditionalProperties : {}
Suggerimenti per la risoluzione dei problemi
Sintomo: Errore di privilegi insufficienti
Quando si tenta di eseguire un'azione, si riceve un messaggio di errore simile al seguente:
code: Authorization_RequestDenied
message: Insufficient privileges to complete the operation.
Causa
L'utente connesso non dispone di privilegi sufficienti oppure è necessario fornire il consenso a una delle autorizzazioni necessarie.
Soluzione
Assicurarsi di aver assegnato i ruoli necessari. Vedere la sezione Prerequisiti più indietro in questo articolo.
Quando si accede con Connect-MgGraph, assicurarsi di specificare gli ambiti necessari. Vedere Passaggio 1: Accedere al tenant di destinazione e Passaggio 4: Accedere al tenant di origine più indietro in questo articolo.
Sintomo: Errore New-MgPolicyCrossTenantAccessPolicyPartner_Create
Quando si tenta di creare una nuova configurazione partner, si riceve un messaggio di errore simile al seguente:
New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists.
Causa
È probabile che si stia tentando di creare una configurazione o un oggetto già esistente, probabilmente da una configurazione precedente.
Soluzione
Verificare la sintassi e di usare l'ID tenant corretto.
Usare il comando Get-MgPolicyCrossTenantAccessPolicyPartner per elencare l'oggetto esistente.
Se si dispone di un oggetto esistente, potrebbe essere necessario eseguire un aggiornamento usando Update-MgPolicyCrossTenantAccessPolicyPartner
Sintomo: Errore Request_MultipleObjectsWithSameKeyValue
Quando si tenta di abilitare una sincronizzazione utente, si riceve un messaggio di errore simile al seguente:
Invoke-MgGraphRequest: PUT https://graph.microsoft.com/v1.0/policies/crossTenantAccessPolicy/partners/<SourceTenantId>/identitySynchronization
HTTP/1.1 409 Conflict
...
{"error":{"code":"Request_MultipleObjectsWithSameKeyValue","message":"A conflicting object with one or more of the specified property values is present in the directory.","details":[{"code":"ConflictingObjects","message":"A conflicting object with one or more of the specified property values is present in the directory.", ... }}}
Causa
È probabile che si stia tentando di creare un criterio già esistente, probabilmente da una configurazione precedente.
Soluzione
Verificare la sintassi e di usare l'ID tenant corretto.
Usare il comando Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization per elencare le impostazioni
IsSyncAllowed
.(Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId).UserSyncInbound
Se si dispone di un criterio esistente, potrebbe essere necessario eseguire un aggiornamento usando il comando Set-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization per abilitare la sincronizzazione degli utenti.
$Params = @{ userSyncInbound = @{ isSyncAllowed = $true } } Set-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId -BodyParameter $Params