Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
- Autenticazione tramite API Power Platform .
- Comprendere la forma dei criteri ACP.
- Creare un criterio e aggiungerlo a un gruppo di ambiente.
- Abilitare una singola azione del connettore.
- Applicare o aggiornare un criterio in un singolo ambiente.
- Copiare un criterio da un gruppo di ambiente a un altro.
- 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
Registrazione dell'app configurata per l'API Power Platform. Prendi nota degli ID applicazione (client) e ID directory (tenant) della registrazione dell'app.
Autorizzazione per gestire i criteri di governance. Per le entità servizio, assegnare un ruolo RBAC che consenta di scrivere nelle risorse, ad esempio Power Platform contributor o Power Platform owner. Per altre informazioni, vedi Esercitazione: assegnare ruoli alle entità servizio.
Per gli esempi dell’SDK, installare l’SDK pubblicato ogni mese nella sua galleria pubblica:
- C#: il pacchetto NuGet Microsoft.PowerPlatform.Management.
- Python: pacchetto PyPI powerplatform-management.
dotnet add package Microsoft.PowerPlatform.Managementpip install powerplatform-management
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.AllAllowedconsente ogni azione sul connettore.SomeAllowedlimita il connettore alle azioni elencate nell'arrayAllowedActionsdella voce. Il passaggio 4 illustra come aggiungere un'azione e impostare questa modalità. -
AllowedConnectionTypesModegestisce i tipi di connessione consentiti e segue lo stessoAllAllowedmodello. - Includi il
versiondel 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 ilConnectorManagementset 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
removeRuleper rimuovere ilConnectorManagementset 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
ConnectorManagementdal 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.
Contenuti correlati
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à