Tutorial: Administración de directivas de conector avanzadas mediante programación

Las directivas de conector avanzadas (ACP) rigen el uso del conector con una lista de permitidos estricta que bloquea los conectores de forma predeterminada. Además de la experiencia del Centro de administración de Power Platform, puede administrar ACP con código mediante la API de Power Platform y los SDK de administración (Admin). La automatización de ACP es útil al estandarizar la gobernanza en muchos grupos de entornos, replicar una directiva de línea de base entre grupos o administrar directivas como parte de una canalización de implementación.

En este tutorial, aprenderá a:

  1. Autenticar usando Power Platform API.
  2. Comprenda la forma de la directiva ACP.
  3. Cree una directiva y agréguela a un grupo de entornos.
  4. Habilite una acción de conector individual.
  5. Aplique o actualice una directiva en un único entorno.
  6. Copie una directiva de un grupo de entornos a otro.
  7. Quitar ACP de un grupo de entornos.

Las directivas de conector avanzadas se exponen a través de las governance/ruleBasedPolicies operaciones de Power Platform API. Una directiva contiene uno o varios conjuntos de reglas; el conjunto de reglas con el identificador ConnectorManagement contiene la lista de permitidos del conector ACP. Todos los ejemplos del artículo usan la versión 2024-10-01de API .

Prerequisites

Paso 1. Autenticar usando la API Power Platform

Todos los ejemplos se autentican con el identificador de cliente del registro de la aplicación, siguiendo las instrucciones de Autenticación. Los ejemplos siguientes inician sesión de forma interactiva como el usuario actual. Para ejecutar de forma desatendida con una entidad de servicio, consulte el flujo de cliente confidencial en el artículo Autenticación y asigne a la entidad de servicio un rol 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)" }

Paso 2. Comprender la estructura de la directiva ACP

Una directiva de conector avanzada es una directiva basada en reglas que contiene un conjunto de reglas con el identificador ConnectorManagement. Ese conjunto de reglas incluye un version y su inputs contiene un AllowedConnectorList, donde cada entrada admite un conector y define cómo se rigen sus acciones y tipos de conexión:

{
  "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"
          }
        ]
      }
    }
  ]
}

Tenga en cuenta la semántica siguiente:

  • Un conector que no está en AllowedConnectorList está bloqueado (denegación predeterminada).
  • Cada entrada establece AllowedActionsMode. AllAllowed permite todas las acciones del conector. SomeAllowed restringe el conector a las acciones indicadas en el array AllowedActions de la entrada. El paso 4 muestra cómo agregar una acción y establecer este modo.
  • AllowedConnectionTypesMode rige qué tipos de conexión se permiten y sigue el mismo AllAllowed patrón.
  • Incluya el conjunto de version reglas cuando cree o actualice una directiva. Léelo desde una directiva existente y conserve el valor que devuelve el servicio.

Sugerencia

El valor exacto de AllowedConnector es el identificador de recursos del conector. La forma más confiable de aprender la forma de los conectores que ya están en el inquilino es leer primero una directiva existente (el paso 4 muestra cómo) o usar el catálogo de conectores (descrito a continuación) y, a continuación, reflejar esa forma al crear o actualizar directivas.

Búsqueda de identificadores de conector y acción con el catálogo de conectores

Para detectar qué conectores y acciones puede permitir, use la API del catálogo de conectores. Enumera los conectores disponibles en un entorno, junto con los identificadores que coloca en AllowedConnector y AllowedActions.

Nota:

Las operaciones del catálogo de conectores requieren un identificador de entorno en la ruta de accesoy un OData $filter que especifica el mismo entorno; por ejemplo, . $filter=environment eq '<environmentId>' Ambos son necesarios.

$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

Utiliza id del conector (su ruta de acceso completa al recurso, como /providers/Microsoft.PowerApps/apis/shared_office365) como valor de AllowedConnector y los identificadores de operación del conector como los valores de AllowedActions. Puede acceder al mismo catálogo a través del espacio de nombres connectivity de los SDK de administración.

Paso 3. Crear una directiva y agregarla a un grupo de entornos

Agregar ACP a un grupo de entornos es una operación de dos partes: cree la directiva y asígnela al grupo. La llamada create devuelve la nueva directiva id, que se usa en la llamada de asignación.

Para asignar la directiva a todo el grupo, envíe una solicitud de asignación con un cuerpo vacío ({}). Cada entorno del grupo hereda la directiva y permanece sincronizada con ella.

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

Paso 4. Habilitar una acción individual del conector

Para permitir solo acciones específicas en un conector, establezca su AllowedActionsMode en SomeAllowed y enumere las acciones permitidas en AllowedActions. En este ejemplo se agrega una acción, como una acción oculta que no se puede seleccionar en el centro de administración, a la lista de permitidos de un conector y establece el conector SomeAlloweden . Lea la directiva, actualice la entrada del conector y envíe de vuelta el conjunto de reglas actualizado mediante patch. La revisión actualiza un conjunto de reglas por identificador y deja intactos los demás conjuntos de reglas de la directiva.

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

Paso 5. Aplicar o actualizar una directiva en un único entorno

Puede aplicar una directiva a un único entorno en lugar de a un grupo de entornos. Este enfoque es útil para entornos regulados, piloto o de alto riesgo. Asigne la directiva al entorno y use el mismo patrón de parche del paso 4 para modificarla más adelante. Cada entorno admite una única política de ACP vigente.

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

Paso 6. Copiar una directiva de un grupo de entornos a otro

Al replicar una línea de base de gobernanza en otro grupo, elija cuánto copiar mediante la CopyAllRules marca :

  • CopyAllRules = true: cree una nueva directiva a partir de todos los conjuntos de reglas del grupo de origen y asígnela al grupo de destino. La gobernanza del grupo de destino se convierte en una copia independiente del origen.
  • CopyAllRules = false: extraiga solo el conjunto de reglas ConnectorManagement de la política de origen e intégrelo en la política existente del grupo de destino. La operación de revisión agrega o actualiza el conjunto de reglas por identificador, por lo que el grupo de destino mantiene sus otras reglas.
$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"
}

Paso 7. Quitar ACP de un grupo de entornos

Mientras un grupo tenga una regla ACP activa, cada entorno del grupo se ajusta a la directiva del grupo. La manera de quitar la aplicación forzosa depende de si quieres que esos entornos mantengan su configuración actual o borrar por completo ACP:

  • Elimine la regla de la directiva del grupo para que el grupo deje de gestionar ACP. Use la operación removeRule para eliminar el conjunto de reglas ConnectorManagement de la directiva del grupo. Los entornos mantienen su última configuración ACP aplicada, pero ya no se mantienen sincronizadas con el grupo. Puede administrar cada entorno individualmente y permitir que diverjan.
  • Quite ACP del grupo y de todos los entornos para desactivar ACP en todos los entornos. Elimine la regla de la política del grupo y, a continuación, recorra en bucle los entornos del grupo y elimine también el conjunto de reglas ConnectorManagement de la política de cada entorno.

Nota:

Eliminar la regla de la directiva de un grupo no elimina automáticamente ACP de los entornos que lo heredaron. Esos entornos conservan su última configuración aplicada para evitar una brecha de cumplimiento. Para borrar ACP en todas partes, quítelo de cada entorno, como se muestra en el ejemplo del bucle. Para más información, consulte Directivas de conector avanzadas.

Quitar la regla de la directiva del grupo

En el ejemplo siguiente se elimina el conjunto de reglas ConnectorManagement de una directiva mediante la operación 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"

Quitar ACP de todos los entornos del grupo

Para desactivar ACP en todos los entornos de un grupo, quite primero la regla de la directiva del grupo (ejemplo anterior) y, a continuación, repita la eliminación de la regla en la directiva propia de cada entorno. Lea la directiva asignada de cada entorno a partir de la asignación del entorno y, a continuación, llame a removeRule para esa directiva. Proporcione los identificadores de entorno que pertenecen al grupo o los enumere mediante las API de administración del entorno.

# 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 misma llamada por entorno removeRule funciona con los SDK de C# y Python mostrados anteriormente. Envuelve la llamada en un bucle que recorra los ID de entorno del grupo.

Directivas de conector avanzadas
Directivas basadas en reglas: referencia de la API REST
Autenticación
Tutorial: Asignación de roles a entidades de servicio
Información general sobre la programación y la extensibilidad