Menggunakan Deteksi Data Sensitif di luar AWS Glue Studio - AWS Glue

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan Deteksi Data Sensitif di luar AWS Glue Studio

AWS Glue Studio memungkinkan Anda mendeteksi data sensitif, namun Anda juga dapat menggunakan fungsi Deteksi Data Sensitif di luar AWS Glue Studio.

Untuk daftar lengkap tipe data sensitif terkelola, lihat Tipe data terkelola.

Mendeteksi Deteksi Data Sensitif menggunakan tipe PII AWS Terkelola

AWS Glue menyediakan dua API dalam pekerjaan AWS Glue ETL. Ini adalah detect() danclassifyColumns():

detect(frame: DynamicFrame, entityTypesToDetect: Seq[String], outputColumnName: String = "DetectedEntities", detectionSensitivity: String = "LOW"): DynamicFrame detect(frame: DynamicFrame, detectionParameters: JsonOptions, outputColumnName: String = "DetectedEntities", detectionSensitivity: String = "LOW"): DynamicFrame classifyColumns(frame: DynamicFrame, entityTypesToDetect: Seq[String], sampleFraction: Double = 0.1, thresholdFraction: Double = 0.1, detectionSensitivity: String = "LOW")

Anda dapat menggunakan detect() API untuk mengidentifikasi tipe PII AWS Terkelola dan jenis entitas kustom. Kolom baru secara otomatis dibuat dengan hasil deteksi. classifyColumns()API mengembalikan peta di mana kunci adalah nama kolom dan nilai adalah daftar tipe entitas yang terdeteksi. SampleFractionmenunjukkan fraksi data yang akan diambil sampel saat memindai entitas PII sedangkan ThresholdFraction menunjukkan fraksi data yang harus dipenuhi agar kolom diidentifikasi sebagai data PII.

Deteksi tingkat baris

Dalam contoh, pekerjaan melakukan tindakan berikut menggunakan classifyColumns() API detect() dan:

  • membaca data dari Amazon S3 ember dan mengubahnya menjadi DynamicFrame

  • mendeteksi contoh “Email” dan “Kartu Kredit” di DynamicFrame

  • mengembalikan DynamicFrame dengan nilai asli ditambah satu kolom yang mencakup hasil deteksi untuk setiap baris

  • menulis DynamicFrame yang dikembalikan di jalur lain Amazon S3

import com.amazonaws.services.glue.GlueContext import com.amazonaws.services.glue.MappingSpec import com.amazonaws.services.glue.errors.CallSite import com.amazonaws.services.glue.util.GlueArgParser import com.amazonaws.services.glue.util.Job import com.amazonaws.services.glue.util.JsonOptions import org.apache.spark.SparkContext import scala.collection.JavaConverters._ import com.amazonaws.services.glue.ml.EntityDetector object GlueApp { def main(sysArgs: Array[String]) { val spark: SparkContext = new SparkContext() val glueContext: GlueContext = new GlueContext(spark) val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray) Job.init(args("JOB_NAME"), glueContext, args.asJava) val frame= glueContext.getSourceWithFormat(formatOptions=JsonOptions("""{"quoteChar": "\"", "withHeader": true, "separator": ","}"""), connectionType="s3", format="csv", options=JsonOptions("""{"paths": ["s3://pathToSource"], "recurse": true}"""), transformationContext="AmazonS3_node1650160158526").getDynamicFrame() val frameWithDetectedPII = EntityDetector.detect(frame, Seq("EMAIL", "CREDIT_CARD")) glueContext.getSinkWithFormat(connectionType="s3", options=JsonOptions("""{"path": "s3://pathToOutput/", "partitionKeys": []}"""), transformationContext="someCtx", format="json").writeDynamicFrame(frameWithDetectedPII) Job.commit() } }

Deteksi tingkat baris dengan tindakan berbutir halus

Dalam contoh, tugas melakukan tindakan berikut menggunakan detect() API:

  • membaca data dari bucket Amazon S3 dan mengubahnya menjadi DynamicFrame

  • mendeteksi tipe data sensitif untuk “USA_PTIN”, “BANK_ACCOUNT”, “USA_SSN”, “USA_PASSPORT_NUMBER”, dan “PHONE_NUMBER” di DynamicFrame

  • mengembalikan DynamicFrame dengan nilai bertopeng yang dimodifikasi ditambah satu kolom yang mencakup hasil deteksi untuk setiap baris

  • menulis DynamicFrame yang dikembalikan di jalur Amazon S3 lainnya

Berbeda dengan detect() API di atas, ini menggunakan tindakan berbutir halus untuk dideteksi oleh tipe entitas. Untuk informasi selengkapnya, lihat Parameter deteksi untuk digunakan detect().

import com.amazonaws.services.glue.GlueContext import com.amazonaws.services.glue.MappingSpec import com.amazonaws.services.glue.errors.CallSite import com.amazonaws.services.glue.util.GlueArgParser import com.amazonaws.services.glue.util.Job import com.amazonaws.services.glue.util.JsonOptions import org.apache.spark.SparkContext import scala.collection.JavaConverters._ import com.amazonaws.services.glue.ml.EntityDetector object GlueApp { def main(sysArgs: Array[String]) { val spark: SparkContext = new SparkContext() val glueContext: GlueContext = new GlueContext(spark) val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray) Job.init(args("JOB_NAME"), glueContext, args.asJava) val frame = glueContext.getSourceWithFormat(formatOptions=JsonOptions("""{"quoteChar": "\"", "withHeader": true, "separator": ","}"""), connectionType="s3", format="csv", options=JsonOptions("""{"paths": ["s3://pathToSource"], "recurse": true}"""), transformationContext="AmazonS3_node_source").getDynamicFrame() val detectionParameters = JsonOptions( """ { "USA_DRIVING_LICENSE": [{ "action": "PARTIAL_REDACT", "sourceColumns": ["Driving License"], "actionOptions": { "matchPattern": "[0-9]", "redactChar": "*" } }], "BANK_ACCOUNT": [{ "action": "DETECT", "sourceColumns": ["*"] }], "USA_SSN": [{ "action": "SHA256_HASH", "sourceColumns": ["SSN"] }], "IP_ADDRESS": [{ "action": "REDACT", "sourceColumns": ["IP Address"], "actionOptions": {"redactText": "*****"} }], "PHONE_NUMBER": [{ "action": "PARTIAL_REDACT", "sourceColumns": ["Phone Number"], "actionOptions": { "numLeftCharsToExclude": 1, "numRightCharsToExclude": 0, "redactChar": "*" } }] } """ ) val frameWithDetectedPII = EntityDetector.detect(frame, detectionParameters, "DetectedEntities", "HIGH") glueContext.getSinkWithFormat(connectionType="s3", options=JsonOptions("""{"path": "s3://pathToOutput/", "partitionKeys": []}"""), transformationContext="AmazonS3_node_target", format="json").writeDynamicFrame(frameWithDetectedPII) Job.commit() } }

Deteksi tingkat kolom

Dalam contoh, tugas melakukan tindakan berikut menggunakan classifyColumns() API:

  • membaca data dari bucket Amazon S3 dan mengubahnya menjadi DynamicFrame

  • mendeteksi contoh “Email” dan “Kartu Kredit” di DynamicFrame

  • atur parameter ke sampel 100% kolom, tandai entitas sebagai terdeteksi jika berada di 10% sel, dan memiliki sensitivitas “RENDAH”

  • mengembalikan peta di mana kunci adalah nama kolom dan nilai daftar jenis entitas terdeteksi

  • menulis DynamicFrame yang dikembalikan di jalur Amazon S3 lainnya

import com.amazonaws.services.glue.GlueContext import com.amazonaws.services.glue.MappingSpec import com.amazonaws.services.glue.errors.CallSite import com.amazonaws.services.glue.util.GlueArgParser import com.amazonaws.services.glue.util.Job import com.amazonaws.services.glue.util.JsonOptions import org.apache.spark.SparkContext import scala.collection.JavaConverters._ import com.amazonaws.services.glue.DynamicFrame import com.amazonaws.services.glue.ml.EntityDetector object GlueApp { def main(sysArgs: Array[String]) { val spark: SparkContext = new SparkContext() val glueContext: GlueContext = new GlueContext(spark) val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray) Job.init(args("JOB_NAME"), glueContext, args.asJava) val frame = glueContext.getSourceWithFormat(formatOptions=JsonOptions("""{"quoteChar": "\"", "withHeader": true, "separator": ",", "optimizePerformance": false}"""), connectionType="s3", format="csv", options=JsonOptions("""{"paths": ["s3://pathToSource"], "recurse": true}"""), transformationContext="frame").getDynamicFrame() import glueContext.sparkSession.implicits._ val detectedDataFrame = EntityDetector.classifyColumns( frame, entityTypesToDetect = Seq("CREDIT_CARD", "PHONE_NUMBER"), sampleFraction = 1.0, thresholdFraction = 0.1, detectionSensitivity = "LOW" ) val detectedDF = (detectedDataFrame).toSeq.toDF("columnName", "entityTypes") val DetectSensitiveData_node = DynamicFrame(detectedDF, glueContext) glueContext.getSinkWithFormat(connectionType="s3", options=JsonOptions("""{"path": "s3://pathToOutput", "partitionKeys": []}"""), transformationContext="someCtx", format="json").writeDynamicFrame(DetectSensitiveData_node) Job.commit() } }

Mendeteksi Deteksi Data Sensitif menggunakan tipe AWS CustomEntityType PII

Anda dapat menentukan entitas kustom melalui AWS Studio. Namun, untuk menggunakan fitur ini di luar AWS Studio, Anda harus terlebih dahulu menentukan jenis entitas kustom dan kemudian menambahkan jenis entitas kustom yang ditentukan ke daftarentityTypesToDetect.

Jika Anda memiliki tipe data sensitif tertentu dalam data Anda (seperti 'ID Karyawan'), Anda dapat membuat entitas kustom dengan memanggil API. CreateCustomEntityType() Contoh berikut mendefinisikan jenis entitas kustom 'EMPLOYEE_ID' ke CreateCustomEntityType() API dengan parameter permintaan:

{ "name": "EMPLOYEE_ID", "regexString": "\d{4}-\d{3}", "contextWords": ["employee"] }

Kemudian, ubah pekerjaan untuk menggunakan tipe data sensitif kustom baru dengan menambahkan tipe entitas kustom (EMPLOYEE_ID) ke API: EntityDetector()

import com.amazonaws.services.glue.GlueContext import com.amazonaws.services.glue.MappingSpec import com.amazonaws.services.glue.errors.CallSite import com.amazonaws.services.glue.util.GlueArgParser import com.amazonaws.services.glue.util.Job import com.amazonaws.services.glue.util.JsonOptions import org.apache.spark.SparkContext import scala.collection.JavaConverters._ import com.amazonaws.services.glue.ml.EntityDetector object GlueApp { def main(sysArgs: Array[String]) { val spark: SparkContext = new SparkContext() val glueContext: GlueContext = new GlueContext(spark) val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray) Job.init(args("JOB_NAME"), glueContext, args.asJava) val frame= glueContext.getSourceWithFormat(formatOptions=JsonOptions("""{"quoteChar": "\"", "withHeader": true, "separator": ","}"""), connectionType="s3", format="csv", options=JsonOptions("""{"paths": ["s3://pathToSource"], "recurse": true}"""), transformationContext="AmazonS3_node1650160158526").getDynamicFrame() val frameWithDetectedPII = EntityDetector.detect(frame, Seq("EMAIL", "CREDIT_CARD", "EMPLOYEE_ID")) glueContext.getSinkWithFormat(connectionType="s3", options=JsonOptions("""{"path": "s3://pathToOutput/", "partitionKeys": []}"""), transformationContext="someCtx", format="json").writeDynamicFrame(frameWithDetectedPII) Job.commit() } }
catatan

Jika tipe data sensitif kustom didefinisikan dengan nama yang sama dengan tipe entitas terkelola yang ada, maka tipe data sensitif kustom akan mengambil preseden dan menimpa logika tipe entitas terkelola.

Parameter deteksi untuk digunakan detect()

Metode ini digunakan untuk mendeteksi entitas dalam a DynamicFrame. Ia mengembalikan baru DataFrame dengan nilai asli dan kolom tambahan outputColumnName yang memiliki metadata deteksi PII. Penyamaran khusus dapat dilakukan setelah DynamicFrame ini dikembalikan dalam AWS Glue skrip, atau detect () dengan API tindakan berbutir halus dapat digunakan sebagai gantinya.

detect(frame: DynamicFrame, entityTypesToDetect: Seq[String], outputColumnName: String = "DetectedEntities", detectionSensitivity: String = "LOW"): DynamicFrame

Parameter:

  • frame — (type:DynamicFrame) Input DynamicFrame yang berisi data yang akan diproses.

  • entityTypesToDetect — (type:[Seq[String]) Daftar tipe entitas yang akan dideteksi. Dapat berupa Jenis Entitas Terkelola atau Jenis Entitas Kustom.

  • outputColumnName— (type:String, default: "DetectedEntities“) Nama kolom tempat entitas yang terdeteksi akan disimpan. Jika tidak disediakan, nama kolom default adalah "DetectedEntities”.

  • DetectionSensitivity — (type:String, options: “LOW” atau “HIGH”, default: “LOW”) Menentukan sensitivitas proses deteksi. Opsi yang valid adalah “RENDAH” atau “TINGGI”. Jika tidak disediakan, sensitivitas default diatur ke “RENDAH”.

outputColumnNamepengaturan:

Nama kolom tempat entitas yang terdeteksi akan disimpan. Jika tidak disediakan, nama kolom default adalah "DetectedEntities”. Untuk setiap baris di kolom keluaran, kolom tambahan menyertakan peta nama kolom ke metadata entitas yang terdeteksi dengan pasangan nilai kunci berikut:

  • EntityType - Jenis entitas yang terdeteksi.

  • start — Posisi awal entitas yang terdeteksi dalam data asli.

  • akhir — Posisi akhir dari entitas yang terdeteksi dalam data asli.

  • ActionUsed — Tindakan yang dilakukan pada entitas yang terdeteksi (misalnya, “DETECT,” “REDACT,” “PARTIAL_REDACT,” “SHA256_HASH”).

Contoh:

{ "DetectedEntities":{ "SSN Col":[ { "entityType":"USA_SSN", "actionUsed":"DETECT", "start":4, "end":15 } ], "Random Data col":[ { "entityType":"BANK_ACCOUNT", "actionUsed":"PARTIAL_REDACT", "start":4, "end":13 }, { "entityType":"IP_ADDRESS", "actionUsed":"REDACT", "start":4, "end":13 } ] } }

Parameter Deteksi untuk detect() dengan tindakan berbutir halus

Metode ini digunakan untuk mendeteksi entitas dalam DynamicFrame menggunakan parameter tertentu. Ini mengembalikan yang baru DataFrame dengan nilai asli diganti dengan data sensitif bertopeng dan kolom tambahan outputColumnName yang memiliki metadata deteksi PII.

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

Parameter:

  • frame — (type:DynamicFrame): Input DynamicFrame yang berisi data yang akan diproses.

  • DetectionParameters — (type:JsonOptions): Opsi JSON yang menentukan parameter untuk proses deteksi.

  • outputColumnName— (type:String, default: "DetectedEntities“): Nama kolom tempat entitas yang terdeteksi akan disimpan. Jika tidak disediakan, nama kolom default adalah "DetectedEntities”.

  • DetectionSensitivity — (type:String, options: “LOW” atau “HIGH”, default: “LOW”): Menentukan sensitivitas proses deteksi. Opsi yang valid adalah “RENDAH” atau “TINGGI”. Jika tidak disediakan, sensitivitas default diatur ke “RENDAH”.

Pengaturan detectionParameters

Jika tidak ada pengaturan yang disertakan, nilai default akan digunakan.

  • action — (type:String, options: “DETECT”, “REDACT”, “PARTIAL_REDACT”, “SHA256_HASH”) Menentukan tindakan yang akan dilakukan pada entitas. Wajib. Perhatikan bahwa tindakan yang melakukan masking (semua kecuali “DETECT”) hanya dapat melakukan satu tindakan per kolom. Ini adalah tindakan pencegahan untuk menutupi entitas yang bersatu.

  • SourceColumns — (type:List[String], default: [“*”]) Daftar nama kolom sumber untuk melakukan deteksi pada entitas. Default ke [“*”] jika tidak ada. Naikkan IllegalArgumentException jika nama kolom yang tidak valid digunakan.

  • sourceColumnsToKecualikan — (tipe:List[String]) Daftar nama kolom sumber untuk melakukan deteksi pada entitas. Gunakan salah satu sourceColumns atausourceColumnsToExclude. Naikkan IllegalArgumentException jika nama kolom yang tidak valid digunakan.

  • ActionOptions - Opsi tambahan berdasarkan tindakan yang ditentukan:

    • Untuk “DETECT” dan “SHA256_HASH”, tidak ada opsi yang diizinkan.

    • Untuk “REDACT”:

      • RedactText — (type:String, default: “*****”) Teks untuk menggantikan entitas yang terdeteksi.

    • Untuk “PARTIAL_REDACT”:

      • RedactChar — (type:String, default: “*”) Karakter untuk menggantikan setiap karakter yang terdeteksi dalam entitas.

      • MatchPattern — (type:String) Pola Regex untuk redaksi parsi. Tidak dapat digabungkan dengan numLeftChars ToExclude ataunumRightCharsToExclude.

      • numLeftCharsToExclude— (type:String, integer) Jumlah karakter kiri untuk dikecualikan. Tidak dapat digabungkan dengan MatchPattern, tetapi dapat digunakan dengan. numRightCharsToExclude

      • numRightCharsToExclude— (type:String, integer) Jumlah karakter yang tepat untuk dikecualikan. Tidak dapat digabungkan dengan MatchPattern, tetapi dapat digunakan dengan. numRightCharsToExclude

Pengaturan outputColumnName

Lihat outputColumnName setelan

Parameter Deteksi untuk classifyColumns()

Metode ini digunakan untuk mendeteksi entitas dalam a DynamicFrame. Ia mengembalikan peta di mana kunci adalah nama kolom dan nilai-nilai daftar jenis entitas terdeteksi. Custom masking dapat dilakukan setelah ini dikembalikan dalam AWS Glue script.

classifyColumns(frame: DynamicFrame, entityTypesToDetect: Seq[String], sampleFraction: Double = 0.1, thresholdFraction: Double = 0.1, detectionSensitivity: String = "LOW")

Parameter:

  • frame — (type:DynamicFrame) Input DynamicFrame yang berisi data yang akan diproses.

  • entityTypesToDetect — (type:Seq[String]) Daftar tipe entitas yang akan dideteksi. Dapat berupa Jenis Entitas Terkelola atau Jenis Entitas Kustom.

  • SampleFraction — (type:Double, default: 10%) Fraksi data yang akan diambil sampel saat memindai entitas PII.

  • ThresholdFraction — (type:Double, default: 10%): Fraksi data yang harus dipenuhi agar kolom dapat diidentifikasi sebagai data PII.

  • DetectionSensitivity — (type:String, options: “LOW” atau “HIGH”, default: “LOW”) Menentukan sensitivitas proses deteksi. Opsi yang valid adalah “RENDAH” atau “TINGGI”. Jika tidak disediakan, sensitivitas default diatur ke “RENDAH”.