Partekatu bidez


Cómo: Configurar la directiva de seguridad de contenido (versión preliminar)

En este artículo se explica cómo configurar la directiva de seguridad de contenido (CSP) para aplicaciones de código. Puede configurar las directivas de CSP individuales, elegir si aplicar CSP o solo generar informes, y especificar dónde enviar los informes.

Establezca esta configuración en el nivel de entorno para que se aplique a todas las aplicaciones de código del entorno. De forma predeterminada, CSP se aplica con la siguiente configuración de directiva. El <platform> valor representa los valores requeridos por la plataforma.

Directiva Valor predeterminado
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'

Al personalizar una directiva, los valores proporcionados se anexan al valor predeterminado. Si el valor predeterminado es 'none', los valores personalizados reemplazan el valor predeterminado.

Si el entorno tiene una instancia de Dataverse, puede configurar las opciones de CSP en el Centro de administración de Power Platform. De lo contrario, consulte las instrucciones para configurar CSP mediante la API REST.

Prerrequisitos

  • Debe ser administrador del entorno para configurar las opciones de CSP.

Configuración de CSP mediante el Centro de administración de Power Platform

Para acceder a la configuración de CSP de las aplicaciones de código:

  1. Inicie sesión en el Centro de administración de Power Platform.
  2. En el panel de navegación, seleccione Administrar. En el panel Administrar, seleccione Entornos.
  3. Seleccione un entorno en la página Entornos.
  4. Seleccione Configuración en la barra de comandos.
  5. Expanda Producto y luego seleccione Privacidad + Seguridad.
  6. En Directiva de seguridad de contenido, seleccione la pestaña Aplicación .

Imagen de la configuración UO de CSP de Code Apps en el Centro de administración de Power Platform

Habilitar informes

El botón de alternancia Habilitar informes de informes controla si se envían informes de infracciones de CSP. Al habilitarlo, especifique un punto de conexión válido. El sistema envía informes de infracciones a este punto de conexión, independientemente de si la directiva de seguridad de contenido está habilitada. Para obtener más información sobre los informes, consulte la documentación de informes.

Captura de pantalla de un interruptor con la etiqueta Habilitar informes activado y un cuadro de texto con la etiqueta Punto de conexión de informes que contiene una dirección URL.

Configurar directivas

Use la sección Configurar directivas para controlar el valor de las directivas individuales. Si dejas activados los valores predeterminados, utilizas los valores por defecto especificados anteriormente. Si desactiva el interruptor, puede añadir valores personalizados a la directiva. Los valores personalizados se combinan con los valores predeterminados de la directiva . Si desactiva un interruptor y deja la lista de origen en blanco, deshabilita la directiva.

En el ejemplo siguiente se muestran tres directivas diferentes con configuraciones diferentes:

  • frame-ancestors está habilitado y establecido para usar su valor predeterminado. El valor de la directiva resultante es: 'self' https://*.powerapps.com
  • script-src está habilitado y agrega otro origen, que se combina con el valor predeterminado. El valor de la directiva resultante es: script-src 'self' https://contoso.com
  • img-src está deshabilitado. La directiva se omite de la política.

Captura de pantalla de las directivas CSP configuradas en distintos estados

Configuración de CSP mediante la API REST

Puede configurar CSP mediante programación mediante microsoft Power Platform API. Administre la configuración mediante la API de configuración de administración de entornos : https://api.powerplatform.com/environmentmanagement/environments/{environmentId}/settings

Están disponibles las siguientes opciones de configuración:

  • PowerApps_CSPEnabledCodeApps controla si CSP se aplica a las aplicaciones de código.

  • PowerApps_CSPReportingEndpoint controla la notificación de infracciones de CSP. Establezca esta opción en una dirección URL válida en la que se envían informes de infracciones de CSP o null si se deshabilitan los informes.

  • PowerApps_CSPConfigCodeApps es la configuración para directivas. Establezca esta configuración en un objeto JSON con cadena con el formato :

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

Funciones auxiliares de PowerShell

Para simplificar la llamada a la API REST, use las siguientes funciones de PowerShell.

Get-CodeAppContentSecurityPolicy

Use la Get-CodeAppContentSecurityPolicy función para recuperar la configuración actual de CSP para las aplicaciones de código en un entorno especificado. La función devuelve el estatus de ejecución, el punto final de informes y las directivas configuradas.

  <#
  .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

Utilice la función Set-CodeAppContentSecurityPolicy para actualizar la configuración de CSP en aplicaciones de código en un entorno especificado. Puede habilitar o deshabilitar la aplicación de CSP, configurar un punto de conexión de informes y actualizar directivas individuales.

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

Autenticación

Para usar las funciones de PowerShell, proporcione un token de autenticación. Use la CLI de autenticación de Microsoft para generar este token. Consulte su documentación para obtener instrucciones de instalación. Después de instalar la herramienta, use el siguiente comando para generar un token de autenticación:

$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

En los ejemplos siguientes se muestra cómo usar las funciones auxiliares de PowerShell para administrar la configuración de CSP.

Recuperación de la configuración

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']}

Habilitar o deshabilitar la aplicación

Usa el parámetro -Enabled para activar o desactivar el cumplimiento de CSP para las aplicaciones de código.

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

Habilitar o deshabilitar informes

Utilice el parámetro -ReportingEndpoint para especificar dónde se envían los informes de infracción de CSP, o bien, introduzca $null para desactivar los informes.

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

Para desactivar los informes, pase $null:

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

Directivas de actualización

Advertencia

La actualización de las directivas reemplaza a toda la colección de directivas. Para actualizar las directivas existentes, primero recuperelas y, a continuación, actualícelas en su lugar.

Para restablecer una directiva a su valor predeterminado, omita la directiva de la colección. Para deshabilitar una directiva por completo, pase una matriz vacía para la directiva.

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