Partilhar via


Como configurar a política de segurança de conteúdo (versão prévia)

Este artigo explica como configurar a CSP (Política de Segurança de Conteúdo ) para aplicativos de código. Você pode configurar as diretivas CSP individuais, escolher se deseja impor o CSP ou usar apenas relatórios e especificar para onde enviar relatórios.

Defina essas configurações no nível do ambiente a serem aplicadas a todos os aplicativos de código no ambiente. Por padrão, o CSP é aplicado com a seguinte configuração de diretiva. O <platform> valor representa os valores exigidos pela plataforma.

Diretiva Valor Padrão
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'

Quando você personaliza uma diretiva, os valores fornecidos são acrescentados ao valor padrão. Se o valor padrão for 'none', seus valores personalizados substituirão o valor padrão.

Se o ambiente tiver uma instância do Dataverse, você poderá definir as configurações do CSP no centro de administração do Power Platform. Caso contrário, consulte as instruções para configurar o CSP usando a API REST.

Pré-requisitos

  • Você deve ser um administrador do ambiente para definir as configurações do CSP.

Configurar o CSP usando o Centro de administração do Power Platform

Para acessar as configurações do CSP para aplicativos de código:

  1. Entre no centro de administração do Power Platform.
  2. No painel de navegação, selecione Gerenciar. No painel Gerenciar, selecione Ambientes.
  3. Na página Ambientes, selecione um ambiente.
  4. Na barra de comandos, selecione Configurações.
  5. Expanda Produto e selecione Privacidade + Segurança.
  6. Na política de segurança de conteúdo, selecione a guia Aplicativo .

Imagem da configuração do UO dos aplicativos de código CSP no Centro de administração do Power Platform

Habilitar relatórios

A alternância Habilitar geração de relatórios controla se os relatórios de violação do CSP são enviados. Ao habilitá-lo, especifique um ponto de extremidade válido. O sistema envia relatórios de violação para este endpoint, independentemente de a aplicação da política de segurança de conteúdo estar habilitada. Para obter mais informações sobre relatórios, consulte a documentação de relatório.

Captura de tela de uma alternância chamada Habilitar geração de relatórios ativada e uma caixa de texto chamada Ponto de extremidade da geração de relatórios contendo uma URL.

Configurar diretivas

Use a seção Configurar diretivas para controlar o valor das diretivas individuais. Se deixar os padrões ativados, você vai usar os valores padrão especificados anteriormente. Se você desativar o alternador, poderá adicionar valores personalizados à diretiva. Os valores personalizados são mesclados com os valores padrão da diretiva. Se desativar uma alternância e deixar a lista Origem em branco, você desabilitará a diretiva.

O exemplo a seguir mostra três diretivas diferentes com configurações diferentes:

  • frame-ancestors está habilitado e definido para usar seu valor padrão. O valor da diretiva resultante é: 'self' https://*.powerapps.com
  • script-src é habilitado e adiciona outra origem, que é mesclada com o valor padrão. O valor da diretiva resultante é: script-src 'self' https://contoso.com
  • img-src é desabilitado. A diretiva é omitida da política.

Captura de tela das diretivas CSP configuradas em estados diferentes

Configurar o CSP usando a API REST

Você pode configurar o CSP programaticamente usando a API do Microsoft Power Platform. Gerenciar configurações usando a API de Configurações de Gerenciamento de Ambiente : https://api.powerplatform.com/environmentmanagement/environments/{environmentId}/settings

As configurações a seguir estão disponíveis:

  • PowerApps_CSPEnabledCodeApps controla se o CSP é imposto para aplicativos de código.

  • PowerApps_CSPReportingEndpoint controla a comunicação de violações de CSP. Defina essa configuração como uma URL válida para onde os relatórios de violação do CSP são enviados ou null se os relatórios estão desabilitados.

  • PowerApps_CSPConfigCodeApps é a configuração para diretivas. Defina essa configuração como um objeto JSON com cadeia de caracteres com o formato:

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

Funções auxiliares do PowerShell

Para simplificar a chamada à API REST, use as seguintes funções do PowerShell.

Get-CodeAppContentSecurityPolicy

Use a Get-CodeAppContentSecurityPolicy função para recuperar as configurações de CSP atuais para aplicativos de código em um ambiente especificado. A função retorna o status de imposição, o ponto de extremidade de relatório e as diretivas 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

Use a função Set-CodeAppContentSecurityPolicy para atualizar as configurações CSP para aplicativos de codificação em um ambiente especificado. Você pode habilitar ou desabilitar a aplicação da Política de Segurança de Conteúdo (CSP), configurar um endereço de relatório e atualizar diretrizes individuais.

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

Para usar as funções do PowerShell, forneça um token de autenticação. Use a CLI de Autenticação da Microsoft para gerar esse token. Consulte a documentação deles para obter instruções de instalação. Depois de instalar a ferramenta, use o seguinte comando para gerar um token de autenticação:

$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

Exemplos

Os exemplos a seguir mostram como usar as funções auxiliares do PowerShell para gerenciar as configurações de CSP.

Recuperar configurações

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 ou desabilitar a imposição

Use o -Enabled parâmetro para ativar ou desativar a imposição do CSP para aplicativos de código.

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

Habilitar ou desabilitar relatórios

Utilize o parâmetro -ReportingEndpoint para especificar para onde os relatórios de violação do CSP são enviados ou passe $null para desabilitar os relatórios.

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

Para desabilitar a geração de relatórios, passe $null:

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

Atualizar diretivas

Aviso

A atualização das diretivas substitui toda a coleção de diretivas. Para atualizar as diretivas existentes, primeiro obtenha-as e depois atualize-as diretamente.

Para redefinir uma diretiva para seu valor padrão, omita-a da coleção. Para desabilitar totalmente uma diretiva, passe uma matriz vazia para a diretiva.

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