EMR Security configuration 기본개념
.
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