Verwenden der detaillierten Erkennung sensibler Daten - AWS Glue

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden der detaillierten Erkennung sensibler Daten

Anmerkung

Feinkörnige Aktionen sind nur verfügbar in AWS Glue 3.0 und 4.0. Dies beinhaltet AWS Glue Studio Erfahrung. Änderungen am dauerhaften Auditprotokoll sind auch in Version 2.0 nicht verfügbar.

Alle AWS Glue Studio Bei Visual-Jobs der Versionen 3.0 und 4.0 wird ein Skript erstellt, das automatisch detaillierte Aktionen verwendet. APIs

Die Transformation „Sensible Daten erkennen“ bietet die Möglichkeit, Entitäten zu erkennen, zu maskieren oder zu entfernen, die Sie definieren oder die von AWS Glue vordefiniert wurden. Mithilfe detaillierter Aktionen können Sie außerdem eine bestimmte Aktion pro Entität anwenden. Weitere Vorteile:

  • Verbesserte Leistung, da Aktionen sofort angewandt werden, wenn Daten erkannt wurden.

  • Sie haben die Option, bestimmte Spalten ein- oder auszuschließen.

  • Sie können Datenentitäten teilweise maskieren – dadurch müssen Sie nicht die gesamte Zeichenfolge maskieren. Es werden einfache Parameter mit Offsets und Regex unterstützt.

Im Folgenden finden Sie Codefragmente zur Erkennung sensibler Daten APIs und detaillierter Aktionen, die in den Beispielaufträgen verwendet wurden, auf die im nächsten Abschnitt verwiesen wird.

Detect-API – detaillierte Aktionen verwenden den neuen Parameter detectionParameters:

def detect( frame: DynamicFrame, detectionParameters: JsonOptions, outputColumnName: String = "DetectedEntities", detectionSensitivity: String = "LOW" ): DynamicFrame = {}

Verwendung der Erkennung sensibler Daten mit detaillierten Aktionen APIs

Die Erkennung sensibler Daten APIs mithilfe von Detect analysiert die angegebenen Daten, bestimmt, ob es sich bei den Zeilen oder Spalten um Entitätstypen für sensible Daten handelt, und führt vom Benutzer für jeden Entitätstyp festgelegte Aktionen aus.

Verwenden der Detect-API mit detaillierten Aktionen

Verwenden Sie die Detect-API und geben Sie die Werte outputColumnName und detectionParameters an.

object GlueApp { def main(sysArgs: Array[String]) { val spark: SparkContext = new SparkContext() val glueContext: GlueContext = new GlueContext(spark) // @params: [JOB_NAME] val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray) Job.init(args("JOB_NAME"), glueContext, args.asJava) // Script generated for node S3 bucket. Creates DataFrame from data stored in S3. val S3bucket_node1 = glueContext.getSourceWithFormat(formatOptions=JsonOptions("""{"quoteChar": "\"", "withHeader": true, "separator": ",", "optimizePerformance": false}"""), connectionType="s3", format="csv", options=JsonOptions("""{"paths": ["s3://189657479688-ddevansh-pii-test-bucket/tiny_pii.csv"], "recurse": true}"""), transformationContext="S3bucket_node1").getDynamicFrame() // Script generated for node Detect Sensitive Data. Will run detect API for the DataFrame // detectionParameter contains information on which EntityType are being detected // and what actions are being applied to them when detected. val DetectSensitiveData_node2 = EntityDetector.detect( frame = S3bucket_node1, detectionParameters = JsonOptions( """ { "PHONE_NUMBER": [ { "action": "PARTIAL_REDACT", "actionOptions": { "numLeftCharsToExclude": "3", "numRightCharsToExclude": "4", "redactChar": "#" }, "sourceColumnsToExclude": [ "Passport No", "DL NO#" ] } ], "USA_PASSPORT_NUMBER": [ { "action": "SHA256_HASH", "sourceColumns": [ "Passport No" ] } ], "USA_DRIVING_LICENSE": [ { "action": "REDACT", "actionOptions": { "redactText": "USA_DL" }, "sourceColumns": [ "DL NO#" ] } ] } """ ), outputColumnName = "DetectedEntities" ) // Script generated for node S3 bucket. Store Results of detect to S3 location val S3bucket_node3 = glueContext.getSinkWithFormat(connectionType="s3", options=JsonOptions("""{"path": "s3://189657479688-ddevansh-pii-test-bucket/test-output/", "partitionKeys": []}"""), transformationContext="S3bucket_node3", format="json").writeDynamicFrame(DetectSensitiveData_node2) Job.commit() }

Das obige Skript erstellt ein DataFrame von einem Speicherort in Amazon S3 und führt dann die detect API aus. Da die detect API erfordert, dass das Feld detectionParameters (eine Zuordnung des Entitätsnamens zu einer Liste aller Aktionseinstellungen, die für diese Entität verwendet werden sollen) durch das JsonOptions Objekt von AWS Glue repräsentiert wird, können wir damit auch die Funktionalität der API erweitern.

Geben Sie für jede Aktion pro Entität eine Liste aller Spaltennamen ein, auf die die Kombination aus Entität und Aktion angewendet werden soll. Dadurch können Sie anpassen, welche Entitäten für jede Spalte in Ihrem Datensatz erkannt werden sollen. Entitäten, von denen Sie wissen, dass sie sich nicht in einer bestimmten Spalte befinden, können übersprungen werden. Das macht Ihre Aufträge außerdem leistungsfähiger, da keine unnötigen Erkennungsaufrufe für diese Entitäten ausgeführt werden, und ermöglicht Ihnen, individuelle Aktionen für jede Kombination aus Spalte und Entität auszuführen.

Bei näherer Betrachtung von detectionParameters gibt es im Beispielauftrag drei Entitätstypen. Diese sind Phone Number, USA_PASSPORT_NUMBER und USA_DRIVING_LICENSE. Für jeden dieser Entitätstypen führt AWS Glue unterschiedliche Aktionen aus, die entwederPARTIAL_REDACT, SHA256_HASHREDACT, und lautenDETECT. Im Falle einer Erkennung hat jeder der Entitätstypen außerdem sourceColumns für die Anwendung und/oder sourceColumnsToExclude.

Anmerkung

Pro Spalte kann nur eine edit-in-place Aktion (PARTIAL_REDACTSHA256_HASH,, oderREDACT) verwendet werden, aber die DETECT Aktion kann mit jeder dieser Aktionen verwendet werden.

Das Feld detectionParameters hat das folgende Layout:

ENTITY_NAME -> List[Actions] { "ENTITY_NAME": [{ Action, // required ColumnSpecs, ActionOptionsMap }], "ENTITY_NAME2": [{ ... }] }

Die Typen von actions und actionOptions werden unten aufgeführt:

DETECT { # Required "action": "DETECT", # Optional, depending on action chosen "actionOptions": { // There are no actionOptions for DETECT }, # 1 of below required, both can also used "sourceColumns": [ "COL_1", "COL_2", ..., "COL_N" ], "sourceColumnsToExclude": [ "COL_5" ] } SHA256_HASH { # Required "action": "SHA256_HASH", # Required or optional, depending on action chosen "actionOptions": { // There are no actionOptions for SHA256_HASH }, # 1 of below required, both can also used "sourceColumns": [ "COL_1", "COL_2", ..., "COL_N" ], "sourceColumnsToExclude": [ "COL_5" ] } REDACT { # Required "action": "REDACT", # Required or optional, depending on action chosen "actionOptions": { // The text that is being replaced "redactText": "USA_DL" }, # 1 of below required, both can also used "sourceColumns": [ "COL_1", "COL_2", ..., "COL_N" ], "sourceColumnsToExclude": [ "COL_5" ] } PARTIAL_REDACT { # Required "action": "PARTIAL_REDACT", # Required or optional, depending on action chosen "actionOptions": { // number of characters to not redact from the left side "numLeftCharsToExclude": "3", // number of characters to not redact from the right side "numRightCharsToExclude": "4", // the partial redact will be made with this redacted character "redactChar": "#", // regex pattern for partial redaction "matchPattern": "[0-9]" }, # 1 of below required, both can also used "sourceColumns": [ "COL_1", "COL_2", ..., "COL_N" ], "sourceColumnsToExclude": [ "COL_5" ] }

Wenn das Skript ausgeführt wird, werden die Ergebnisse im angegebenen Amazon-S3-Speicherort ausgegeben. Sie können Ihre Daten in Amazon S3 anzeigen, wobei die ausgewählten Entitätstypen auf der Grundlage der ausgewählten Aktion sensibilisiert werden. In dem Fall hätten wir Zeilen, die in etwa so aussehen:

{ "Name": "Colby Schuster", "Address": "39041 Antonietta Vista, South Rodgerside, Nebraska 24151", "Car Owned": "Fiat", "Email": "Kitty46@gmail.com", "Company": "O'Reilly Group", "Job Title": "Dynamic Functionality Facilitator", "ITIN": "991-22-2906", "Username": "Cassandre.Kub43", "SSN": "914-22-2906", "DOB": "2020-08-27", "Phone Number": "1-2#######1718", "Bank Account No": "69741187", "Credit Card Number": "6441-6289-6867-2162-2711", "Passport No": "94f311e93a623c72ccb6fc46cf5f5b0265ccb42c517498a0f27fd4c43b47111e", "DL NO#": "USA_DL" }

Im obigen Skript wurde die Phone Number teilweise mit # redigiert. Das Passport No wurde in einen SHA256 Hash geändert. Die DL NO# wurde als US-Führerscheinnummer erkannt und zu „USA_DL“ redigiert, wie es in detectionParameters angegeben war.

Anmerkung

Die classifyColumns-API ist aufgrund der Art der API nicht für die Verwendung mit detaillierten Aktionen verfügbar. Diese API führt spaltenbasierte Stichproben durch (vom Benutzer anpassbar, hat aber Standardwerte), um die Erkennung zu beschleunigen. Aus diesem Grund müssen bei detaillierten Aktionen alle Werte iteriert werden.

Dauerhaftes Auditprotokoll

Eine neue Funktion, die mit fein abgestuften Aktionen eingeführt wurde (aber auch verfügbar ist, wenn die normale Version verwendet wird APIs), ist das Vorhandensein eines persistenten Auditprotokolls. Derzeit wird bei der Ausführung der Detect-API ein zusätzlicher Spaltenparameter (standardmäßig DetectedEntities, aber über outputColumnName anpassbar) mit Metadaten zur PII-Erkennung hinzugefügt. Dieser hat jetzt einen „actionUsed“ -Metadatenschlüssel, der entweder DETECT, PARTIAL_REDACT, SHA256_HASH oder REDACT lautet.

"DetectedEntities": { "Credit Card Number": [ { "entityType": "CREDIT_CARD", "actionUsed": "DETECT", "start": 0, "end": 19 } ], "Phone Number": [ { "entityType": "PHONE_NUMBER", "actionUsed": "REDACT", "start": 0, "end": 14 } ] }

Selbst Kunden, die solche Aktionen APIs ohne detaillierte Aktionen verwenden, detect(entityTypesToDetect, outputColumnName) werden dieses persistente Auditprotokoll im resultierenden Datenrahmen sehen.

Kunden, die APIs mit detaillierten Aktionen arbeiten, sehen alle Aktionen, unabhängig davon, ob sie redigiert sind oder nicht. Beispiel:

+---------------------+----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Credit Card Number | Phone Number | DetectedEntities | +---------------------+----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 622126741306XXXX | +12#####7890 | {"Credit Card Number":[{"entityType":"CREDIT_CARD","actionUsed":"PARTIAL_REDACT","start":0,"end":16}],"Phone Number":[{"entityType":"PHONE_NUMBER","actionUsed":"PARTIAL_REDACT","start":0,"end":12}]}} | | 6221 2674 1306 XXXX | +12#######7890 | {"Credit Card Number":[{"entityType":"CREDIT_CARD","actionUsed":"PARTIAL_REDACT","start":0,"end":19}],"Phone Number":[{"entityType":"PHONE_NUMBER","actionUsed":"PARTIAL_REDACT","start":0,"end":14}]}} | | 6221-2674-1306-XXXX | 22#######7890 | {"Credit Card Number":[{"entityType":"CREDIT_CARD","actionUsed":"PARTIAL_REDACT","start":0,"end":19}],"Phone Number":[{"entityType":"PHONE_NUMBER","actionUsed":"PARTIAL_REDACT","start":0,"end":14}]}} | +---------------------+----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Wenn Sie die Spalte nicht sehen möchten, können Sie die zusätzliche DetectedEntitiesSpalte einfach in einem benutzerdefinierten Skript löschen.