EMR Security configuration 기본개념

2021-07-24

.

Data_Engineerting_TIL(20210724)

  • S3 encryption

1) EMR의 EMRFS를 통해서 read&write할 경우 데이터 암호화가 적용되는 개념

2) Enable at-rest encryption for EMRFS data in Amazon S3 버튼을 체크한 다음에 Default encryption mode를 선택하면 설정할 수 있음

옵션에서 SSE는 Server side encryption을 말하고, CSE는 Client side encryption을 의미함

다시말해서 SSE의 encrypt 및 decrypt 주체는 S3이고, CSE의 encrypt 및 decrypt 주체는 EMRFS Client임

SSE-S3 옵션은 AWS s3-managed encryption key를 사용하여 서버단에서 암호화를 수행함. s3에서 key를 관리하기 때문에 key 관리의 부담이 없고, KMS 비용을 절감할 수 있는 장점이 있음

SSE-KMS 옵션은 사용자가 지정한 KMS key를 이용하여 서버단에서 암호화를 수행함. KMS key는 반드시 EMR cluster와 동일한 region에 있어야 함. EMR cluster의 EC2 profile에는 지정한 KMS key에 대한 접근권한(kms:Decrypt, kms:GenerateDataKey)이 있어야함

CSE-KMS 옵션은 사용자가 지정한 KMS key를 이용하여 클라이언트 단에서 암호화를 수행함. EMR cluster의 EC2 instance profile에는 지정한 KMS key에 대한 접근권한(kms:Decrypt, kms:GenerateDataKey)이 있어야 함

CSE-Custom은 KMS를 이용하지 않고 custom java class를 Client-side master key로 사용함.

  • Local disk encryption

1) AWS KMS key를 사용하는 경우 EBS encryption 또는 LUKS encryption 중 하나를 선택할 수 있음

EBS encryption는 EBS volume에서 encryption를 수행하고, LUKS encryption의 경우 Filesystem에서 encryption를 수행함

2) Instance store의 경우 EBS volume이 아니기 때문에 어떤 옵션을 선택하더라도 LUKS encryption을 이용하여 암호화가 수행됨

3) 만약에 EC2 차원에서 EBS encryption을 default로 수행하도록 설정했고, EMR Security configuration에서 EBS encryption를 선택한 경우에는 EMR에서 설정한게 더 우선함

예를 들어서 EC2 default setting에는 “A” key로 encryption 되어 있고, EMR cluster 생성 시 EBS 볼륨은 ‘B’ key로 encryption 되는 구조임

4) LUKS encryption의 경우 root volume은 암호화되지 않음

$ lsblk
NAME       MAJ:MIN       RM       SIZE     RO     TYPE     MOUNTPOINT
name0n1    259:2         0        10G      0      disk
|-name0n1p1 259:5        0        10G      0      part         /            # 이거 root volume은 암호화 되어 있지 않음
`-name0n1p1 259:6        0         1M      0      part
name2n1     259:1        0        32G      0      disk
`-name2n1   253:2        0        32G      0      crypt        /mnt1        # 이거는 암호화 되어 있음 (crypt)
nvme1n1     259:0        0        32G      0      disk
|-nvme1n1p2 259:4        0        27G      0      part
| `-nvme1n1p2 253:1      0        27G      0      crypt        /mnt         # 이거는 함호화 되어 있음 (crypt)
`-nvme1n1p1 259:3        0         5G      0      part
 `-nvme1n1p1 253:0       0         5G      0      crypt        /emr         # 이거는 함호화 되어 있음 (crypt)
  • Data in transit encryption

1) 해당 기능을 enable하는 경우 특정 어플리케이션들에 대해 TLS encryption을 지원함

2) Enable in-transit encryption 버튼을 체크하고 어떤 PEM 키를 사용할지 설정하면 됨

  • 관련 아키텍처 참고자료

https://github.com/minman2115/Data_engineering_studynotes_2021/blob/master/EMR%20Security%20configuration%20%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90/EMR%20security%20config%20%EC%A0%81%EC%9A%A9%20%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98.zip