Partilhar via


Configurar a sincronização entre locatários usando o PowerShell ou a API do Microsoft Graph

Este artigo descreve as principais etapas para configurar a sincronização entre locatários usando o Microsoft Graph PowerShell ou a API do Microsoft Graph. Quando configurado, o Microsoft Entra ID provisiona e desprovisiona automaticamente os usuários B2B em seu locatário de destino. Para obter etapas detalhadas usando o centro de administração do Microsoft Entra, consulte Configurar a sincronização entre locatários.

Diagrama que mostra a sincronização entre locatários entre locatário de origem e locatário de destino.

Pré-requisitos

Ícone para o locatário de origem.
Locatário de origem

Ícone para o locatário de destino.
Locatário de destino

Etapa 1: Entrar no locatário de destino

Ícone para o locatário de destino.
Locatário de destino

  1. Inicie o PowerShell.

  2. Se necessário, instale o SDK do Microsoft Graph PowerShell.

  3. Obtenha a ID do locatário dos locatários de origem e de destino e inicialize as variáveis.

    $SourceTenantId = "<SourceTenantId>"
    $TargetTenantId = "<TargetTenantId>"
    
  4. Use o comando Connect-MgGraph para entrar no locatário de destino e consentir com as seguintes permissões necessárias.

    • Policy.Read.All
    • Policy.ReadWrite.CrossTenantAccess
    Connect-MgGraph -TenantId $TargetTenantId -Scopes "Policy.Read.All","Policy.ReadWrite.CrossTenantAccess"
    

Etapa 2: Habilitar a sincronização do usuário no locatário de destino

Ícone para o locatário de destino.
Locatário de destino

  1. No locatário de destino, use o comando New-MgPolicyCrossTenantAccessPolicyPartner para criar uma nova configuração de parceiro em uma política de acesso entre locatários entre o locatário de destino e o locatário de origem. Use o ID do locatário de origem na solicitação.

    Se você receber o erro New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists, talvez já tenha uma configuração existente. Para obter mais informações, consulte Sintoma - Erro de MgPolicyCrossTenantAccessPolicyPartner_Create novo.

    $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]]}
    
  2. Use o comando Invoke-MgGraphRequest para habilitar a sincronização do usuário no locatário de destino.

    Se você receber um Request_MultipleObjectsWithSameKeyValue erro, talvez já tenha uma política existente. Para obter mais informações, consulte Sintoma - Request_MultipleObjectsWithSameKeyValue erro.

    $Params = @{
        userSyncInbound = @{
            isSyncAllowed = $true
        }
    }
    Invoke-MgGraphRequest -Method PUT -Uri "https://graph.microsoft.com/v1.0/policies/crossTenantAccessPolicy/partners/$SourceTenantId/identitySynchronization" -Body $Params
    
  3. Use o comando Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization para verificar se IsSyncAllowed está definido como True.

    (Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId).UserSyncInbound
    
    IsSyncAllowed
    -------------
    True
    

Etapa 3: resgatar convites automaticamente no locatário de destino

Ícone para o locatário de destino.
Locatário de destino

  1. No locatário de destino, use o comando Update-MgPolicyCrossTenantAccessPolicyPartner para resgatar automaticamente convites e suprimir prompts de consentimento para acesso de entrada.

    $AutomaticUserConsentSettings = @{
        "InboundAllowed"="True"
    }
    Update-MgPolicyCrossTenantAccessPolicyPartner -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId -AutomaticUserConsentSettings $AutomaticUserConsentSettings
    

Etapa 4: Entrar no locatário de origem

Ícone para o locatário de origem.
Locatário de origem

  1. Inicie uma instância do PowerShell.

  2. Obtenha a ID do locatário dos locatários de origem e de destino e inicialize as variáveis.

    $SourceTenantId = "<SourceTenantId>"
    $TargetTenantId = "<TargetTenantId>"
    
  3. Use o comando Connect-MgGraph para entrar no locatário de origem e consentir com as seguintes permissões necessárias.

    • 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"
    

Etapa 5: resgatar convites automaticamente no locatário de origem

Ícone para o locatário de origem.
Locatário de origem

  1. No locatário de origem, use o comando New-MgPolicyCrossTenantAccessPolicyPartner para criar uma nova configuração de parceiro em uma política de acesso entre locatários entre o locatário de origem e o locatário de destino. Use o ID do locatário de destino na solicitação.

    Se você receber o erro New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists, talvez já tenha uma configuração existente. Para obter mais informações, consulte Sintoma - Erro de MgPolicyCrossTenantAccessPolicyPartner_Create novo.

    $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]]}
    
    
  2. Use o comando Update-MgPolicyCrossTenantAccessPolicyPartner para resgatar automaticamente convites e suprimir prompts de consentimento para acesso de saída.

    $AutomaticUserConsentSettings = @{
        "OutboundAllowed"="True"
    }
    Update-MgPolicyCrossTenantAccessPolicyPartner -CrossTenantAccessPolicyConfigurationPartnerTenantId $TargetTenantId -AutomaticUserConsentSettings $AutomaticUserConsentSettings
    

Etapa 6: Criar um aplicativo de configuração no locatário de origem

Ícone para o locatário de origem.
Locatário de origem

  1. No locatário de origem, use o comando Invoke-MgInstantiateApplicationTemplate para adicionar uma instância de um aplicativo de configuração da galeria de aplicativos Microsoft Entra ao seu locatário.

    Invoke-MgInstantiateApplicationTemplate -ApplicationTemplateId "518e5f48-1fc8-4c48-9387-9fdf28b0dfe7" -DisplayName "Fabrikam"
    
  2. Use o comando Get-MgServicePrincipal para obter a ID da entidade de serviço e a ID da função do aplicativo.

    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                      :
    
    ...
    
  3. Inicialize uma variável para o ID da entidade de serviço.

    Certifique-se de usar a ID da entidade de serviço em vez da ID do aplicativo.

    $ServicePrincipalId = "<ServicePrincipalId>"
    
  4. Inicialize uma variável para o ID da função do aplicativo.

    $AppRoleId= "<AppRoleId>"
    

Etapa 7: Testar a conexão com o locatário de destino

Ícone para o locatário de origem.
Locatário de origem

  1. No locatário de origem, use o comando Invoke-MgGraphRequest para testar a conexão com o locatário de destino e validar as credenciais.

    $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
    

Etapa 8: Criar um trabalho de provisionamento no locatário de origem

Ícone para o locatário de origem.
Locatário de origem

No locatário de origem, para habilitar o provisionamento, crie um trabalho de provisionamento.

  1. Determine o modelo de sincronização a ser usado, como Azure2Azure.

    Um modelo tem configurações de sincronização pré-configuradas.

  2. No locatário de origem, use o comando New-MgServicePrincipalSynchronizationJob para criar um trabalho de provisionamento com base em um modelo.

    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]}
    
  3. Inicialize uma variável para a ID do trabalho.

    $JobId = "<JobId>"
    

Etapa 9: salve suas credenciais

Ícone para o locatário de origem.
Locatário de origem

  1. No locatário de origem, use o comando Invoke-MgGraphRequest para salvar suas credenciais.

    $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
    

Etapa 10: Atribuir um usuário à configuração

Ícone para o locatário de origem.
Locatário de origem

Para que a sincronização entre locatários funcione, pelo menos um usuário interno deve ser atribuído à configuração.

  1. No locatário de origem, use o comando New-MgServicePrincipalAppRoleAssignedTo para atribuir um usuário interno à configuração.

    $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]}
    

Etapa 11: Fornecimento de teste sob demanda

Ícone para o locatário de origem.
Locatário de origem

Agora que você tem uma configuração, pode testar o provisionamento sob demanda com um de seus usuários.

  1. No locatário de origem, use o comando Get-MgServicePrincipalSynchronizationJobSchema para obter a ID da regra de esquema.

    $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 : {}
    
  2. Inicialize uma variável para a ID da regra.

    $RuleId = "<RuleId>"
    
  3. Use o comando New-MgServicePrincipalSynchronizationJobOnDemand para provisionar um usuário de teste sob demanda.

    $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]}
    

Etapa 12: Iniciar o trabalho de provisionamento

Ícone para o locatário de origem.
Locatário de origem

  1. Agora que o trabalho de provisionamento está configurado, no locatário de origem, use o comando Start-MgServicePrincipalSynchronizationJob para iniciar o trabalho de provisionamento.

    Start-MgServicePrincipalSynchronizationJob -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId
    

Etapa 13: Monitorar o provisionamento

Ícone para o locatário de origem.
Locatário de origem

  1. Agora que o trabalho de provisionamento está em execução, no locatário de origem, use o comando Get-MgServicePrincipalSynchronizationJob para monitorar o progresso do ciclo de provisionamento atual, bem como estatísticas até o momento, como o número de usuários e grupos que foram criados no sistema de destino.

    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]}
    
  2. Além de monitorar o status do trabalho de provisionamento, use o comando Get-MgAuditLogProvisioning para recuperar os logs de provisionamento e obter todos os eventos de provisionamento que ocorrem. Por exemplo, consulte um usuário específico e determine se ele foi provisionado com êxito.

    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 : {}
    

Sugestões de resolução de problemas

Sintoma - Erro de privilégios insuficientes

Quando você tenta executar uma ação, você recebe uma mensagem de erro semelhante à seguinte:

code: Authorization_RequestDenied
message: Insufficient privileges to complete the operation.

Motivo

O usuário conectado não tem privilégios suficientes ou você precisa consentir com uma das permissões necessárias.

Solução

  1. Certifique-se de que lhe foram atribuídas as funções necessárias. Consulte Pré-requisitos anteriormente neste artigo.

  2. Ao entrar com o Connect-MgGraph, certifique-se de especificar os escopos necessários. Consulte Etapa 1: Entrar no locatário de destino e Etapa 4: Entrar no locatário de origem anteriormente neste artigo.

Sintoma - Erro de nova MgPolicyCrossTenantAccessPolicyPartner_Create

Quando tenta criar uma nova configuração de parceiro, recebe uma mensagem de erro semelhante à seguinte:

New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists.

Motivo

Você provavelmente está tentando criar uma configuração ou objeto que já existe, possivelmente a partir de uma configuração anterior.

Solução

  1. Verifique sua sintaxe e se você está usando a ID de locatário correta.

  2. Use o comando Get-MgPolicyCrossTenantAccessPolicyPartner para listar o objeto existente.

  3. Se você tiver um objeto existente, talvez seja necessário fazer uma atualização usando Update-MgPolicyCrossTenantAccessPolicyPartner

Sintoma - erro Request_MultipleObjectsWithSameKeyValue

Quando tenta ativar a sincronização do utilizador, recebe uma mensagem de erro semelhante à seguinte:

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.", ... }}}

Motivo

Você provavelmente está tentando criar uma política que já existe, possivelmente a partir de uma configuração anterior.

Solução

  1. Verifique sua sintaxe e se você está usando a ID de locatário correta.

  2. Use o comando Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization para listar a IsSyncAllowed configuração.

    (Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId).UserSyncInbound
    
  3. Se você tiver uma política existente, talvez seja necessário fazer uma atualização usando o comando Set-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization para habilitar a sincronização do usuário.

    $Params = @{
        userSyncInbound = @{
            isSyncAllowed = $true
        }
    }
    Set-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId -BodyParameter $Params
    

Próximos passos