Lernprogramm: Programmgesteuertes Verwalten erweiterter Connectorrichtlinien

Erweiterte Connectorrichtlinien (ACP) steuern die Connectorverwendung mit einer strengen Zulassungsliste, die Connectors standardmäßig blockiert. Zusätzlich zur Power Platform Admin Center-Oberfläche können Sie ACP mit Code mithilfe der Power Platform-API und der Verwaltungs-SDKs (Admin) verwalten. Die Automatisierung von ACP ist nützlich, wenn Sie governance in vielen Umgebungsgruppen standardisieren, eine Basisrichtlinie zwischen Gruppen replizieren oder Richtlinien als Teil einer Bereitstellungspipeline verwalten.

In diesem Tutorial lernen Sie Folgendes:

  1. Authentifizieren Sie sich mithilfe der Power Platform API.
  2. Die Struktur der ACP-Richtlinie verstehen.
  3. Erstellen Sie eine Richtlinie, und fügen Sie sie einer Umgebungsgruppe hinzu.
  4. Aktivieren Sie eine einzelne Konnektoraktion.
  5. Anwenden oder Aktualisieren einer Richtlinie für eine einzelne Umgebung.
  6. Kopieren Sie eine Richtlinie aus einer Umgebungsgruppe in eine andere.
  7. Entfernen Sie ACP aus einer Umgebungsgruppe.

Erweiterte Connectorrichtlinien werden über die governance/ruleBasedPolicies Vorgänge der Power Platform-API verfügbar gemacht. Eine Richtlinie enthält einen oder mehrere Regelsätze; die Regel, die mit der ID ConnectorManagement festgelegt ist, enthält die Allowlist des ACP-Connectors. Alle Beispiele im Artikel verwenden API-Version 2024-10-01.

Voraussetzungen

Schritt 1. Mit der Power Platform-API authentifizieren

Alle Beispiele verwenden zur Authentifizierung die Client-ID Ihrer App-Registrierung gemäß den Anweisungen in Authentifizierung. Die folgenden Beispiele melden sich interaktiv als aktueller Benutzer an. Für die unbeaufsichtigte Ausführung als Dienstprinzipal finden Sie Informationen zum Ablauf für vertrauliche Clients im Artikel Authentifizierung, und weisen Sie dem Dienstprinzipal eine RBAC-Rolle zu.

# 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)" }

Schritt 2. Die Form der ACP-Richtlinie verstehen

Eine erweiterte Connectorrichtlinie ist eine regelbasierte Richtlinie, die einen Regelsatz mit der ID ConnectorManagemententhält. Dieser Regelsatz umfasst ein version, und seine inputs enthalten ein AllowedConnectorList, wobei jeder Eintrag einen Verbinder zulässt und festlegt, wie seine Aktionen und Verbindungstypen geregelt werden:

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

Beachten Sie die folgende Semantik:

  • Ein Connector, der sich nicht in AllowedConnectorList befindet, ist blockiert (standardmäßig verweigert).
  • Jeder Eintrag setzt AllowedActionsMode. AllAllowed erlaubt alle Aktionen für den Connector. SomeAllowed schränkt den Verbinder auf die Aktionen ein, die im Array des Eintrags AllowedActions aufgeführt sind. In Schritt 4 wird gezeigt, wie Sie eine Aktion hinzufügen und diesen Modus festlegen.
  • AllowedConnectionTypesMode bestimmt, welche Verbindungstypen zulässig sind, und folgt demselben AllAllowed Muster.
  • Schließen Sie den Regelsatz version ein, wenn Sie eine Richtlinie erstellen oder aktualisieren. Lesen Sie sie aus einer vorhandenen Richtlinie, und bewahren Sie den Wert auf, den der Dienst zurückgibt.

Tip

Der genaue Wert von AllowedConnector ist die Ressourcen-ID des Connectors. Die zuverlässigste Methode, um die Struktur für Konnektoren zu ermitteln, die in Ihrem Mandanten bereits vorhanden sind, besteht darin, zuerst eine vorhandene Richtlinie zu lesen (Schritt 4 zeigt, wie das geht) oder den Konnektorkatalog zu verwenden (im Folgenden beschrieben) und diese Struktur dann beim Erstellen oder Aktualisieren von Richtlinien zu übernehmen.

Suchen von Connector- und Aktions-IDs mit dem Connectorkatalog

Verwenden Sie die Connectorkatalog-API, um zu ermitteln, welche Connectors und Aktionen Sie zulassen können. Es werden die in einer Umgebung verfügbaren Konnektoren zusammen mit den Bezeichnern aufgelistet, die Sie in AllowedConnector und AllowedActions einfügen.

Note

Für die Connector-Katalogvorgänge muss eine Umgebungs-ID im Pfadund eine OData-$filter angegeben werden, die dieselbe Umgebung angibt, z. B. $filter=environment eq '<environmentId>'. Beide sind erforderlich.

$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

Verwenden Sie das id des Connectors (den vollständigen Ressourcenpfad, z. B. /providers/Microsoft.PowerApps/apis/shared_office365) als Wert für AllowedConnector, und die Operations-IDs des Connectors als Werte in AllowedActions. Sie können über den Namespace der Admin-SDKs auf denselben connectivity Katalog zugreifen.

Schritt 3: Erstellen Sie eine Richtlinie, und fügen Sie sie einer Umgebungsgruppe hinzu

Das Hinzufügen von ACP zu einer Umgebungsgruppe ist ein zweiteiliger Vorgang: Erstellen Sie die Richtlinie, und weisen Sie sie der Gruppe zu. Der Create-Aufruf gibt die neue Richtlinie idzurück, die Sie im Aufgabenaufruf verwenden.

Um die Richtlinie der gesamten Gruppe zuzuweisen, senden Sie eine Zuweisungsanforderung mit leerem Text ({}). Jede Umgebung in der Gruppe erbt die Richtlinie und bleibt damit synchronisiert.

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

Schritt 4. Eine einzelne Konnektoraktion aktivieren

Um nur bestimmte Aktionen bei einem Connector zuzulassen, setzen Sie AllowedActionsMode auf SomeAllowed und führen Sie die zulässigen Aktionen in AllowedActions auf. In diesem Beispiel wird die Zulassungsliste eines Connectors um eine Aktion ergänzt, z. B. um eine ausgeblendete Aktion, die im Admin Center nicht ausgewählt werden kann, und der Connector wird auf SomeAllowed festgelegt. Lesen Sie die Richtlinie, aktualisieren Sie den Connectoreintrag, und senden Sie mithilfe von Patch die aktualisierte Regel zurück. Patch aktualisiert eine Regel, die anhand der ID festgelegt ist, und lässt die anderen Regelsätze der Richtlinie unberührt.

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

Schritt 5. Anwenden oder Aktualisieren einer Richtlinie für eine einzelne Umgebung

Sie können eine Richtlinie auf eine einzelne Umgebung anstatt auf eine Umgebungsgruppe ausrichten. Dieser Ansatz eignet sich für umgebungen mit hohem Risiko, Pilot oder regulierten Umgebungen. Weisen Sie die Richtlinie der Umgebung zu, und verwenden Sie das gleiche Patchmuster aus Schritt 4, um sie später zu ändern. Jede Umgebung unterstützt eine effektive ACP-Richtlinie.

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

Schritt 6: Eine Richtlinie von einer Umgebungsgruppe in eine andere kopieren

Wenn Sie eine Governancebasislinie in eine andere Gruppe replizieren, wählen Sie aus, wie viel kopiert werden soll, indem Sie das CopyAllRules Kennzeichen verwenden:

  • CopyAllRules = true: Erstellen Sie eine neue Richtlinie aus allen Regelsätzen der Quellgruppe, und weisen Sie sie der Zielgruppe zu. Die Governance der Zielgruppe wird zu einer unabhängigen Kopie der Quelle.
  • CopyAllRules = false: Extrahieren Sie nur den ConnectorManagement-Regelsatz aus der Quellrichtlinie und führen Sie ihn mit der vorhandenen Richtlinie der Zielgruppe zusammen. Durch den Patchvorgang wird die nach ID festgelegte Regel hinzugefügt oder aktualisiert, sodass die Zielgruppe ihre anderen Regeln behält.
$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"
}

Schritt 7: Entfernen von ACP aus einer Umgebungsgruppe

Während eine Gruppe über eine aktive ACP-Regel verfügt, entspricht jede Umgebung in der Gruppe der Richtlinie der Gruppe. Wie Sie die Erzwingung entfernen, hängt davon ab, ob diese Umgebungen ihre aktuelle Konfiguration beibehalten oder ACP vollständig löschen sollen:

  • Entfernen Sie die Regel aus der Gruppenrichtlinie , um zu verhindern, dass die Gruppe ACP verwaltet. Verwenden Sie den removeRule Vorgang, um den ConnectorManagement Regelsatz aus der Gruppenrichtlinie zu entfernen. Die Umgebungen behalten ihre zuletzt angewendete ACP-Konfiguration bei, werden aber nicht mehr mit der Gruppe synchronisiert. Sie können jede Umgebung einzeln verwalten und sie voneinander unterscheiden lassen.
  • Entfernen Sie ACP aus der Gruppe und aus jeder Umgebung , um ACP überall zu deaktivieren. Entfernen Sie die Regel aus der Gruppenrichtlinie, durchlaufen Sie dann die Gruppenumgebungen, und entfernen Sie den Regelsatz auch aus der ConnectorManagement Richtlinie jeder Umgebung.

Note

Das Entfernen der Regel aus der Richtlinie einer Gruppe entfernt ACP nicht automatisch aus den Umgebungen, die diese geerbt haben. Diese Umgebungen behalten ihre zuletzt angewendete Konfiguration bei, um eine Erzwingungslücke zu vermeiden. Um ACP überall zu löschen, entfernen Sie sie aus jeder Umgebung, wie im Beispiel der Schleife gezeigt. Weitere Informationen finden Sie unter "Erweiterte Connectorrichtlinien".

Regel aus der Gruppenrichtlinie entfernen

Im folgenden Beispiel wird der ConnectorManagement Regelsatz mithilfe des removeRule Vorgangs aus einer Richtlinie entfernt.

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

Entfernen von ACP aus jeder Umgebung in der Gruppe

Um ACP in allen Umgebungen einer Gruppe zu deaktivieren, entfernen Sie zuerst die Regel aus der Gruppenrichtlinie (vorheriges Beispiel), und wiederholen Sie dann das Entfernen für die eigene Richtlinie jeder Umgebung. Lesen Sie die jeder Umgebung zugewiesene Richtlinie in ihrer Umgebungszuweisung, und rufen Sie dann removeRule für diese Richtlinie auf. Stellen Sie die Umgebungs-IDs bereit, die zur Gruppe gehören, oder führen Sie diese mithilfe der Umgebungsverwaltungs-APIs auf.

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

Derselbe Aufruf pro Umgebung removeRule funktioniert mit den zuvor gezeigten C#- und Python SDKs. Schließen Sie den Aufruf in eine Schleife über die Umgebungs-IDs der Gruppe ein.

Erweiterte Connectorrichtlinien
Regelbasierte Richtlinien – REST-API-Referenz
Authentifizierung
Tutorial: Dienstprinzipalen Rollen zuweisen
Übersicht über Die Programmierbarkeit und Erweiterbarkeit