AWS Glue Studio 외부에서 민감한 데이터 감지 사용
AWS Glue Studio는 민감한 데이터 감지를 허용하지만 AWS Glue Studio 외부에서 민감한 데이터 감지 기능을 사용할 수도 있습니다.
AWS 관리형 PII 유형을 사용한 민감한 데이터 감지 탐지
AWS Glue에서는 AWS Glue ETL 작업에서 2개의 API를 제공합니다. 이러한 항목은 detect()
및 classifyColumns()
입니다.
detect(frame: DynamicFrame, entityTypesToDetect: Seq[String], outputColumnName: String = "DetectedEntities"): DynamicFrame classifyColumns(frame: DynamicFrame, entityTypesToDetect: Seq[String], sampleFraction: Double = 0.1, thresholdFraction: Double = 0.1)
detect()
API를 사용하여 AWS 관리형 PII 유형 및 사용자 지정 엔터티 유형을 식별할 수 있습니다. 새로운 열이 감지 결과와 함께 자동 생성됩니다. classifyColumns()
API는 키가 열 이름이고 값이 감지된 엔터티 유형 목록인 맵을 반환합니다. SampleFraction
은 PII 엔터티를 검색할 때 샘플링할 데이터의 비율을 나타내는 반면, ThresholdFraction
은 열이 PII 데이터로 식별되기 위해 충족되어야 하는 데이터의 비율을 나타냅니다.
이 예제에서는 작업이 detect()
및classifyColumns()
API를 사용하여 다음 작업을 수행합니다.
-
Amazon S3 버킷에서 데이터를 읽고 이를 DynamicFrame으로 변환
-
DynamicFrame에서 '이메일' 및 '신용 카드' 인스턴스 검색
-
원래 값과 각 행에 대한 감지 결과를 포함하는 하나의 열이 포함된 DynamicFrame 반환
-
반환된 DynamicFrame을 다른 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() } }
관리형 민감한 데이터 유형
글로벌 엔티티
데이터 형식 | 설명 |
---|---|
PERSON_NAME | 해당 사용자의 이름 |
이메일 주소 |
|
IP_ADDRESS |
IP 주소 |
MAC_ADDRESS |
MAC 주소 |
미국 데이터 유형
데이터 형식 | 설명 |
---|---|
USA_SSN |
사회보장번호(미국인의 경우) |
USA_ITIN |
ITIN(미국 개인 또는 법인의 경우) |
USA_PASSPORT_NUMBER |
여권 번호(미국인의 경우) |
PHONE_NUMBER | 전화번호 특정 국가나 지역에 국한되지 않으나 현재 미국 및 캐나다 전화번호만 검색됩니다. |
BANK_ACCOUNT |
은행 계좌 번호. 특정 국가나 지역에 국한되지 않으나 미국 및 캐나다 계정 포맷만 검색됩니다. |
USA_CPT_CODE |
CPT 코드(미국만 해당) |
USA_HCPCS_CODE |
HCPCS 코드(미국만 해당) |
USA_NATIONAL_DRUG_CODE |
NDC 코드(미국만 해당) |
USA_MEDICARE_BENEFICIARY_IDENTIFIER |
메디케어 수혜자 식별자(미국만 해당) |
USA_HEALTH_INSURANCE_CLAIM_NUMBER |
건강 보험 청구 번호(미국만 해당) |
CREDIT_CARD |
신용 카드 번호 |
USA_NATIONAL_PROVIDER_IDENTIFIER |
국가 공급자 식별 번호(미국만 해당) |
USA_DEA_NUMBER |
DEA 번호(미국만 해당) |
USA_DRIVING_LICENSE |
운전면허증 번호(미국만 해당) |
일본 데이터 유형
데이터 형식 | 설명 |
---|---|
JAPAN_BANK_ACCOUNT | 은행 계좌 번호(일본만 해당) |
JAPAN_DRIVING_LICENSE |
운전면허증 번호(일본만 해당) |
JAPAN_MY_NUMBER |
조세 행정, 사회 보장 행정 및 재해 대응을 위해 사용하는 일본 시민 또는 법인의 고유 식별자 |
JAPAN_PASSPORT_NUMBER |
여권 번호(일본만 해당) |
영국 데이터 유형
데이터 형식 | 설명 |
---|---|
UK_BANK_ACCOUNT | 은행 계좌 번호(영국만 해당) |
UK_BANK_SORT_CODE | 정렬 코드는 해당 통관 기관을 통해 각 국가 안의 은행 간에 송금을 라우팅하기 위해 사용하는 은행 코드입니다. |
UK_DRIVING_LICENSE |
영국 및 북아일랜드의 운전 면허증 번호(영국만 해당) |
UK_ELECTORAL_ROLL_NUMBER |
선거인단 번호(ERN)는 영국 선거 등록을 위해 개인에게 발급하는 식별 번호입니다. 이 번호의 형식은 영국 내각 사무처의 영국 정부 표준에 명시되어 있습니다. |
UK_NATIONAL_HEALTH_SERVICE_NUMBER |
국민 보건 서비스(NHS) 번호는 영국의 등록된 공중 보건 서비스 사용자에게 할당하는 고유 번호입니다. |
UK_NATIONAL_INSURANCE_NUMBER |
국민 보험 번호(NINO)는 영국(UK)에서 국민 보험 프로그램 또는 사회 보장 제도를 위해 개인을 식별하는 데 사용하는 번호입니다. 일부 경우에 NI No 또는 NINO라고도 합니다. |
UK_PASSPORT_NUMBER |
여권 번호(영국만 해당) |
UK_UNIQUE_TAXPAYER_REFERENCE_NUMBER |
영국(UK) 고유 납세자 참조(UTR) 번호. 영국 정부가 과세 제도를 관리하기 위해 사용하는 식별자 |
UK_VALUE_ADDED_TAX |
VAT는 최종 소비자가 부담하는 소비세입니다. VAT는 제조 및 유통 과정에서 이뤄지는 각 거래에 대해 지불합니다. 영국의 경우 VAT 번호는 사업체가 설립된 지역의 VAT 사무소에서 발급합니다. |
UK_PHONE_NUMBER |
전화번호(영국만 해당) |
AWS CustomEntityType PII 유형을 사용한 민감한 데이터 감지 탐지
AWS Studio를 통해 사용자 지정 엔터티를 정의할 수 있습니다. 하지만 AWS Studio에서 이 기능을 사용하기 위해서는 먼저 사용자 지정 엔터티 유형을 정의한 다음 정의된 사용자 지정 엔터티 유형을 entityTypesToDetect
목록에 추가해야 합니다.
데이터에 특정 민감한 데이터 유형(예: '직원 ID')이 있는 경우에는 CreateCustomEntityType()
API를 호출하여 사용자 지정 엔터티를 만들 수 있습니다. 다음 예제에서는 요청 파라미터를 사용하여 CreateCustomEntityType()
API에 사용자 지정 엔터티 유형 'EMPLOYE_ID'를 정의합니다.
{ "name": "EMPLOYEE_ID", "regexString": "\d{4}-\d{3}", "contextWords": ["employee"] }
그리고 나서 EntityDetector()
API에 사용자 지정 엔터티 유형(EMPLOYEE_ID)을 추가하여 새로운 사용자 지정 민감한 데이터 유형을 사용하도록 작업을 수정합니다.
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() } }
사용자 지정 민감한 데이터 유형이 기존 관리형 엔터티 유형과 동일한 이름을 사용하여 정의된 경우 사용자 지정 민감한 데이터 유형이 우선 적용되고 관리형 엔터티 유형의 논리를 덮어씁니다.