• CloudPouch NEW!
  • Akademia
  • Blog
  • O stronie
  • Home

Amazon Comprehend - wykrywanie wrażliwych danych


Amazon Comprehend - detekcja wrażliwych danych

  • Aktualnie detekcja wrażliwych danych za pomocą Amazon Comprehend jest możliwa tylko w języku angielskim. Język polski nie jest wspierany w przypadku wykrywania wrażliwych danych.
  • Na potrzeby tego artykułu, pojęcie wrażliwych danych będziemy używać jako dane PII.

W dzisiejszym świecie, bezpieczeństwo danych użytkowników jest bardzo ważne. Należy je trzymać w bezpiecznym miejscu, i nie wystawiać je na widok publiczny. Niestety, nie zawsze jest to takie proste, albo często wynika to z lenistwa użytkowników (kilka lat temu, wielu pracowników trzymało ważne informacje na karteczkach samoprzylepnych).

Dzisiaj w erze digitalizacji, karteczki samoprzylepne zostały zastąpione wirtualnymi notatkami w aplikacjach internetowych. Często wynika to z braku odpowiedniego miejsca, gdzie takie dane można trzymać.

Czym są wrażliwe dane?

Z angielskiego personally identifiable information (PII). Skrót PII oznacza informacje umożliwiające identyfikację osoby, są to wszelkie dane, które mogą być użyte do zidentyfikowania konkretnej osoby. Na potrzeby dalszej części tego artykułu, pojęcie wrażliwych danych będziemy używać jako dane PII.

Istnieją różne rodzaje danych PII, możemy je podzielić na kilka głównych kategorii:

  • personalne, które zawierają dane jak imię, nazwisko, adresy zamieszkania, telefony kontaktowe, e-maile, jak i daty urodzenia.
  • finansowe, związane z informacjami bankowymi (np. dane kart kredytowych).
  • techniczne, czyli związane np. z nazwą użytkownika, hasłami, linkami, czy również z adresami IP.
  • obywatelskie, np. dane związane z prawem jazdy, z paszportami, czy też z numerami ubezpieczeń (np. SSN), czyli niepowtarzalne identyfikatory.

Jak wykrywać wrażliwe dane w aplikacjach?

Zdarza się, iż w niektórych częściach aplikacji internetowych dla firm, dostęp do niektórych niektórych z nich mają nie tylko pracownicy, ale też klienci. Na przykład komentarze lub notatki do zamówień, dostęp do tego typu danych jest możliwy przez pracowników wewnątrz firmy, przez co wiele osób niekoniecznie potrzebujących tych danych, może mieć do nich dostęp.

W przypadku z góry określonej struktury danych np. w formularzach wiemy, jakie dane są (lub też powinny się tam znajdować), jednak w przypadku niestrukturyzowanej formy (np. notatki), już niekoniecznie. Przez co, nie wiemy, co faktycznie znajduje się w danej treści, bez zrozumienia kontekstu zdań zawartych w treści.

Rozwiązania typu regex, są dobre dla powtarzalnych schematów w tekście, możemy z łatwością napisać regex do różnego rodzaju identyfikatorów, które zawierają określoną ilość znaków (prosty przykład kod Social Security Number (SSN) zawiera 9 znaków, ma on swój algorytm, a także bazując na tym, w jaki sposób pracownicy tworzą treści, kilka schematów można z tego zbudować). Niekoniecznie sprawdzi się to np. dla adresów zamieszkania.

Dla tego typu problemów warto użyć rozwiązań typu ML, które bazując na dobrym zasobie danych do nauczenia, mogą uwzględniać kontekst wypowiedzi.

Jednak nie zawsze mamy dostęp w firmie do zespołu Data Science, sami nie jesteśmy specjalistami w tej dziedzinie, lub też nie możemy poświęcić wystarczającej ilości czasu, aby się nimi stać.

Optymalnym rozwiązaniem byłoby mieć rozwiązanie, które ma:

  • wyuczone modele ML
  • nie jest trudne do obsługi
  • jest przystępne cenowo.

Na szczęście chmura AWS oferuje nam gotowe rozwiązanie typu pay-per-use, i nie wymaga znajomości ML. Usługa ta nosi nazwę Amazon Comprehend.

Amazon Comprehend

Amazon-comprehend-logo

Amazon Comprehend to usługa przetwarzania języka naturalnego (skrót NLP z ang. natural-language processing), która wykorzystuje uczenie maszynowe do odkrywania istotnych informacji w nieustrukturyzowanych zbiorach danych. Usługa ma gotowe wyuczone mechanizmy do tych zadań.

Usługa pozwala na między inni:

  • wyodrębnianie fraz kluczowych w tekście
  • badanie sentymentu tekstu (pozytywny, negatywny, neutralny lub mieszany)
  • wykrywania, w jakim języku jest napisany tekst (ponad 100 języków, polski jest również dostępny)
  • budowanie własnych modeli klasyfikacji tekstu
  • wykrywanie oraz redagowanie wrażliwych danych (PII)
  • oraz znacznie więcej.

Aktualnie wykrywanie wrażliwych danych jest możliwa tylko w języku angielskim. Język polski nie jest wspierany w tym przypadku.

Jak odnaleźć dane wrażliwe używając Amazon Comprehend?

Amazon Comprehend umożliwia wykrywanie wrażliwych danych od 17 sierpnia 2020, więc całkiem od niedawna. Obecnie Amazon Comprehend wspiera następujące typy wrażliwych danych.

Usługa pozwala zarówno na wykrywanie wrażliwych danych, etykietowanie wykrytych wrażliwych danych, jak i redagowanie tychże danych (czyli usuwanie wrażliwych danych z tekstu, i zastąpienia ich np. ciągiem znaków typu *, lub też nazwą etykiety rodzaju wrażliwych danych).

W przypadku, gdy chcemy zająć się redagowaniem danych poprzez Amazon Comprehend, dane wejściowe, które chcemy zredagować, muszą znajdować się jako plik z rozszerzeniem txt w bucket w usłudze S3, a na wyjściu otrzymamy zredagowany plik również z rozszerzeniem txt.

Jednak w przypadku gdy chcielibyśmy własnoręcznie zredagować dane, np. w aplikacji, nie ma z tym najmniejszego problemu. Rezultat wykrywania wrażliwych danych dostarczy nam wszystkich potrzebnych informacji.

Użycie Amazon Comprehend

Amazon Comprehend, możemy użyć zarówno w dashboardzie AWS:
Amazon-comprehend-logo

Jak i poprzez klienta Comprehend z AWS SDK, np. wystarczy wyszukać biblioteki dla naszego języka programowania (np. dla AWS SDK Javascript, znajdziemy go tutaj), aby użyć Comprehend w naszej aplikacji internetowej.

Do wykrywania wrażliwych danych możemy użyć poniżej opisanych metod.

Metoda: ContainsPiiEntities

Analizuje tekst wejściowy pod kątem obecności informacji umożliwiających wykrywania wrażliwych danych i zwraca etykiety zidentyfikowanych typów wrażliwych danych.

Przykład odpowiedzi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"message": {
"Labels": [
...
{
"Name": "EMAIL",
"Score": 1
},
{
"Name": "DATE_TIME",
"Score": 0.9984612464904785
}
...
]
}
}

Dostajemy w odpowiedzi etykiety związane z danymi wrażliwymi, Nazwę typu wrażliwych danych, oraz scoring, czyli jak bardzo Amazon Comprehend jest pewny wyniku pod względem wykrywania wrażliwych danych (im bliższy wartości 1, tym większa pewność).

W przypadku, gdybyśmy chcieli również zająć się redagowaniem wrażliwych danych (czyli usunięciem wrażliwych fraz z tekstu), powyższa metoda za wiele nam nie pomoże. Nie wiemy dokładnie jaka fraza w tekście została wykryta jako wrażliwa.

Na szczęście możemy temu zaradzić poprzez użycie innej metody.

Metoda: DetectsPiiEntities

Załóżmy przykładowy tekst:

1
2
3
const text = ‘My name is Joe Smith and I was born in 1988 and I am 33 years old. I
work at Predictive Hacks and my email is test@gmail.com I live in Athens, Greece. My
phone number is 623 12 34 567 and my bank account is 123123567888.'

Kod:

1
2
3
const comprehend = new AWS.Comprehend();
const params = { LanguageCode: 'en', Text: text }; // definiujemy język oraz tekst do analizowania
const result = await comprehend.detectPiiEntities(params).promise();

Odpowiedź:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"message": {
"Entities": [
...
{
"Score": 0.9999836087226868,
"Type": "NAME",
"BeginOffset": 11,
"EndOffset": 20
},
{
"Score": 0.9999861717224121,
"Type": "DATE_TIME",
"BeginOffset": 39,
"EndOffset": 43
},
{
"Score": 0.9999574422836304,
"Type": "BANK_ACCOUNT_NUMBER",
"BeginOffset": 207,
"EndOffset": 222
}
]
}
}

Porównując ContainsPiiEntities oraz DetectsPiiEntities możemy zauważyć różnicę w postaci dwóch dodatkowych atrybutów:

  • beginOffset, który jest początkiem offsetu frazy, która została uznana Amazon Comprehend za wrażliwą,
  • EndOffset, która jest końcem offsetu frazy, która zostałą uznana Amazon Comprehend za wrażliwą.

Dzięki tym dwóm dodatkowym argumentom możemy wewnątrz naszej aplikacji usunąć/zmodyfikować daną frazę samodzielnie, bez pomocy Amazon Comprehend.

Ograniczenia

Należy pamiętać, iż w pojedynczym wywołaniu metody do wykrywania wrażliwych danych jest limit znaków (5000).

W przypadku gdy potrzebujemy na raz sprawdzić większą ilości znaków (lub większe ilości dokumentów), jest to możliwe np. poprzez:

  • zastosowaniu podejścia z umieszczeniem tekstu w formie pliku txt na S3, oraz użyciu metody StartPiiEntitiesDetectionJob, która tworzy asynchroniczne zadanie służące wykrywaniu wrażliwych danych dla kolekcji dokumentów.
  • rozdzielenia tekstu na mniejsze części (o ile to możliwe, czasami jest to jednak nie możliwe, ponieważ przy rozdzieleniu tekstu łatwo o zgubienie kontekstu zdania).

Nasuwa się nam tutaj dodatkowe pytanie, co w przypadku, jeżeli jakiegoś typu danych wrażliwych nie ma obecnie w usłudze Amazon Comprehend?

  • Dla danych mających jakiś konkretny, łatwy schemat do odnalezienia, możemy użyć rozwiązań regexowych.
  • W przypadku gdy chcielibyśmy, aby Amazon Comprehend nauczył się wykrywania konkretnego rodzaju danych, oraz mamy wystarczającą ilość danych do nauki, jest to jak najbardziej możliwe. Amazon Comprehend zbuduje nasze własne modele do niestandardowej klasyfikacji danych.

Istnieją dwie metody do tego: Annotations i Entitity lists. Więcej informacji znajdziesz tutaj. W ogromnym skrócie wystarczy dostarczyć plik CSV z danymi, dzięki którym Amazon Comprehend nauczy się je rozpoznawać.

Koszty

Na stronie usługi możemy zapoznać się z przykładowymi cennikami (polecam zapoznać się z przykładem 7 oraz 8, które dotyczą wrażliwych danych). W projekcie, w którym użyłem metody DetectsPiiEntities na większym zbiorze danych, cena za około 500 tysięcy zapytań do Amazon Comprehend wyniosła 250 dolarów.

Podsumowanie

W artykule przedstawiłem:

  • czym są wrażliwe dane,
  • w jaki sposób możemy podejść do ich wykrywania w tekście,
  • poznaliśmy usługę Amazon Comprehend, oraz w jaki sposób może ona nam pomóc zarówno w przypadku wykrywania, jak i w redakcji wrażliwych danych,
  • poznaliśmy przykłady użycia,
  • a na końcu poznaliśmy ograniczenia usługi.
Autor: Daniel Aniszkiewicz
Programista w branży od 2016. Głównie Ruby (on Rails), React, a od 3 lat zafascynowany podejściem Serverless z chmurą AWS. W wolnym czasie współorganizował konferencje GrillRB, GrillJS, GrillOps, a w czasach studenckich Sesje Linuksowe. Od czasu do czasu pisze bloga (danielaniszkiewicz.com) o podejściu Serverless z Ruby.



Cześć

Nazywam się Paweł Zubkiewicz i cieszę się, że tu jesteś!
Od ponad 18 lat profesjonalnie tworzę oprogramowanie, a od 2016 roku pasjonuje się Serverless.
Tą stronę stworzyłem z myślą o Tobie i o nas wszystkich, którzy uważają, że trend serverless trwale zmieni sposób tworzenia oprogramowania.
Więcej o tej stronie...

Kategorie

Pobierz bezpłatny PDF

Poradnik 12 Rzeczy o Serverless

Wybrane artykuły