AWS Glue Studio 외부에서 민감한 데이터 감지 사용 - AWS Glue

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 해당 사용자의 이름
EMAIL

이메일 주소

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() } }
참고

사용자 지정 민감한 데이터 유형이 기존 관리형 엔터티 유형과 동일한 이름을 사용하여 정의된 경우 사용자 지정 민감한 데이터 유형이 우선 적용되고 관리형 엔터티 유형의 논리를 덮어씁니다.