Konfigurace synchronizace mezi tenanty pomocí PowerShellu nebo rozhraní Microsoft Graph API

Tento článek popisuje klíčové kroky konfigurace synchronizace mezi tenanty pomocí Microsoft Graph PowerShellu nebo rozhraní Microsoft Graph API. Při konfiguraci microsoft Entra ID automaticky zřídí a zruší zřídí uživatele B2B ve vašem cílovém tenantovi. Podrobné kroky v Centru pro správu Microsoft Entra najdete v tématu Konfigurace synchronizace mezi tenanty.

Diagram znázorňující synchronizaci mezi tenanty mezi zdrojovým a cílovým tenantem

Požadavky

Ikona zdrojového tenanta
Zdrojový tenant

Ikona cílového tenanta
Cílový tenant

Krok 1: Přihlášení k cílovému tenantovi

Ikona cílového tenanta
Cílový tenant

  1. Spusťte PowerShell.

  2. V případě potřeby nainstalujte sadu Microsoft Graph PowerShell SDK.

  3. Získejte ID tenanta zdrojového a cílového tenanta a inicializujete proměnné.

    $SourceTenantId = "<SourceTenantId>"
    $TargetTenantId = "<TargetTenantId>"
    
  4. Pomocí příkazu Connect-MgGraph se přihlaste k cílovému tenantovi a odsouhlaste následující požadovaná oprávnění.

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

Krok 2: Povolení synchronizace uživatelů v cílovém tenantovi

Ikona cílového tenanta
Cílový tenant

  1. V cílovém tenantovi pomocí příkazu New-MgPolicyCrossTenantAccessPolicyPartner vytvořte novou konfiguraci partnera v zásadách přístupu mezi tenanty mezi cílovým a zdrojovým tenantem. V požadavku použijte ID zdrojového tenanta.

    Pokud se zobrazí chyba New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists, možná už máte existující konfiguraci. Další informace najdete v tématu Příznaky – Chyba 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]]}
    
  2. Pomocí příkazu Invoke-MgGraphRequest povolte synchronizaci uživatelů v cílovém tenantovi.

    Pokud se zobrazí Request_MultipleObjectsWithSameKeyValue chyba, možná už máte existující zásadu. Další informace naleznete v tématu Příznaky – Request_MultipleObjectsWithSameKeyValue chyba.

    $Params = @{
        userSyncInbound = @{
            isSyncAllowed = $true
        }
    }
    Invoke-MgGraphRequest -Method PUT -Uri "https://graph.microsoft.com/v1.0/policies/crossTenantAccessPolicy/partners/$SourceTenantId/identitySynchronization" -Body $Params
    
  3. Pomocí příkazu Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization ověřteIsSyncAllowed, že je nastavená hodnota True.

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

Krok 3: Automatické uplatnění pozvánek v cílovém tenantovi

Ikona cílového tenanta
Cílový tenant

  1. V cílovém tenantovi použijte příkaz Update-MgPolicyCrossTenantAccessPolicyPartner k automatickému uplatnění pozvánek a potlačení výzev k vyjádření souhlasu pro příchozí přístup.

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

Krok 4: Přihlášení ke zdrojovému tenantovi

Ikona zdrojového tenanta
Zdrojový tenant

  1. Spusťte instanci PowerShellu.

  2. Získejte ID tenanta zdrojového a cílového tenanta a inicializujete proměnné.

    $SourceTenantId = "<SourceTenantId>"
    $TargetTenantId = "<TargetTenantId>"
    
  3. Pomocí příkazu Connect-MgGraph se přihlaste ke zdrojovému tenantovi a odsouhlaste následující požadovaná oprávnění.

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

Krok 5: Automatické uplatnění pozvánek ve zdrojovém tenantovi

Ikona zdrojového tenanta
Zdrojový tenant

  1. Ve zdrojovém tenantovi pomocí příkazu New-MgPolicyCrossTenantAccessPolicyPartner vytvořte novou konfiguraci partnera v zásadách přístupu mezi tenanty mezi zdrojovým a cílovým tenantem. V požadavku použijte ID cílového tenanta.

    Pokud se zobrazí chyba New-MgPolicyCrossTenantAccessPolicyPartner_Create: Another object with the same value for property tenantId already exists, možná už máte existující konfiguraci. Další informace najdete v tématu Příznaky – Chyba 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]]}
    
    
  2. Pomocí příkazu Update-MgPolicyCrossTenantAccessPolicyPartner můžete automaticky uplatnit pozvánky a potlačit výzvy k vyjádření souhlasu pro odchozí přístup.

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

Krok 6: Vytvoření konfigurační aplikace ve zdrojovém tenantovi

Ikona zdrojového tenanta
Zdrojový tenant

  1. Ve zdrojovém tenantovi pomocí příkazu Invoke-MgInstantiateApplicationTemplate přidejte do svého tenanta instanci konfigurační aplikace z galerie aplikací Microsoft Entra.

    Invoke-MgInstantiateApplicationTemplate -ApplicationTemplateId "518e5f48-1fc8-4c48-9387-9fdf28b0dfe7" -DisplayName "Fabrikam"
    
  2. Pomocí příkazu Get-MgServicePrincipal získejte ID instančního objektu a ID role aplikace.

    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. Inicializuje proměnnou pro ID instančního objektu.

    Nezapomeňte místo ID aplikace použít ID instančního objektu.

    $ServicePrincipalId = "<ServicePrincipalId>"
    
  4. Inicializuje proměnnou pro ID role aplikace.

    $AppRoleId= "<AppRoleId>"
    

Krok 7: Otestování připojení k cílovému tenantovi

Ikona zdrojového tenanta
Zdrojový tenant

  1. Ve zdrojovém tenantovi pomocí příkazu Invoke-MgGraphRequest otestujte připojení k cílovému tenantovi a ověřte přihlašovací údaje.

    $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
    

Krok 8: Vytvoření úlohy zřizování ve zdrojovém tenantovi

Ikona zdrojového tenanta
Zdrojový tenant

Pokud chcete ve zdrojovém tenantovi povolit zřizování, vytvořte úlohu zřizování.

  1. Určete šablonu synchronizace, která se má použít, například Azure2Azure.

    Šablona má předem nakonfigurovaná nastavení synchronizace.

  2. Ve zdrojovém tenantovi pomocí příkazu New-MgServicePrincipalSynchronizationJob vytvořte úlohu zřizování na základě šablony.

    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. Inicializuje proměnnou pro ID úlohy.

    $JobId = "<JobId>"
    

Krok 9: Uložení přihlašovacích údajů

Ikona zdrojového tenanta
Zdrojový tenant

  1. Ve zdrojovém tenantovi uložte přihlašovací údaje pomocí příkazu Invoke-MgGraphRequest .

    $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
    

Krok 10: Přiřazení uživatele ke konfiguraci

Ikona zdrojového tenanta
Zdrojový tenant

Aby synchronizace mezi tenanty fungovala, musí být ke konfiguraci přiřazen alespoň jeden interní uživatel.

  1. Ve zdrojovém tenantovi pomocí příkazu New-MgServicePrincipalAppRoleAssignedTo přiřaďte k konfiguraci interního uživatele.

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

Krok 11: Testování zřízení na vyžádání

Ikona zdrojového tenanta
Zdrojový tenant

Teď, když máte konfiguraci, můžete otestovat zřizování na vyžádání u jednoho z vašich uživatelů.

  1. Ve zdrojovém tenantovi pomocí příkazu Get-MgServicePrincipalSynchronizationJobSchema získejte ID pravidla schématu.

    $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. Inicializuje proměnnou pro ID pravidla.

    $RuleId = "<RuleId>"
    
  3. Pomocí příkazu New-MgServicePrincipalSynchronizationJobOnDemand zřiďte testovacího uživatele na vyžádání.

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

Krok 12: Spuštění úlohy zřizování

Ikona zdrojového tenanta
Zdrojový tenant

  1. Teď, když je úloha zřizování nakonfigurovaná, ve zdrojovém tenantovi spusťte úlohu zřizování pomocí příkazu Start-MgServicePrincipalSynchronizationJob .

    Start-MgServicePrincipalSynchronizationJob -ServicePrincipalId $ServicePrincipalId -SynchronizationJobId $JobId
    

Krok 13: Monitorování zřizování

Ikona zdrojového tenanta
Zdrojový tenant

  1. Teď, když je úloha zřizování spuštěná, použijte ve zdrojovém tenantovi příkaz Get-MgServicePrincipalSynchronizationJob ke sledování průběhu aktuálního cyklu zřizování a také statistiky k datu, jako je počet uživatelů a skupin vytvořených v cílovém systému.

    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. Kromě monitorování stavu úlohy zřizování použijte příkaz Get-MgAuditLogProvisioning k načtení protokolů zřizování a získání všech událostí zřizování, ke kterým dochází. Zadejte například dotaz na konkrétního uživatele a určete, jestli se úspěšně zřídil.

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

Rady pro řešení potíží

Příznak – Chyba nedostatečných oprávnění

Při pokusu o provedení akce se zobrazí chybová zpráva podobná následující:

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

Příčina

Buď přihlášený uživatel nemá dostatečná oprávnění, nebo potřebujete souhlas s jedním z požadovaných oprávnění.

Řešení

  1. Ujistěte se, že máte přiřazené požadované role. Viz požadavky uvedené výše v tomto článku.

  2. Když se přihlásíte pomocí Connect-MgGraph, ujistěte se, že jste zadali požadované obory. Viz krok 1: Přihlášení k cílovému tenantovi a krok 4: Přihlášení ke zdrojovému tenantovi dříve v tomto článku.

Příznak – chyba new-MgPolicyCrossTenantAccessPolicyPartner_Create

Při pokusu o vytvoření nové konfigurace partnera se zobrazí chybová zpráva podobná následující:

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

Příčina

Pravděpodobně se pokoušíte vytvořit konfiguraci nebo objekt, který již existuje, pravděpodobně z předchozí konfigurace.

Řešení

  1. Ověřte syntaxi a že používáte správné ID tenanta.

  2. K výpisu existujícího objektu použijte příkaz Get-MgPolicyCrossTenantAccessPolicyPartner .

  3. Pokud máte existující objekt, možná budete muset provést aktualizaci pomocí Update-MgPolicyCrossTenantAccessPolicyPartner.

Příznak – chyba Request_MultipleObjectsWithSameKeyValue

Při pokusu o povolení synchronizace uživatelů se zobrazí chybová zpráva podobná následující:

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

Příčina

Pravděpodobně se pokoušíte vytvořit zásadu, která už existuje, pravděpodobně z předchozí konfigurace.

Řešení

  1. Ověřte syntaxi a že používáte správné ID tenanta.

  2. K zobrazení seznamu IsSyncAllowed nastavení použijte příkaz Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization.

    (Get-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization -CrossTenantAccessPolicyConfigurationPartnerTenantId $SourceTenantId).UserSyncInbound
    
  3. Pokud máte existující zásadu, možná budete muset provést aktualizaci pomocí příkazu Set-MgPolicyCrossTenantAccessPolicyPartnerIdentitySynchronization , aby se povolila synchronizace uživatelů.

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

Další kroky