AWS 기반의 데이터 PII 처리

Dongkyu Ko
딜리버스
Published in
8 min readMar 16, 2023

AWS 기반으로 PII(개인 식별 정보, Personal Identifiable Information) 처리된 데이터를 생성하고 각 계정에 공유하는 방법에 대해 설명한 글입니다. PII 처리 구조를 보여주고 각 구조에 대해 설명하는게 주된 내용입니다.

PII (개인 식별 정보,Personal Identifiable Information)란?

PII 처리 프로세스

1.스케줄 또는 트리거

  • 편의를 위해 다양한 형태의 트리거 제공

2.Dump DB(Database) 생성 — ELT (Extract, Load, Transform) 방식 사용

  • Production 계정 DB 기반으로 스냅샷 생성
  • AWS DMS, Glue 등을 사용한 ETL(Extract, Transform, Load) 방식을 사용하지 않음
  • DMS는 탄력적인 변환(Transform)을 하려면 다양한 리소스(Kinesis, Lambda)를 활용해야하고 Glue는 테이블 단위로 관리하기 때문에 데이터 엔지니어링 업무만 전담하는 인원이 없는 소규모의 팀(10인)이 유지 보수 하는데 많은 리소스가 필요
  • ELT의 경우 중요 데이터를 먼저 적재하기 때문에 보안 위험이 있지만 해당 프로세스는 Production 계정 내에서 처리하기 때문에 외부에 중요 데이터가 노출 될 일이 없음
  • DMS, Glue를 사용하면 단순 테이블 생성을 제외한 기존 데이터베이스 시스템 카탈로그(인덱스, 접근 권한 등)를 이전과 동일하게 사용할 수 없음 → 해당 작업을 하는 목적 중 하나가 테스트 서버에서 사용하기 위함
  • ELT 방식을 채택한 이유 — 개발 기간이 ETL 개발 기간보다 상대적으로 빠르고, 유지 보수 비용이 낮기 때문
  • 참고 자료 — ETL vs ELT

3.PII 처리

  • 약 30개의 테이블과 90개의 컬럼 처리
  • DML(Data Manipulation Language)을 사용해서 처리

4.스냅샷 생성 — PII 처리된 DB

  • 공유하기 쉬운 형태로 만들기 위해 스냅샷 생성

5.Dump DB 삭제

  • PII 처리를 위해 생성했던 DB 삭제
  • Dump DB를 생성 AWS CloudFormation 삭제

6.스냅샷 공유

  • RDS 스냅샷 공유를 사용해 필요한 계정에 공유

Architecture

RDS 이벤트를 제외한 모든 이벤트는 EventBridge를 사용해서 관리 (Daas는 이벤트 기반으로 알람 메세지를 운영 중)

1.Trigger

2.Dump RDS

  • Production DB 검색 후 스냅샷 생성
  • AWS CDK, boto3를 사용해서 구축
  • AWS CDK는 IaC(Infrastructure as Code)이기 때문에 인프라를 관리하고 프로비저닝하는데 효율적이지만 기존 인프라 정보 검색에는 코드 복잡도 증가 방지와 사전 정보를 제공해야해서 boto3를 사용

3.RDS-Events-Handler

  • Amazon RDS(Relational Database Service) 상태에 따른 변화에 대해 이벤트 형태로 제공하는 “RDS 이벤트 모니터링”의 이벤트 데이터를 기반으로 실행
Amazon RDS 이벤트 예시
{
"Records": [
{
"EventSource": "aws:sns",
"EventVersion": "1.0",
"EventSubscriptionArn": "arn:aws:sns:ap-northeast-2:topic:f12",
"Sns": {
"Type": "Notification",
"MessageId": "582f945e-43da-5a48-aa0f-c8d8cbe1ea8c",
"TopicArn": "arn:aws:sns:ap-northeast-2:54542124545:topic",
"Subject": "RDS Notification Message",
"Message":
{
"EventSource": "db-cluster",
"Event Time":"2023-03-11 13:45:30.232",
"Identifier Link":"https://console.aws.amazon.com/rds/home?region=ap-northeast-2",
"Source ID":"dump-cluster",
"Source ARN":"arn:aws:rds:ap-northeast-2:54542124545:cluster:dump-cluster",
"Event ID":"http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.Messages.html#RDS-EVENT-0170",
"Event Message":"DB cluster created"
},
"TimeStamp": "2023-03-11T13:45:31.431Z",
"SignatureVersion": "1",
"Signature": "----",
"SigningCertUrl": "https://sns.ap-northeast-2.amazonaws.com/SimpleNotificationService",
"UnsubscribeUrl": "https://sns.ap-northeast-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn",
"MessageAttributes":
{
"Resource":
{
"Type": "String",
"Value": "arn:aws:rds:ap-northeast-2:54542124545:cluster-snapshot:snapshot-230216"
},
"EventID": {
"Type": "String",
"Value": "RDS-EVENT-0075"
}
}
}
}
]
}

4.PII Processing

  • PII 처리 데이터 선정 기준은 Amazon Macie로 1차 검증(DMS로 RDS → S3 이동 후 Amazon Macie로 검증) 후 보안 관리자가 2차 검증 후 선정
  • SQL DML 중 하나인 UPDATE를 사용해서 데이터 PII 처리
  • PII 처리할 컬럼 중 Unique key가 설정되어 있다면 Unique key 설정 변경 후 작업
  • UPDATE 예시
# MySQL 5.x
UPDATE {table}
SET {column} = CONCAT(
CONCAT(
LEFT({column}, {index}),
LPAD("*", CHAR_LENGTH({column})-{index}, "*")
)
);

# MySQL 8.x
UPDATE {table}
SET {column} = REGEXP_REPLACE({column}, '(?<=.{index}).', '*')
);

5.RDS-Events-Handler

  • 3번(Architecture)과 동일

6.Send Slack

  • Daas에서 공통적으로 사용하는 Lambda
  • 메세지 템플릿과 채널 정보만 받아서 슬랙 메세지 발송

결론

  1. 총 작업 시간은 30~45분 정도가 소요되며, Amazon RDS의 생성 시간이 작업 시간에 많은 영향을 줌
  2. ELT 방식을 사용해서 개발 기간과 유지 보수에 사용하는 리소스를 줄일 수 있음
  3. 스냅샷 기반으로 RDS를 생성하기 때문에 시스템 카탈로그 정보가 동일 (DMS, Glue 등 다양한 ETL 서비스를 사용하면 시스템 카탈로그 정보를 동일하게 가져올 수 없음)
  4. 지속적으로 유지 보수(테이블 추가, 이벤트 수정 등)가 필요한건 2개의 Lambda (RDS-Events-Handler, PII Processing), 나머지 리소스는 변동 사항이 생길 확률이 낮음
  5. 스냅샷 공유 기능을 사용해 여러개의 계정과 편리하게 공유 가능, 추가 작업 필요 없음
  6. ELT 방식을 사용했기 때문에 Data Warehouse, Data Lake를 구축하는데 해당 구조를 참조해서 사용할 수 없음 (보안 위험 방지), 테스트 환경에서 사용하는데 적합

--

--