Ocultar e mascarar dados

Esta página aplica-se ao Apigee e ao Apigee Hybrid.

Veja a documentação do Apigee Edge.

Quando depura chamadas de APIs no Apigee, o conteúdo pode, por vezes, conter dados confidenciais, como cartões de crédito ou informações de saúde de identificação pessoal (PHI) que têm de ser ocultadas.

O Apigee oferece diferentes formas de ocultar ou ocultar dados confidenciais de sessões de depuração. Se usar a ocultação para os dados recolhidos em sessões de depuração, o Apigee executa a ocultação nos nós da gateway, antes de transmitir os dados da sessão de depuração para o plano de controlo.

Ocultar dados confidenciais

O Apigee permite-lhe definir configurações de ocultação para ocultar dados específicos em sessões de rastreio e depuração. Quando os dados são ocultados, são substituídos por asteriscos no resultado da rastreabilidade. Pode ocultar dados confidenciais e manter os dados não confidenciais inalterados. Por exemplo:

<ServiceRequest>
  <request-id>B540A938-F551</request-id>
  <customer-name>**********</customer-name>
</ServiceRequest>

A configuração da máscara é um recurso singleton que define ao nível do ambiente. Por predefinição, a ocultação de dados não está em vigor.

A ocultação de dados aplica-se apenas aos dados capturados numa sessão de depuração para um proxy de API. A ocultação de dados não afeta os dados enviados para destinos ou aplicações cliente. Se alterar a configuração da ocultação de dados, tem de iniciar uma nova sessão de depuração para ver o efeito da alteração.

Estrutura de uma configuração de máscara

As configurações de máscara são ficheiros formatados em JSON que lhe permitem identificar dados confidenciais nas seguintes origens:

  • Payloads XML: através do XPath, identifica elementos XML a serem filtrados de payloads de mensagens de pedidos ou respostas.
  • Payloads JSON: através do JSONPath, identifica as propriedades JSON a filtrar dos payloads das mensagens de pedido ou de resposta.
  • Variáveis de fluxo: pode especificar uma lista de variáveis que devem ser ocultadas na saída de depuração. Quando especifica as variáveis de fluxo request.content, response.content ou message.content, o corpo do pedido/resposta também é ocultado.

Segue-se um exemplo da estrutura básica de uma configuração de máscara no formato JSON. Para mais informações sobre os campos de configuração da máscara apresentados no exemplo, consulte DebugMask.

{
  "namespaces": {
    "myco": "http://example.com"
  },
  "requestXPaths": [
    "/myco:Greeting/myco:User"
  ],
  "responseXPaths": [
    "/myco:Greeting/myco:User"
  ],
  "faultXPaths": [
    "/myco:Greeting/myco:User"
  ],
  "requestJSONPaths": [
    "$.store.book[*].author"
  ],
  "responseJSONPaths": [
    "$.store.book[*].author"
  ],
  "faultJSONPaths": [
    "$.store.book[*].author"
  ],
  "variables": [
    "request.header.user-name",
    "request.formparam.password",
    "myCustomVariable"
  ]
}

Ver a configuração da máscara num ambiente através da API

Para ver a configuração da máscara num ambiente, emita um GET para o seguinte recurso:

/organizations/{org}/environments/{env}/debugmask

Por exemplo:

curl "https://apigee.googleapis.com/v1/organizations/myorg/environments/test/debugmask" \
  -X GET \
  -H "Authorization: Bearer $TOKEN"

Onde $TOKEN está definido como a sua chave de acesso OAuth 2.0, conforme descrito em Obter uma chave de acesso OAuth 2.0. Para informações sobre as opções de curl usadas neste exemplo, consulte a secção Usar o curl. Para uma descrição das variáveis de ambiente que pode usar, consulte o artigo Definir variáveis de ambiente para pedidos de API Apigee.

Segue-se um exemplo da resposta:

{
  "name": "organizations/myorg/environments/test/debugmask"
  "namespaces": {
    "myco": "http://example.com"
  },
  "requestXPaths": [
    "/myco:Greeting/myco:User"
  ],
  "responseXPaths": [
    "/myco:Greeting/myco:User"
  ]
}

Atualizar a configuração da máscara num ambiente através da API

Para atualizar o recurso singleton de configuração da máscara num ambiente, emita um PATCH para o seguinte recurso:

/organizations/{org}/environments/{env}/debugmask

Opcionalmente, pode transmitir os seguintes parâmetros de consulta:

  • Defina o parâmetro de consulta updateMask para especificar uma máscara de campo que inclua uma lista separada por vírgulas de nomes totalmente qualificados de campos na máscara de depuração. Por exemplo: "requestJSONPaths"
  • Defina o parâmetro de consulta replaceRepeatedFields para especificar se os valores existentes na máscara de depuração devem ser substituídos quando fizer uma atualização. Por predefinição, os valores são anexados (false)

Por exemplo:

curl "https://apigee.googleapis.com/v1/organizations/myorg/environments/test/debugmask" \
  -X PATCH \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-type: application/json" \
  -d \
  '{
     "namespaces": {
       "ns1": "http://example.com"
     },
     "requestXPaths": [
       "/ns1:employee/ns1:name"
     ]
   }'

Onde $TOKEN está definido como a sua chave de acesso OAuth 2.0, conforme descrito em Obter uma chave de acesso OAuth 2.0. Para informações sobre as opções de curl usadas neste exemplo, consulte a secção Usar o curl. Para uma descrição das variáveis de ambiente que pode usar, consulte o artigo Definir variáveis de ambiente para pedidos de API Apigee.

Máscara de XML com âmbito de espaço de nomes

Se quiser ocultar dados XML e esses dados usarem espaços de nomes XML, a configuração da máscara tem de fazer referência a esses espaços de nomes com o elemento namespaces. Isto é verdade quer a carga útil XML use um espaço de nomes predefinido ou um prefixo de espaço de nomes.

Por exemplo, suponhamos que quer ocultar o nome do funcionário no payload do pedido e que o XML não usa espaços de nomes XML:

<employee>
  <name>Shanmu Tharman</name>
  <age>50</age>
</employee>

Por conseguinte, a configuração debugmask não requer o elemento namespaces:

{
  "requestXPaths": [
    "/employee/name"
  ]
}

Se a carga útil XML usar espaços de nomes com prefixos:

<cym:employee xmlns:cym="http://cymbalgroup.com" xmlns:id="http://cymbalgroup.com/identity">
  <id:name>Shanmu Tharman</id:name>
  <id:age>50</id:age>
</cym:employee>

Em seguida, a configuração da máscara deve conter o elemento namespaces. Pode escolher qualquer prefixo de espaço de nomes válido na configuração debugmask; o prefixo de espaço de nomes na configuração debugmask pode ser o mesmo que o prefixo de espaço de nomes usado no XML, mas não é obrigatório.

{
  "namespaces": {
    "cym": "http://cymbalgroup.com",
    "idns": "http://cymbalgroup.com/identity"
  },
  "requestXPaths": [
    "/cym:employee/idns:name"
  ]
}

Se a carga útil XML usar um espaço de nomes sem prefixo, ou seja, o espaço de nomes predefinido:

<employee xmlns="http://cymbalgroup.com" xmlns:id="http://cymbalgroup.com/identity">
  <id:name>Shanmu Tharman</id:name>
  <id:age>50</id:age>
</employee>

Em seguida, a configuração debugmask tem de definir um prefixo no elemento namespaces correspondente a esse espaço de nomes predefinido. Pode usar qualquer prefixo único que quiser.

{
  "namespaces": {
    "p1": "http://cymbalgroup.com",
    "id": "http://cymbalgroup.com/identity"
  },
  "requestXPaths": [
    "/p1:employee/id:name"
  ]
}

Outras notas de configuração

  • Com os elementos de configuração *XPaths e *JSONPaths, pode ocultar dados que aparecem nas mensagens request, response ou fault. No entanto, o conteúdo completo da mensagem também pode ser capturado por sessões de depuração. Também pode configurar request.content ou response.content na secção variables para impedir a apresentação de dados confidenciais.

  • Se usar a política ServiceCallout para fazer um pedido, as informações no pedido e na resposta para esse pedido não vão ser ocultadas com os elementos de configuração, como requestXPaths ou responseJSONPaths. Se quiser ocultar esses dados, deve especificar um nome de variável para as mensagens de pedido e resposta na política ServiceCallout e, em seguida, especificar essas variáveis na secção variables de debugmask. Por exemplo, se a sua política ServiceCallout usar:

    <ServiceCallout name='SC-1'>
      <Request variable='rbacRequest'>
        <Set>
          <Payload contentType='application/json'>{ ... }</Payload>
           ...
    

    Em seguida, deve incluir rbacRequest.content no elemento variables para a configuração de debugmask.

    {
      ...
      "variables": [
        "request.content",
        "response.content",
        "rbacRequest.content"
      ]
    }

Ocultar dados confidenciais

Além da ocultação, pode impedir que os dados confidenciais apareçam na ferramenta de rastreio e nas sessões de depuração escolhendo um nome que comece por private. para as suas variáveis personalizadas.

Por exemplo, quando usar a Política de operações de mapeamento de chaves-valores para obter um valor de um mapa de chaves-valores, pode escolher o nome da variável da seguinte forma para garantir que o valor não aparece em sessões de rastreio ou depuração:

<KeyValueMapOperations name='KVM-Get-1'>
    <Scope>environment</Scope>
    <ExpiryTimeInSecs>300</ExpiryTimeInSecs>
    <MapName>settings</MapName>
    <Get assignTo='private.privatekey'>
      <Key>
        <Parameter>rsa_private_key</Parameter>
      </Key>
    </Get>
  </KeyValueMapOperations>

As variáveis sem o prefixo private. são apresentadas em texto não cifrado nas sessões de rastreio e de depuração, mesmo que os dados tenham origem num arquivo de dados encriptado, como um mapa de chaves-valores. Use a ocultação se quiser ocultar estes valores.