Mascaramento e ocultação de dados

Você está lendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
info

Ao depurar chamadas de APIs no Edge, o conteúdo às vezes pode conter dados sensíveis, como cartões de crédito ou informações de saúde pessoais (PHI) que precisam ser mascarados.

O Edge oferece diferentes maneiras de ocultar ou mascarar dados confidenciais do Trace e de sessões de depuração.

Ocultar dados sensíveis

É possível impedir que dados confidenciais apareçam na ferramenta de rastreamento e em sessões de depuração criando variáveis personalizadas prefixadas com "private.".

Por exemplo, ao usar a política de operações de mapa de chave-valor para recuperar valores de um mapa de chave-valor criptografados, formate os nomes das variáveis da seguinte maneira para garantir que eles não apareçam nas sessões de rastreamento ou depuração:

<Get assignTo="private.hiddenData">

Ocultar variáveis confidenciais é uma alternativa ao uso de mascaramento de dados, descrito a seguir. A diferença entre ocultar e mascarar é que as variáveis ocultas não aparecem e os valores mascarados são substituídos por asteriscos no Trace e em sessões de depuração.

As variáveis sem o prefixo "private." são exibidas em texto não criptografado nas sessões de trace e de depuração, mesmo que os dados sejam provenientes de um repositório de dados criptografados, como um mapa de chave-valor criptografado. Use o mascaramento (abaixo) se quiser mascarar esses valores.

Como mascarar dados sensíveis

O Edge permite definir "configurações de máscara" para mascarar dados específicos nas sessões de rastreamento e depuração. As configurações de mascaramento podem ser definidas globalmente (no nível da organização) ou localmente (no nível do proxy de API ).

Quando os dados são mascarados, eles são substituídos por asteriscos no resultado de rastreamento. Exemplo:

<description>**********</description>

Como usar configurações de máscara

As configurações de máscara permitem identificar dados sensíveis nestas fontes:
  • Payloads XML:usando o XPath, é possível identificar elementos XML que serão filtrados dos payloads das mensagens de solicitação ou resposta.
  • Payloads JSON: usando o JSONPath, é possível identificar propriedades JSON a serem filtradas dos payloads das mensagens de solicitação ou resposta.
  • Variáveis de fluxo: é possível especificar uma lista de variáveis que precisam ser mascarados na saída de depuração. Quando você especifica as variáveis de fluxo request.content, response.content, ou message.content, o corpo da solicitação/resposta também é mascarado.

A estrutura básica de uma configuração de máscara é mostrada pela seguinte representação XML:

<MaskDataConfiguration name="default">
    <Namespaces>
        <Namespace prefix="myco">http://example.com</Namespace>
    </Namespaces>
    <XPathsRequest>
        <XPathRequest>/myco:Greeting/myco:User</XPathRequest>
    </XPathsRequest>
    <XPathsResponse>
        <XPathResponse>/myco:Greeting/myco:User</XPathResponse>
    </XPathsResponse>
    <JSONPathsRequest>
        <JSONPathRequest>$.store.book[*].author</JSONPathRequest>
    </JSONPathsRequest>
    <JSONPathsResponse>
        <JSONPathResponse>$.store.book[*].author</JSONPathResponse>
    </JSONPathsResponse>
    <XPathsFault>
        <XPathFault>/myco:Greeting/myco:User</XPathFault>
    </XPathsFault>
    <JSONPathsFault>
        <JSONPathFault>$.store.book[*].author</JSONPathFault>
    </JSONPathsFault>
    <Variables>
        <Variable>request.header.user-agent</Variable>
        <Variable>request.formparam.password</Variable>
    </Variables>
</MaskDataConfiguration>

Como configurar um recurso de configuração de máscara

Defina uma configuração de máscara usando os seguintes elementos.

Nome do campo Descrição Padrão Obrigatório?
XPathsRequest Uma lista de expressões XPath que serão avaliadas em relação a payloads XML (se houver) no caminho da solicitação. Qualquer XPath que for resolvido resultará no valor do elemento XML mascarado. N/A Não
XPathsResponse Uma lista de expressões XPath que serão avaliadas em relação a payloads XML (se houver) no caminho da resposta. Qualquer XPath que for resolvido resultará no valor do elemento XML mascarado. N/A Não
JSONPathsRequest Uma lista de expressões JSONPath que serão avaliadas em relação a payloads JSON (se houver) no caminho da solicitação. Qualquer JSONPath que for resolvido resultará no valor da propriedade JSON mascarada. N/A Não
JSONPathsResponse Uma lista de expressões JSONPath que serão avaliadas em relação a payloads JSON (se houver) no caminho da resposta. Qualquer JSONPath que for resolvido resultará no valor da propriedade JSON mascarada. N/A Não
XPathsFault Uma lista de expressões XPath que serão avaliadas em relação a payloads XML (se houver) no fluxo de erros (que é executado se uma falha for gerada em qualquer ponto do fluxo). Qualquer XPath que for resolvido resultará no valor do elemento XML mascarado. N/A Não
JSONPathsFault Uma lista de expressões JSON que serão avaliadas em relação a payloads JSON (se houver) no fluxo de erros (que é executado se uma falha for gerada em qualquer ponto do fluxo). Qualquer JSONPath que for resolvido resultará no valor da propriedade JSON mascarada. N/A Não
Variáveis

Uma lista de variáveis (predefinidas ou personalizadas) cujos valores serão mascarados. Para uma lista de variáveis padrão, consulte Referência de variáveis.

N/A Não

API de configuração de máscara

As configurações de máscara são definidas como arquivos formatados em XML ou JSON que você faz upload e download usando a API de gerenciamento RESTful. Para uma lista completa de APIs de mascaramento de dados, consulte Máscaras de dados.

Para conferir as configurações de máscara atuais, basta chamar o recurso de API /maskconfigs na sua organização:

$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/maskconfigs \
-u email

Este exemplo mostra a sintaxe básica para autenticação. Talvez seja possível usar outros tipos de autenticação, como Oauth2 ou SAML.

Para conferir as configurações de máscara definidas para proxies de API específicos, chame a /maskconfigs API:

$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/apis/{api_name}/maskconfigs \
-u email

Para conferir uma configuração de máscara específica, especifique o nome da máscara:

$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/maskconfigs/default \
-u email
$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/apis/{api_name}/maskconfigs/default \
-u email

Para criar uma configuração de máscara, use o verbo POST para enviar um payload que define a configuração de máscara:

$ curl -H "Content-type:text/xml" -X POST -d \
'<MaskDataConfiguration name="default">
    <Namespaces>
        <Namespace prefix="myco">http://example.com</Namespace>
    </Namespaces>
    <XPathsRequest>
        <XPathRequest>/myco:Greeting/myco:User</XPathRequest>
    </XPathsRequest>
    <XPathsResponse>
        <XPathResponse>/myco:Greeting/myco:User</XPathResponse>
    </XPathsResponse>
    <JSONPathsRequest>
        <JSONPathRequest>$.store.book[*].author</JSONPathRequest>
    </JSONPathsRequest>
    <JSONPathsResponse>
        <JSONPathResponse>$.store.book[*].author</JSONPathResponse>
    </JSONPathsResponse>
    <XPathsFault>
        <XPathFault>/myco:Greeting/myco:User</XPathFault>
    </XPathsFault>
    <JSONPathsFault>
        <JSONPathFault>$.store.book[*].author</JSONPathFault>
    </JSONPathsFault>
    <Variables>
        <Variable>request.header.user-agent</Variable>
        <Variable>request.formparam.password</Variable>
    </Variables>
</MaskDataConfiguration>' \
https://api.enterprise.apigee.com/v1/o/{org_name}/maskconfigs \
-u email
Para criar uma configuração de máscara com escopo para um proxy de API específico:
$ curl -H "Content-type:text/xml" -X POST -d \
'<MaskDataConfiguration name="default">
    <Namespaces>
        <Namespace prefix="myco">http://example.com</Namespace>
    </Namespaces>
    <XPathsRequest>
        <XPathRequest>/myco:Greeting/myco:User</XPathRequest>
    </XPathsRequest>
    <XPathsResponse>
        <XPathResponse>/myco:Greeting/myco:User</XPathResponse>
    </XPathsResponse>
    <JSONPathsRequest>
        <JSONPathRequest>$.store.book[*].author</JSONPathRequest>
    </JSONPathsRequest>
    <JSONPathsResponse>
        <JSONPathResponse>$.store.book[*].author</JSONPathResponse>
    </JSONPathsResponse>
    <XPathsFault>
        <XPathFault>/myco:Greeting/myco:User</XPathFault>
    </XPathsFault>
    <JSONPathsFault>
        <JSONPathFault>$.store.book[*].author</JSONPathFault>
    </JSONPathsFault>
    <Variables>
        <Variable>request.header.user-agent</Variable>
        <Variable>request.formparam.password</Variable>
    </Variables>
</MaskDataConfiguration>' \
https://api.enterprise.apigee.com/v1/o/{org_name}/apis/{api_name}/maskconfigs \
-u email

É possível excluir uma configuração de máscara usando o verbo DELETE:

$ curl -X DELETE \
https://api.enterprise.apigee.com/v1/o/{org_name}/apis/{api_name}/maskconfigs/{maskconfig_name} \
-u email

Este exemplo mostra a sintaxe básica para autenticação. Talvez seja possível usar outros tipos de autenticação, como Oauth2 ou SAML.

A resposta a uma operação DELETE é um código HTTP 204 sem conteúdo de mensagem.

Como usar máscara para namespaces XML

Uma configuração de máscara não requer o elemento <Namespace> em uma definição de XPATH, a menos que um namespace seja definido no payload XML. Isso também acontece se o payload XML usar um namespace padrão.

Por exemplo, o payload XML não define um namespace:

<employee>
    <name>abc</name>
    <age>50</age>
</employee>

Portanto, a configuração da máscara não exige o elemento <Namespace>:

<MaskDataConfiguration>
    <XPathsRequest>
        <XPathRequest>/employee/name</XPathRequest>
    <XPathsRequest>
</MaskDataConfiguration>

Se o payload XML contiver um namespace e um prefixo:

<myco:employee xmlns:myco="http://example.com">
    <myco:name>xyz</myco:name>
    <myco:age>50</myco:age>
</myco:employee>

Em seguida, a definição da configuração da máscara precisa conter o elemento <Namespace>:

<MaskDataConfiguration>
    <Namespaces>
        <Namespace prefix="myco">http://example.com</Namespace>
    </Namespaces>
    <XPathsRequest>
        <XPathRequest>/myco:employee/myco:name</XPathRequest>
    <XPathsRequest>
</MaskDataConfiguration>

Se o payload de XML tiver um namespace, mas nenhum prefixo, o que significa o namespace padrão:

<employee xmlns="http://example.com">
    <name>xyz</name>
    <age>50</age>
</employee>

Em seguida, a configuração da máscara ainda precisa conter o <Namespace> elemento:

<MaskDataConfiguration>
    <Namespaces>
        <Namespace prefix="myco">http://example.com</Namespace>
    </Namespaces>
    <XPathsRequest>
        <XPathRequest>/myco:employee/myco:name</XPathRequest>
    <XPathsRequest>
</MaskDataConfiguration>