Skip to main content

Data governance: Sensitive Data and PII Detection

Context

For compliance and security reasons it is important to monitor and minimize sensitive data (such as PII) moving across your environment.

Solution

Gate can help detecting, encrypting and tokenizing PII and sensitive data to minimize the risk of data leakage.

As a prerequisite, you should have Gate deployed in your infrastructure.

Step 1 - Run Gate in transparent mode.

You should also have Gate deployed in your infrastructure. You should run Gate in transparent mode to ensure that everything was correctly deployed.

Step 2 - Define your detection policies

Gate offers a rich set of options to customize detection behavior. In particular for each PII type you can:

  • customize the detection with regexp to increase accuracy
  • decide on the behavior: whether to replace, mask, tokenize, encrypt or simply log the presence of sensitive data

Currently we support:

  • email addresses (EMAIL_ADDRESS)
  • phone number (PHONE_NUMBER)
  • urls (URL)
  • credit cards (CREDIT_CARD)
  • IBAN (IBAN)
  • SSN (US_SSN)
  • UK NHS numbers (UK_NHS)
  • US ITIN (ITIN)
  • US driver license (US_DRIVER_LICENSE)

Once sensitive data is detected we have multiple options:

  • replace
  • mask
  • hash
  • encrypt
  • keep

As an example, this is the configuration to monitor by default, mask phone numbers, tokenize email addresses, encrypt urls and replace credit cards.

    - id: pii_anonymizer
type: anonymizer
enabled: false
parameters:
anonymizers: |
DEFAULT:
type: keep
PHONE_NUMBER: # (123) 456-7890 ➔ (123) 456-****
type: mask
masking_char: "*"
chars_to_mask: 4
from_end: true
EMAIL_ADDRESS: # john.smith@example.com ➔ 8e621e3d0368631d263d07a351fa8d34fba0d17c15fbcdec11a5f58008d022a0
type: hash
hash_type: sha256 # either sha256 (default), sha512 or md5
URL: # https://john.smith.me ➔ KshULhOqJrLmuHOsQ/ArGHQK8Wrjg0BKdypb/77PYf+64v/FqB3zufbVlnGD4sn4
type: encrypt # Replaces value with Base64-encoded AES-CBC encrypted value with PKCS#7 padding and a prepended IV
key: abcdefghijklmnop # AES key, must be 128, 192 or 256 bits
CREDIT_CARD: # 4111111111111111 ➔ <CREDIT_CARD>
type: replace
new_value: <CREDIT_CARD> # Defaults to <TYPE>

Step 3 - Optionally configure custom types

You can specify your own types using regex patterns, as shown below: or more regex patterns, as shown below, to improve the detection accuracy.

    - id: pii_anonymizer
type: anonymizer
enabled: false
parameters:
analyzer_ad_hoc_recognizers: |
- name: Zipcode regex
supported_language: en
supported_entity: ZIP
patterns:
- name: zipcode
regex: "(\\b\\d{5}(?:\\-\\d{4})?\\b)"
score: 0.01

In this example we are specifying the following data:

  • supported_language : the language this regex should be applied to
  • supported_entity: the entity type to apply the regex on
  • One or more patterns, each with a regexp and a score which represents the confidence in the PII detection.

Example

Configuring Gate

This is an example configuration for Gate such that the */api/echo endpoint is monitored by the PII detetection plugin and the following rules are enforced:

  • By default, sensitive data is replaced
  • The last 4 digits of the phone number are replaced with *
  • Email addresses are tokenized
  • Urls are encrypted with a simple symmetric key
slashid_config: &slashid_config
slashid_org_id: { { .env.SLASHID_ORG_ID } }
slashid_api_key: { { .env.SLASHID_API_KEY } }
slashid_base_url: { { .env.SLASHID_BASE_URL } }

gate:
port: 8080
log:
format: text
level: trace

default:
target: http://backend:8000

plugins:
- id: pii_anonymizer
type: anonymizer
enabled: false
parameters:
anonymizers: |
DEFAULT:
type: replace
PHONE_NUMBER:
type: mask
masking_char: "*"
chars_to_mask: 4
from_end: true
EMAIL_ADDRESS:
type: hash
URL:
type: encrypt
key: abcdefghijklmnop

Conclusion

Through Gate's sensitive data detection plugin you are able to enforce data governance policies and monitor any potential sensitive data leakage.