Partager via


Guide pratique pour configurer la stratégie de sécurité de contenu (préversion)

Cet article explique comment configurer la stratégie de sécurité de contenu (CSP) pour les applications de code. Vous pouvez configurer les directives CSP individuelles, choisir d'appliquer la politique CSP ou d'utiliser uniquement la création de rapports et spécifier où envoyer des rapports.

Définissez ces paramètres au niveau de l’environnement pour qu’ils s’appliquent à toutes les applications de code de l’environnement. Par défaut, CSP est appliqué avec la configuration de directives suivante. La <platform> valeur représente les valeurs requises par la plateforme.

Instructions Valeur par défaut
frame-ancestors 'self' https://*.powerapps.com
script-src 'self' <platform>
img-src 'self' data: <platform>
style-src 'self' 'unsafe-inline'
font-src 'self'
connect-src 'none'
frame-src 'self'
form-action 'none'
base-uri 'self'
child-src 'none'
default-src 'self'
manifest-src 'none'
media-src 'self' data:
object-src 'self' data:
worker-src 'none'

Lorsque vous personnalisez une directive, les valeurs que vous fournissez sont ajoutées à la valeur par défaut. Si la valeur par défaut est 'none', vos valeurs personnalisées remplacent la valeur par défaut.

Si votre environnement a une instance Dataverse, vous pouvez configurer les paramètres CSP dans le Centre d’administration Power Platform. Sinon, consultez les instructions de configuration du fournisseur de solutions Cloud à l’aide de l’API REST.

Prerequisites

  • Vous devez être administrateur de l’environnement pour configurer les paramètres CSP.

Configurer csp à l’aide du Centre d’administration Power Platform

Pour accéder aux paramètres CSP pour les applications de code :

  1. Connectez-vous au Centre d’administration Power Platform.
  2. Dans le volet de navigation, sélectionnez Gérer. Dans le volet Gérer, sélectionnez Environnements.
  3. Sur la page Environnements, sélectionnez un environnement.
  4. Dans la barre de commandes, sélectionnez Paramètres.
  5. Développez Produit, puis sélectionnez Confidentialité + Sécurité.
  6. Sous Stratégie de sécurité du contenu, sélectionnez l’onglet Application .

Image du paramétrage UO des Code Apps CSP dans le Centre d’administration Power Platform

Activer la création de rapports

Le bouton bascule Activer la création de rapports détermine si les rapports de violation CSP sont envoyés. Lorsque vous l’activez, spécifiez un point de terminaison valide. Le système envoie des rapports de violation à ce point de terminaison, que l'application de la stratégie de sécurité de contenu soit activée ou non. Pour plus d’informations sur la création de rapports, consultez la documentation de création de rapports.

Capture d’écran d’un bouton bascule intitulé Activer la création de rapports activée et d’une zone de texte intitulée Point de terminaison de création de rapports contenant une URL.

Configurer les instructions

Utilisez la section Configurer les directives pour contrôler la valeur des directives individuelles. Si vous conservez les valeurs par défaut activées, vous utilisez les valeurs par défaut spécifiées précédemment. Si vous désactivez l'interrupteur, vous pouvez ajouter des valeurs personnalisées pour la directive. Les valeurs personnalisées sont fusionnées avec les valeurs par défaut de la directive. Si vous désactivez un interrupteur et laissez la Liste de sources vide, vous désactivez la directive.

L’exemple suivant montre trois directives différentes avec différentes configurations :

  • frame-ancestors est activé et défini pour utiliser sa valeur par défaut. La valeur de directive résultante est la suivante : 'self' https://*.powerapps.com
  • script-src est activé et ajoute une autre source, qui est fusionnée avec la valeur par défaut. La valeur de directive résultante est la suivante : script-src 'self' https://contoso.com
  • img-src est désactivé. La directive est omise de la stratégie.

Capture d’écran des directives CSP configurées dans différents états

Configurer CSP à l’aide de l’API REST

Vous pouvez configurer programmatiquement csp à l’aide de l’API Microsoft Power Platform. Gérez les paramètres à l’aide de l’API Paramètres de gestion de l’environnement : https://api.powerplatform.com/environmentmanagement/environments/{environmentId}/settings

Les paramètres suivants sont disponibles :

  • PowerApps_CSPEnabledCodeApps contrôle si la politique de sécurité de contenu (CSP) est appliquée pour les applications de code.

  • PowerApps_CSPReportingEndpoint contrôle le signalement des violations CSP. Définissez ce paramètre sur une URL valide dans laquelle les rapports de violation CSP sont envoyés ou null si la création de rapports est désactivée.

  • PowerApps_CSPConfigCodeApps est la configuration des directives. Définissez ce paramètre sur un objet JSON stringified au format suivant :

    {
      "default-src": {
        "sources": [{ "source": "'self'" }]
      },
      "style-src": {
        "sources": [{ "source": "'self'" }, { "source": "https://contoso.com" }]
      }
      // Additional directives
    }
    

Fonctions d’assistance PowerShell

Pour simplifier l’appel de l’API REST, utilisez les fonctions PowerShell suivantes.

Get-CodeAppContentSecurityPolicy

Utilisez la Get-CodeAppContentSecurityPolicy fonction pour récupérer les paramètres CSP actuels pour les applications de code dans un environnement spécifié. La fonction retourne l'état d'application, le point de terminaison de rapport et les directives configurées.

  <#
  .SYNOPSIS
    Retrieves the Content Security Policy settings for code apps in a Power Platform environment.

  .DESCRIPTION
    Gets the current CSP configuration for code apps, including enforcement status,
    reporting endpoint, and configured directives from the Power Platform API.

  .PARAMETER Env
    The environment ID of the Power Platform environment.

  .PARAMETER Token
    A secure string containing the authentication token for the Power Platform API.

  .PARAMETER ApiEndpoint
    The base URI of the Power Platform API. Defaults to 'https://api.powerplatform.com/'.

  .OUTPUTS
    A hashtable containing:
    - ReportingEndpoint: The URL where CSP violation reports are sent.
    - Enabled: Whether CSP enforcement is enabled.
    - Directives: A hashtable of CSP directives and their configured sources.

  .EXAMPLE
    Get-CodeAppContentSecurityPolicy -Token $token -Env "00000000-0000-0000-0000-000000000000"
  #>
function Get-CodeAppContentSecurityPolicy {
  [CmdletBinding()]
  param(
    [Parameter(Mandatory = $true)]
    [string]$Env,

    [Parameter(Mandatory = $true)]
    [securestring]$Token,

    [uri]$ApiEndpoint = 'https://api.powerplatform.com/'
  )
  $ErrorActionPreference = 'Stop'

  $escapedEnv = [System.Uri]::EscapeDataString($Env)
  $uri = [Uri]::new($ApiEndpoint, "/environmentmanagement/environments/$escapedEnv/settings?api-version=2022-03-01-preview&`$select=PowerApps_CSPReportingEndpoint,PowerApps_CSPEnabledCodeApps,PowerApps_CSPConfigCodeApps")

  $resp = Invoke-RestMethod -Uri $uri -Method Get -Authentication Bearer -Token $Token
  $data = $resp.objectResult[0];

  if ($null -ne $data.PowerApps_CSPConfigCodeApps) {
    $parsed = $data.PowerApps_CSPConfigCodeApps | ConvertFrom-Json -AsHashtable -Depth 10
    $config = @{}
    foreach ($directive in $parsed.Keys) {
      $sources = $parsed[$directive].sources | Select-Object -ExpandProperty source
      $config[$directive] = $sources
    }
  }

  @{
    ReportingEndpoint = $data.PowerApps_CSPReportingEndpoint
    Enabled           = $data.PowerApps_CSPEnabledCodeApps ?? $true
    Directives        = $config
  }
}

Set-CodeAppContentSecurityPolicy

Utilisez la Set-CodeAppContentSecurityPolicy fonction pour mettre à jour les paramètres CSP pour les applications de code dans un environnement spécifié. Vous pouvez activer ou désactiver l'application de la CSP, configurer un point de terminaison de rapport et mettre à jour des directives de la CSP individuelles.

<#
.SYNOPSIS
  Updates the Content Security Policy settings for code apps in a Power Platform environment.

.DESCRIPTION
  Configures CSP settings for code apps, including enabling or disabling enforcement,
  setting a reporting endpoint for violation reports, and updating CSP directives.

.PARAMETER Env
  The environment ID of the Power Platform environment.

.PARAMETER Token
  A secure string containing the authentication token for the Power Platform API.

.PARAMETER ApiEndpoint
  The base URI of the Power Platform API. Defaults to 'https://api.powerplatform.com/'.

.PARAMETER ReportingEndpoint
  The URL where CSP violation reports are sent. Pass $null to disable reporting.

.PARAMETER Enabled
  Whether to enable or disable CSP enforcement for code apps.

.PARAMETER Directives
  A hashtable of CSP directives and their source values. Replaces the entire directive collection.

.EXAMPLE
  Set-CodeAppContentSecurityPolicy -Token $token -Env "00000000-0000-0000-0000-000000000000" -Enabled $true

.EXAMPLE
  Set-CodeAppContentSecurityPolicy -Token $token -Env "00000000-0000-0000-0000-000000000000" -ReportingEndpoint "https://contoso.com/report"
#>
function Set-CodeAppContentSecurityPolicy {
  [CmdletBinding(SupportsShouldProcess = $true)]
  param(
    [Parameter(Mandatory = $true)]
    [string]$Env,

    [Parameter(Mandatory = $true)]
    [securestring]$Token,

    [uri]$ApiEndpoint = 'https://api.powerplatform.com/',

    [AllowNull()]
    [string]$ReportingEndpoint,

    [bool]$Enabled,

    [hashtable]$Directives
  )
  $payload = @{}

  if ($PSBoundParameters.ContainsKey('ReportingEndpoint')) {
    $payload['PowerApps_CSPReportingEndpoint'] = $ReportingEndpoint
  }

  if ($PSBoundParameters.ContainsKey('Enabled')) {
    $payload['PowerApps_CSPEnabledCodeApps'] = $Enabled
  }

  if ($PSBoundParameters.ContainsKey('Directives')) {
    $allowed = @(
      'Frame-Ancestors', 'Script-Src', 'Img-Src', 'Style-Src', 'Font-Src',
      'Connect-Src', 'Frame-Src', 'Form-Action', 'Base-Uri', 'Child-Src',
      'Default-Src', 'Manifest-Src', 'Media-Src', 'Object-Src', 'Worker-Src'
    )
    $textInfo = [System.Globalization.CultureInfo]::InvariantCulture.TextInfo
    $config = @{}
    foreach ($key in $Directives.Keys) {
      $directive = $textInfo.ToTitleCase($key)
      if ($allowed -notcontains $directive) {
        throw "Invalid CSP directive: $directive"
      }
      $sources = $Directives[$key] | ForEach-Object { @{ source = $_ } }
      $config[$directive] = @{ sources = @($sources) }
    }
    $payload['PowerApps_CSPConfigCodeApps'] = ($config | ConvertTo-Json -Depth 10 -Compress)
  }

  $escapedEnv = [System.Uri]::EscapeDataString($Env)
  $uri = [Uri]::new($ApiEndpoint, "/environmentmanagement/environments/$escapedEnv/settings?api-version=2022-03-01-preview")
  $body = $payload | ConvertTo-Json -Depth 10

  Invoke-RestMethod -Uri $uri -Method Patch -Authentication Bearer -Token $Token -Body $body -ContentType 'application/json' | Out-Null
}

Authentication

Pour utiliser les fonctions PowerShell, fournissez un jeton d’authentification. Utilisez l’interface CLI d’authentification Microsoft pour générer ce jeton. Reportez-vous à leur documentation pour obtenir des instructions d’installation. Après avoir installé l’outil, utilisez la commande suivante pour générer un jeton d’authentification :

$tenantId = "<your-tenant-id>"
$clientId = "9cee029c-6210-4654-90bb-17e6e9d36617" # This is the client id of the Power Platform CLI
$token = azureauth aad --resource "https://api.powerplatform.com/" --tenant $tenantId --client $clientId --output token | ConvertTo-SecureString -AsPlainText -Force

Examples

Les exemples suivants montrent comment utiliser les fonctions d’assistance PowerShell pour gérer les paramètres CSP.

Récupérer les paramètres

Get-CodeAppContentSecurityPolicy -Token $token -Env "<your-env-id>"
Name                           Value
----                           -----
Enabled                        True
ReportingEndpoint              http://constoso.com/report
Directives                     {[Frame-Ancestors, System.Object[]], [Script-Src, 'self']}

Activer ou désactiver l’application

Utilisez le paramètre -Enabled pour activer ou désactiver l'application de la stratégie CSP pour les applications de code.

Set-CodeAppContentSecurityPolicy -Token $token -Env "<your-env-id>" -Enabled $true

Activer ou désactiver la création de rapports

Utilisez le -ReportingEndpoint paramètre pour spécifier l’emplacement où les rapports de violation CSP sont envoyés ou passez $null pour désactiver la création de rapports.

Set-CodeAppContentSecurityPolicy -Token $token -Env "<your-env-id>" -ReportingEndpoint "https://contoso.com/report"

Pour désactiver la création de rapports, passez $null:

Set-CodeAppContentSecurityPolicy -Token $token -Env "<your-env-id>" -ReportingEndpoint $null

Directives de mise à jour

Avertissement

La mise à jour des directives remplace l’ensemble de la collection de directives. Pour mettre à jour les directives existantes, commencez par les récupérer, puis les mettez à jour en place.

Pour réinitialiser une directive à sa valeur par défaut, omettez-la de la collection. Pour désactiver entièrement une directive, transmettez un tableau vide pour la directive.

$env = "<your-env-id>"
$directives = (Get-CodeAppContentSecurityPolicy -Token $token -Env $env).Directives
# Update existing directives
Set-CodeAppContentSecurityPolicy -Token $token -Env $env -Directives $directives