Mascaramento e ocultação de dados

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

Quando você depura chamadas de APIs no Edge, às vezes o conteúdo pode conter dados sensíveis, como cartões de crédito ou informações de saúde de identificação pessoal (PHI, na sigla em inglês) que precisam ser mascarados.

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

Como ocultar dados confidenciais

É 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 rastreamento e de depuração, mesmo que os dados sejam provenientes de um armazenamento de dados criptografados, como um mapa de chave-valor criptografado. Use o mascaramento (abaixo) se quiser mascarar esses valores.

Como mascarar dados confidenciais

O Edge permite que você defina "configurações de máscara" para mascarar dados específicos em 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 da API).

Quando os dados são mascarados, eles são substituídos por asteriscos na saída de trace. Exemplo:

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

Como usar configurações de máscara

As configurações de máscara permitem identificar dados sensíveis nessas 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áscaras

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

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. Todos os XPaths que forem resolvidos com êxito vão resultar no mascaramento do valor do elemento XML. 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 de resposta. Todos os XPaths que forem resolvidos com êxito vão resultar no mascaramento do valor do elemento XML. N/A Não
JSONPathsRequest Uma lista de expressões JSONPath que serão avaliadas em relação aos payloads JSON (se houver) no caminho da solicitação. Qualquer JSONPaths que sejam resolvidos com êxito vão resultar no mascaramento do valor da propriedade JSON. 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 de resposta. Qualquer JSONPaths que sejam resolvidos com êxito vão resultar no mascaramento do valor da propriedade JSON. 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 será executado se uma falha for gerada em qualquer ponto do fluxo. Todos os XPaths que forem resolvidos com êxito vão resultar no mascaramento do valor do elemento XML. 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 será executada se uma falha for gerada em qualquer ponto do fluxo. Qualquer JSONPath que for resolvido com sucesso vai fazer com que o valor da propriedade JSON seja mascarado. N/A Não
Variáveis

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

N/A Não

API Mask configuration

As configurações de máscara são definidas como arquivos no formato XML ou JSON que podem ser enviados por upload e transferidos por download usando a API de gerenciamento RESTful. Para uma lista completa das 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 Basic para autenticação. Você pode usar outros tipos de autenticação, como Oauth2 ou SAML.

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

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

Para conferir uma configuração específica, defina 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 da 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 Basic para autenticação. Você pode usar outros tipos de autenticação, como Oauth2 ou SAML.

A resposta para 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 elemento <Namespace>:

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