Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 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 , 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:
- Inicie sesión en el Centro de administración de Power Platform.
- En el panel de navegación, seleccione Administrar. En el panel Administrar, seleccione Entornos.
- Seleccione un entorno en la página Entornos.
- Seleccione Configuración en la barra de comandos.
- Expanda Producto y luego seleccione Privacidad + Seguridad.
- 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 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 Habilitar 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:
- está habilitado y establecido para usar su valor predeterminado. El valor de la directiva resultante es:
- está habilitado y agrega otro origen, que se combina con el valor predeterminado. El valor de la directiva resultante es:
- 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 :
Están disponibles las siguientes opciones de configuración:
controla si CSP se aplica a las aplicaciones de código.
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 si se deshabilitan los informes.
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 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 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 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 para especificar dónde se envían los informes de infracción de CSP, o bien, introduzca para desactivar los informes.
Set-CodeAppContentSecurityPolicy -Token $token -Env "<your-env-id>" -ReportingEndpoint "https://contoso.com/report"
Para deshabilitar los informes, pase :
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