Tutorial: Gestire a livello di codice i criteri avanzati dei connettori

I criteri dei connettori avanzati (ACP) regolano l'utilizzo del connettore con un elenco di indirizzi consentiti rigoroso che blocca i connettori per impostazione predefinita. Oltre all'esperienza dell'interfaccia di amministrazione di Power Platform , è possibile gestire ACP con il codice usando l'API Power Platform e gli SDK di amministrazione (admin). L'automazione di ACP è utile quando si standardizza la governance in molti gruppi di ambiente, replicare criteri di base tra gruppi o gestire i criteri come parte di una pipeline di distribuzione.

In questa esercitazione, scopri come:

  1. Autenticazione tramite API Power Platform .
  2. Comprendere la forma dei criteri ACP.
  3. Creare un criterio e aggiungerlo a un gruppo di ambiente.
  4. Abilitare una singola azione del connettore.
  5. Applicare o aggiornare un criterio in un singolo ambiente.
  6. Copiare un criterio da un gruppo di ambiente a un altro.
  7. Rimuovere ACP da un gruppo di ambiente.

I criteri avanzati del connettore vengono esposti tramite le governance/ruleBasedPolicies operazioni dell'API Power Platform. Un criterio contiene uno o più set di regole; il set di regole con l'ID ConnectorManagement contiene l'elenco di elementi consentiti del connettore ACP. Tutti gli esempi nell'articolo usano la versione 2024-10-01dell'API .

Prerequisiti

Passaggio 1: Esegui autenticazione tramite API Power Platform

Tutti gli esempi eseguono l'autenticazione con l'ID client della registrazione dell'app, seguendo le indicazioni riportate in Autenticazione. Gli esempi seguenti accedono in modo interattivo come utente corrente. Per eseguire in modalità automatica come entità servizio, vedere il flusso del client riservato nell'articolo Autenticazione e assegnare all'entità servizio un ruolo RBAC.

# Requires the MSAL.PS module: Install-Module MSAL.PS -Scope CurrentUser
Import-Module "MSAL.PS"

$clientId  = "<application (client) ID of your app registration>"
$apiBaseUrl = "https://api.powerplatform.com"
$apiVersion = "2024-10-01"

# Sign in interactively and request a token for the Power Platform API
$auth = Get-MsalToken -ClientId $clientId -Scope "https://api.powerplatform.com/.default" -Interactive
$headers = @{ Authorization = "Bearer $($auth.AccessToken)" }

Passaggio 2: Comprendere la forma dei criteri ACP

Un criterio connettore avanzato è un criterio basato su regole che contiene un set di regole con l'ID ConnectorManagement. Questo insieme di regole include un oggetto version e il relativo inputs contiene un AllowedConnectorList, in cui ogni voce consente di specificare un connettore e definisce come vengono gestite le relative azioni e i tipi di connessione:

{
  "name": "Contoso ACP baseline",
  "ruleSets": [
    {
      "id": "ConnectorManagement",
      "version": "1.0",
      "inputs": {
        "AllowedConnectorList": [
          {
            "AllowedConnector": "/providers/Microsoft.PowerApps/apis/shared_office365",
            "AllowedActionsMode": "AllAllowed",
            "AllowedConnectionTypesMode": "AllAllowed"
          },
          {
            "AllowedConnector": "/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps",
            "AllowedActionsMode": "SomeAllowed",
            "AllowedActions": ["GetItem", "CreateRecord"],
            "AllowedConnectionTypesMode": "AllAllowed"
          }
        ]
      }
    }
  ]
}

Tenere presente la semantica seguente:

  • Un connettore che non si trova in AllowedConnectorList è bloccato (negazione predefinita).
  • Ogni voce imposta AllowedActionsMode. AllAllowed consente ogni azione sul connettore. SomeAllowed limita il connettore alle azioni elencate nell'array AllowedActions della voce. Il passaggio 4 illustra come aggiungere un'azione e impostare questa modalità.
  • AllowedConnectionTypesMode gestisce i tipi di connessione consentiti e segue lo stesso AllAllowed modello.
  • Includi il version del set di regole quando crei o aggiorni un criterio. Leggerlo da un criterio esistente e mantenere il valore restituito dal servizio.

Tip

Il valore esatto di AllowedConnector è l'identificatore della risorsa del connettore. Il modo più affidabile per apprendere la forma per i connettori già presenti nel tenant consiste nel leggere prima un criterio esistente (passaggio 4 mostra come) o usare il catalogo dei connettori (descritto di seguito), quindi eseguire il mirroring di tale forma quando si creano o aggiornano i criteri.

Trova gli ID del connettore e dell'azione con il catalogo dei connettori

Per individuare i connettori e le azioni che è possibile consentire, usare l'API Catalogo connettori. Elenca i connettori disponibili in un ambiente, insieme agli identificatori inseriti in AllowedConnector e AllowedActions.

Note

Le operazioni del catalogo dei connettori richiedono un ID ambiente nel percorsoe un OData $filter che specifica lo stesso ambiente, $filter=environment eq '<environmentId>'ad esempio . Entrambi sono obbligatori.

$environmentId = "<environment ID>"
$filter = [uri]::EscapeDataString("environment eq '$environmentId'")

# List connectors available in the environment
$connectors = Invoke-RestMethod -Method Get `
    -Uri "$apiBaseUrl/connectivity/environments/$environmentId/connectors?`$filter=$filter&api-version=$apiVersion" `
    -Headers $headers
$connectors.value | Select-Object name, @{ n = "displayName"; e = { $_.properties.displayName } }

# Get a single connector by ID (the connector's name, such as shared_office365)
$connectorId = "shared_office365"
$connector = Invoke-RestMethod -Method Get `
    -Uri "$apiBaseUrl/connectivity/environments/$environmentId/connectors/$connectorId?`$filter=$filter&api-version=$apiVersion" `
    -Headers $headers
$connector.id   # full resource path to use as AllowedConnector

Usare il id del connettore (il suo percorso completo della risorsa, ad esempio /providers/Microsoft.PowerApps/apis/shared_office365) come valore di AllowedConnector e gli ID delle operazioni del connettore come i valori in AllowedActions. Puoi accedere allo stesso catalogo tramite il namespace connectivity degli SDK di amministrazione.

Passaggio 3. Creare un criterio e aggiungerlo a un gruppo di ambiente

L'aggiunta di ACP a un gruppo di ambiente è un'operazione in due parti: creare i criteri, quindi assegnarli al gruppo. La chiamata di creazione restituisce il nuovo criterio id, che viene usato nella chiamata di assegnazione.

Per assegnare il criterio all'intero gruppo, invia una richiesta di assegnazione con corpo vuoto ({}). Ogni ambiente del gruppo eredita i criteri e rimane sincronizzato con esso.

$environmentGroupId = "<environment group ID>"

# 1. Create the policy with a ConnectorManagement rule set
$policyBody = @{
    name     = "Contoso ACP baseline"
    ruleSets = @(
        @{
            id      = "ConnectorManagement"
            version = "1.0"
            inputs  = @{
                AllowedConnectorList = @(
                    @{
                        AllowedConnector           = "/providers/Microsoft.PowerApps/apis/shared_office365"
                        AllowedActionsMode         = "AllAllowed"
                        AllowedConnectionTypesMode = "AllAllowed"
                    }
                )
            }
        }
    )
} | ConvertTo-Json -Depth 10

$policy = Invoke-RestMethod -Method Post `
    -Uri "$apiBaseUrl/governance/ruleBasedPolicies?api-version=$apiVersion" `
    -Headers $headers -ContentType "application/json" -Body $policyBody
Write-Host "Created policy $($policy.id)"

# 2. Assign the policy to the environment group (empty body = whole group)
Invoke-RestMethod -Method Post `
    -Uri "$apiBaseUrl/governance/ruleBasedPolicies/$($policy.id)/environmentGroups/$environmentGroupId/assignments?api-version=$apiVersion" `
    -Headers $headers -ContentType "application/json" -Body "{}"
Write-Host "Assigned policy $($policy.id) to group $environmentGroupId"

Passaggio 4: Abilitare un'azione del singolo connettore

Per consentire solo azioni specifiche per un connettore, impostare AllowedActionsMode su SomeAllowed ed elencare le azioni consentite in AllowedActions. Questo esempio aggiunge un'azione, ad esempio un'azione nascosta che non è selezionabile nell'interfaccia di amministrazione, all'elenco di elementi consentiti di un connettore e imposta il connettore su SomeAllowed. Leggere la policy, aggiornare la voce del connettore e rinviare il set di regole aggiornato utilizzando patch. Patch aggiorna un set di regole in base all'ID e lascia invariati gli altri set di regole del criterio.

$policyId     = "<policy ID>"
$connectorId  = "shared_commondataserviceforapps"   # last segment of AllowedConnector
$actionToAdd  = "aibuilderpredict_customprompt"

# 1. Read the current policy
$policy = Invoke-RestMethod -Method Get `
    -Uri "$apiBaseUrl/governance/ruleBasedPolicies/$policyId`?api-version=$apiVersion" `
    -Headers $headers

# 2. Find the ConnectorManagement rule set and the connector entry
$ruleSet = $policy.ruleSets | Where-Object { $_.id -eq "ConnectorManagement" }
$entry = $ruleSet.inputs.AllowedConnectorList |
    Where-Object { ($_.AllowedConnector -split "/")[-1] -eq $connectorId }

# 3. Restrict the connector to specific actions: add the action and set SomeAllowed
if ($entry) {
    $actions = @()
    if ($entry.PSObject.Properties.Name -contains "AllowedActions") { $actions = @($entry.AllowedActions) }
    if ($actions -notcontains $actionToAdd) { $actions += $actionToAdd }
    $entry | Add-Member -NotePropertyName AllowedActions -NotePropertyValue $actions -Force
    $entry.AllowedActionsMode = "SomeAllowed"

    # 4. Patch only the modified rule set back to the policy
    $patchBody = @{ name = $policy.name; ruleSets = @($ruleSet) } | ConvertTo-Json -Depth 10
    Invoke-RestMethod -Method Patch `
        -Uri "$apiBaseUrl/governance/ruleBasedPolicies/$policyId`?api-version=$apiVersion" `
        -Headers $headers -ContentType "application/json" -Body $patchBody
    Write-Host "Set '$connectorId' to SomeAllowed with '$actionToAdd' in policy $policyId"
}

Passaggio 5. Applicare o aggiornare un criterio in un singolo ambiente

È possibile applicare un criterio a un singolo ambiente anziché a un gruppo di ambienti. Questo approccio è utile per ambienti ad alto rischio, pilota o regolamentati. Assegnate il criterio all'ambiente e usate lo stesso schema di patch del Passaggio 4 per modificarlo successivamente. Ogni ambiente supporta una politica ACP efficace.

$policyId       = "<policy ID>"
$environmentId  = "<environment ID>"

# Assign the policy directly to the environment
Invoke-RestMethod -Method Post `
    -Uri "$apiBaseUrl/governance/ruleBasedPolicies/$policyId/environments/$environmentId/assignments?api-version=$apiVersion" `
    -Headers $headers -ContentType "application/json" -Body "{}"
Write-Host "Assigned policy $policyId to environment $environmentId"

Passaggio 6. Copiare un criterio da un gruppo di ambiente a un altro

Quando si replica una baseline di governance in un altro gruppo, scegliere quanto copiare usando il CopyAllRules flag :

  • CopyAllRules = true: creare un nuovo criterio da tutti i set di regole del gruppo di origine e assegnarlo al gruppo di destinazione. La governance del gruppo di destinazione diventa una copia indipendente di quella del gruppo di origine.
  • CopyAllRules = false: estrarre solo il ConnectorManagement set di regole dai criteri di origine e unirlo nei criteri esistenti del gruppo di destinazione. L'operazione patch aggiunge o aggiorna il set di regole in base all'ID, quindi il gruppo di destinazione mantiene le altre regole.
$sourceGroupId = "<source environment group ID>"
$targetGroupId = "<target environment group ID>"
$CopyAllRules  = $true

# 1. Find and read the policy assigned to the source group
$sourceAssignments = Invoke-RestMethod -Method Get `
    -Uri "$apiBaseUrl/governance/ruleBasedPolicies/environmentGroups/$sourceGroupId/assignments?api-version=$apiVersion" `
    -Headers $headers
$sourcePolicyId = $sourceAssignments.value[0].policyId
$source = Invoke-RestMethod -Method Get `
    -Uri "$apiBaseUrl/governance/ruleBasedPolicies/$sourcePolicyId`?api-version=$apiVersion" `
    -Headers $headers

if ($CopyAllRules) {
    # 2a. Copy ALL rule sets into a new policy and assign it to the target group
    $copyBody = @{ name = "$($source.name) (copy)"; ruleSets = $source.ruleSets } | ConvertTo-Json -Depth 20
    $copy = Invoke-RestMethod -Method Post `
        -Uri "$apiBaseUrl/governance/ruleBasedPolicies?api-version=$apiVersion" `
        -Headers $headers -ContentType "application/json" -Body $copyBody
    Invoke-RestMethod -Method Post `
        -Uri "$apiBaseUrl/governance/ruleBasedPolicies/$($copy.id)/environmentGroups/$targetGroupId/assignments?api-version=$apiVersion" `
        -Headers $headers -ContentType "application/json" -Body "{}"
    Write-Host "Copied all rules to policy $($copy.id) and assigned it to group $targetGroupId"
}
else {
    # 2b. Merge ONLY the ConnectorManagement rule into the target group's existing policy
    $sourceCm = $source.ruleSets | Where-Object { $_.id -eq "ConnectorManagement" }

    $targetAssignments = Invoke-RestMethod -Method Get `
        -Uri "$apiBaseUrl/governance/ruleBasedPolicies/environmentGroups/$targetGroupId/assignments?api-version=$apiVersion" `
        -Headers $headers
    $targetPolicyId = $targetAssignments.value[0].policyId
    $targetPolicy = Invoke-RestMethod -Method Get `
        -Uri "$apiBaseUrl/governance/ruleBasedPolicies/$targetPolicyId`?api-version=$apiVersion" `
        -Headers $headers

    # Patch adds or updates the ConnectorManagement rule set by ID, keeping the target's other rules
    $patchBody = @{ name = $targetPolicy.name; ruleSets = @($sourceCm) } | ConvertTo-Json -Depth 20
    Invoke-RestMethod -Method Patch `
        -Uri "$apiBaseUrl/governance/ruleBasedPolicies/$targetPolicyId`?api-version=$apiVersion" `
        -Headers $headers -ContentType "application/json" -Body $patchBody
    Write-Host "Merged the ConnectorManagement rule into target policy $targetPolicyId"
}

Passaggio 7. Rimuovere ACP da un gruppo di ambiente

Mentre un gruppo ha una regola ACP attiva, ogni ambiente nel gruppo corrisponde ai criteri del gruppo. Il modo in cui si rimuove l’imposizione dipende dal fatto che si desideri che tali ambienti mantengano la configurazione corrente oppure cancellare completamente ACP:

  • Rimuovere la regola dai criteri del gruppo per impedire al gruppo di gestire ACP. Usare l'operazione removeRule per rimuovere il ConnectorManagement set di regole dai criteri del gruppo. Gli ambienti mantengono l'ultima configurazione ACP applicata, ma non sono più sincronizzati con il gruppo. È possibile gestire ogni ambiente singolarmente e consentire loro di divergere.
  • Rimuovere ACP dal gruppo e da ogni ambiente per disattivare ACP ovunque. Rimuovi la regola dal criterio del gruppo, quindi passa in rassegna gli ambienti del gruppo e rimuovi anche il set di regole ConnectorManagement dal criterio di ogni ambiente.

Note

La rimozione della regola dai criteri di un gruppo non cancella automaticamente ACP dagli ambienti che l'hanno ereditata. Questi ambienti mantengono l'ultima configurazione applicata per evitare un gap di imposizione. Per rimuovere ACP da tutti gli ambienti, eliminarlo da ciascun ambiente, come mostrato nell'esempio di loop. Per altre informazioni, vedere Criteri dei connettori avanzati.

Rimuovere la regola dai criteri del gruppo

Nell'esempio seguente il ConnectorManagement set di regole viene rimosso da un criterio usando l'operazione removeRule .

$policyId = "<policy ID>"

# Read the policy, then send the rule set to remove
$policy = Invoke-RestMethod -Method Get `
    -Uri "$apiBaseUrl/governance/ruleBasedPolicies/$policyId`?api-version=$apiVersion" `
    -Headers $headers
$ruleSet = $policy.ruleSets | Where-Object { $_.id -eq "ConnectorManagement" }

$body = @{ name = $policy.name; ruleSets = @($ruleSet) } | ConvertTo-Json -Depth 10
Invoke-RestMethod -Method Patch `
    -Uri "$apiBaseUrl/governance/ruleBasedPolicies/$policyId/removeRule?api-version=$apiVersion" `
    -Headers $headers -ContentType "application/json" -Body $body
Write-Host "Removed the ConnectorManagement rule set from policy $policyId"

Rimuovere ACP da ogni ambiente nel gruppo

Per disattivare ACP in tutti gli ambienti di un gruppo, rimuovere prima di tutto la regola dai criteri del gruppo (esempio precedente), quindi ripetere la rimozione per i propri criteri di ogni ambiente. Leggere il criterio assegnato a ciascun ambiente dalla rispettiva assegnazione dell'ambiente, quindi chiamare removeRule su tale criterio. Specificare gli ID di ambiente che appartengono al gruppo o enumerarli usando le API di gestione dell'ambiente.

# Environment IDs that belong to the group
$environmentIds = @("<environment ID 1>", "<environment ID 2>")

foreach ($environmentId in $environmentIds) {
    # Find the policy currently assigned to the environment
    $envAssignments = Invoke-RestMethod -Method Get `
        -Uri "$apiBaseUrl/governance/ruleBasedPolicies/environments/$environmentId/assignments?api-version=$apiVersion" `
        -Headers $headers
    if (-not $envAssignments.value) { continue }
    $envPolicyId = $envAssignments.value[0].policyId

    # Remove the ConnectorManagement rule set from that environment's policy
    $envPolicy = Invoke-RestMethod -Method Get `
        -Uri "$apiBaseUrl/governance/ruleBasedPolicies/$envPolicyId`?api-version=$apiVersion" `
        -Headers $headers
    $ruleSet = $envPolicy.ruleSets | Where-Object { $_.id -eq "ConnectorManagement" }
    if ($ruleSet) {
        $body = @{ name = $envPolicy.name; ruleSets = @($ruleSet) } | ConvertTo-Json -Depth 10
        Invoke-RestMethod -Method Patch `
            -Uri "$apiBaseUrl/governance/ruleBasedPolicies/$envPolicyId/removeRule?api-version=$apiVersion" `
            -Headers $headers -ContentType "application/json" -Body $body
        Write-Host "Removed ACP from environment $environmentId"
    }
}

La stessa chiamata per ambiente removeRule funziona con gli SDK C# e Python illustrati in precedenza. Racchiudi la chiamata in un ciclo sugli ID degli ambienti del gruppo.

Criteri dei connettori avanzati
Criteri basati su regole - Informazioni di riferimento sulle API REST
Autenticazione
Esercitazione: Assegnare ruoli alle entità servizio
Panoramica della programmabilità e dell'estendibilità