Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
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 AWS Terkelola PII
AWS Glue Menyediakan dua orang APIs dalam satu AWS Glue ETL pekerjaan. 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 PII tipe AWS terkelola dan jenis entitas kustom. Kolom baru secara otomatis dibuat dengan hasil deteksi. classifyColumns()
APIMengembalikan peta di mana kunci adalah nama kolom dan nilai-nilai daftar jenis entitas terdeteksi. SampleFraction
menunjukkan fraksi data yang akan diambil sampel saat memindai PII entitas sedangkan ThresholdFraction
menunjukkan fraksi data yang harus dipenuhi agar kolom diidentifikasi sebagai PII data.
Deteksi tingkat baris
Dalam contoh, pekerjaan tersebut melakukan tindakan berikut menggunakan detect()
dan classifyColumns()
APIs:
-
membaca data dari Amazon S3 ember dan mengubahnya menjadi dynamicFrame
-
mendeteksi contoh “Email” dan “Kartu Kredit” di dynamicFrame
-
mengembalikan a dynamicFrame dengan nilai asli ditambah satu kolom yang mencakup hasil deteksi untuk setiap baris
-
menulis yang dikembalikan dynamicFrame di Amazon S3 jalan lain
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, pekerjaan tersebut melakukan tindakan berikut menggunakan detect()
APIs:
-
membaca data dari ember 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 nilai bertopeng yang dimodifikasi ditambah satu kolom yang mencakup hasil deteksi untuk setiap baris dynamicFrame
-
menulis yang dikembalikan dynamicFrame di jalur Amazon S3 lainnya
Berbeda dengan hal di atas detect()
API, 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, pekerjaan tersebut melakukan tindakan berikut menggunakan classifyColumns()
APIs:
-
membaca data dari ember 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 “LOW”
-
mengembalikan peta di mana kunci adalah nama kolom dan nilai adalah daftar jenis entitas yang terdeteksi
-
menulis yang dikembalikan dynamicFrame 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. CreateCustomEntityType()
API Contoh berikut mendefinisikan jenis entitas kustom 'EMPLOYEE_ID' 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 EntityDetector()
API:
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 PII deteksi. Custom masking dapat dilakukan setelah DynamicFrame ini dikembalikan dalam AWS Glue script, atau detect () dengan tindakan berbutir halus API 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 "" or "HIGH“, default:" LOW “) Menentukan sensitivitas proses deteksi. Opsi yang valid adalah "LOW" atau "HIGH”. Jika tidak disediakan, sensitivitas default diatur ke "LOW”.
outputColumnName
pengaturan:
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. Ia mengembalikan yang baru DataFrame dengan nilai asli diganti dengan data sensitif bertopeng dan kolom tambahan outputColumnName
yang memiliki metadata PII deteksi.
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
): JSON opsi 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 "" or "HIGH“, default:" LOW “): Menentukan sensitivitas proses deteksi. Opsi yang valid adalah "LOW" atau "HIGH”. Jika tidak disediakan, sensitivitas default diatur ke "LOW”.
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. NaikkanIllegalArgumentException
jika nama kolom yang tidak valid digunakan. -
sourceColumnsToKecualikan — (tipe:
List[String]
) Daftar nama kolom sumber untuk melakukan deteksi pada entitas. Gunakan salah satusourceColumns
atausourceColumnsToExclude
. NaikkanIllegalArgumentException
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— (tipe:
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 denganmatchPattern, tetapi dapat digunakan dengannumRightCharsToExclude
. -
numRightCharsToExclude— (type:
String, integer
) Jumlah karakter yang tepat untuk dikecualikan. Tidak dapat digabungkan denganmatchPattern, tetapi dapat digunakan dengannumRightCharsToExclude
.
-
-
Pengaturan outputColumnName
Lihat outputColumnName pengaturan
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 naskah.
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 PII entitas. -
thresholdFraction— (type:
Double
, default: 10%): Fraksi data yang harus dipenuhi agar kolom dapat diidentifikasi sebagai PII data. -
detectionSensitivity— (type:
String
, options: LOW "" or "HIGH“, default:" LOW “) Menentukan sensitivitas proses deteksi. Opsi yang valid adalah "LOW" atau "HIGH”. Jika tidak disediakan, sensitivitas default diatur ke "LOW”.