기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon EMR에서 HDFS의 투명한 암호화
투명한 암호화는 사용자가 정의하는 HDFS 경로인 HDFS 암호화 영역의 사용을 통해 구현됩니다. 각 암호화 영역에는 고유의 키가 있으며, 이 키는 hdfs-site
구성 분류를 사용하여 지정된 키 서버에 저장됩니다.
Amazon EMR 릴리스 버전 4.8.0부터 Amazon EMR 보안 구성을 사용하여 클러스터의 데이터 암호화 설정을 더욱 쉽게 구성할 수 있습니다. 보안 구성은 Amazon S3의 EMRFS 데이터 및 Amazon Elastic Block Store(Amazon EBS) 스토리지 볼륨의 전송 중 데이터와 저장 데이터에 대한 보안을 활성화하는 설정을 제공합니다. 자세한 내용은 Amazon EMR 관리 안내서에서 전송 중 데이터 및 저장 데이터 암호화를 참조하세요.
Amazon EMR은 기본적으로 Hadoop KMS를 사용하지만, KeyProvider API 작업을 구현하는 다른 KMS를 사용할 수 있습니다. HDFS 암호화 영역의 각 파일에는 고유의 데이터 암호화 키가 있으며 이 키는 암호와 영역 키를 사용하여 암호화됩니다. 암호화 및 암호 해독 활동은 클라이언트에서만 수행되므로 데이터를 암호화 영역에 쓸 때 HDFS 데이터가 종단 간(미사용 데이터 및 전송 중 데이터)으로 암호화됩니다.
암호화 영역 간에 또는 암호화 영역에서 암호화되지 않은 경로로 파일을 이동할 수 없습니다.
NameNode와 HDFS 클라이언트는 KeyProvider API 작업을 통해 하둡 KMS(또는 사용자가 구성한 대체 KMS)와 상호 작용합니다. KMS는 지원 키 스토어에 암호화 키를 저장하는 작업을 담당합니다. 또한 Amazon EMR에는 JCE 무제한 강도 정책이 포함되므로, 원하는 길이로 키를 생성할 수 있습니다.
자세한 내용은 Hadoop 설명서에서 Transparent encryption in HDFS
참고
Amazon EMR에서 Hadoop KMS를 사용할 경우 HTTPS를 통한 KMS는 기본적으로 활성화되지 않습니다. HTTPS를 통한 KMS를 활성화하는 방법에 대한 자세한 내용은 하둡 KMS 설명서
HDFS 투명한 암호화 구성
키를 생성하고 암호화 영역을 추가하여 Amazon EMR에서 투명한 암호화를 구성할 수 있습니다. 여러 가지 방법으로 이 작업을 수행할 수 있습니다.
-
클러스터를 생성할 때 Amazon EMR 구성 API 작업 사용
-
command-runner.jar과 함께 하둡 JAR 단계 사용
-
하둡 클러스터의 마스터 노드에 로그인하여
hadoop key
및hdfs crypto
명령줄 클라이언트 사용 -
하둡 KMS 및 HDFS에 REST API 사용
REST API에 대한 자세한 내용은 하둡 KMS 및 HDFS의 각 설명서를 참조하십시오.
CLI를 사용하여 클러스터 생성 시 암호화 영역과 해당 키를 생성하려면
구성 API 작업의 hdfs-encryption-zones
분류를 통해 클러스터를 생성할 때 키 이름과 암호화 영역을 지정할 수 있습니다. Amazon EMR은 클러스터의 Hadoop KMS에서 이 키를 생성하고 암호화 영역을 구성합니다.
-
다음 명령을 사용하여 클러스터를 생성합니다.
aws emr create-cluster --release-label
emr-7.7.0
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json참고
가독성을 위해 Linux 줄 연속 문자(\)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.
myConfig.json
:[ { "Classification": "hdfs-encryption-zones", "Properties": { "/myHDFSPath1": "path1_key", "/myHDFSPath2": "path2_key" } } ]
마스터 노드에서 암호화 영역과 해당 키를 수동으로 생성하려면
-
4.1.0 이상의 Amazon EMR 릴리스를 사용하여 클러스터를 시작합니다.
-
SSH를 사용하여 클러스터의 프라이머리 노드에 연결합니다.
-
하둡 KMS 내에서 키를 생성합니다.
$ hadoop key create path2_key path2_key has been successfully created with options Options{cipher='AES/CTR/NoPadding', bitLength=256, description='null', attributes=null}. KMSClientProvider[http://ip-x-x-x-x.ec2.internal:16000/kms/v1/] has been updated.
중요
하둡 KMS에서는 키 이름이 소문자여야 합니다. 대문자가 있는 키를 사용하면 클러스터가 시작 중 실패합니다.
-
HDFS에서 암호화 영역 경로를 생성합니다.
$ hadoop fs -mkdir /myHDFSPath2
-
생성한 키를 사용하여 HDFS 경로를 암호화 영역으로 만듭니다.
$ hdfs crypto -createZone -keyName path2_key -path /myHDFSPath2 Added encryption zone /myHDFSPath2
를 사용하여 암호화 영역 및 해당 키를 수동으로 생성하려면 AWS CLI
-
다음 명령을 사용하여 KMS 키와 암호화 영역을 수동으로 생성하는 단계를 추가합니다.
aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=CUSTOM_JAR,Name="Create First Hadoop KMS Key",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop key create path1_key\""] \ Type=CUSTOM_JAR,Name="Create First Hadoop HDFS Path",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop fs -mkdir /myHDFSPath1\""] \ Type=CUSTOM_JAR,Name="Create First Encryption Zone",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hdfs crypto -createZone -keyName path1_key -path /myHDFSPath1\""] \ Type=CUSTOM_JAR,Name="Create Second Hadoop KMS Key",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop key create path2_key\""] \ Type=CUSTOM_JAR,Name="Create Second Hadoop HDFS Path",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop fs -mkdir /myHDFSPath2\""] \ Type=CUSTOM_JAR,Name="Create Second Encryption Zone",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hdfs crypto -createZone -keyName path2_key -path /myHDFSPath2\""]
참고
가독성을 위해 Linux 줄 연속 문자(\)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.
HDFS 투명한 암호화에 대한 고려 사항
모범 사례는 파일을 작성할 수 있는 각 애플리케이션에 대해 암호화 영역을 생성하는 것입니다. 또한 구성 API에서 hdfs-encryption-zones 분류를 사용하여 모든 HDFS를 암호화하고 루트 경로(/)를 암호화 영역으로 지정할 수 있습니다.
Hadoop 키 관리 서버
하둡 KMS
하둡 KMS를 구성하려면 hadoop-kms-site 분류를 사용하여 설정을 변경합니다. ACL을 구성하려면 kms-acls 분류를 사용합니다.
자세한 내용은 하둡 KMS 설명서
참고
Amazon EMR에서 Hadoop KMS를 사용할 경우 HTTPS를 통한 KMS는 기본적으로 활성화되지 않습니다. HTTPS를 통한 KMS를 활성화하는 방법을 알아보려면 하둡 KMS 설명서
중요
하둡 KMS에서는 키 이름이 소문자여야 합니다. 대문자가 있는 키를 사용하면 클러스터가 시작 중 실패합니다.
Amazon EMR에서 Hadoop KMS 구성
Amazon EMR 릴리스 버전 4.6.0 이상을 사용할 경우 kms-http-port
는 9700이며 kms-admin-port
는 9701입니다.
Amazon EMR 릴리스에 대한 구성 API를 사용하여 클러스터 생성 시 Hadoop KMS를 구성할 수 있습니다. 다음은 하둡 KMS에 사용할 수 있는 구성 객체 분류입니다.
분류 | 파일 이름 |
---|---|
hadoop-kms-site | kms-site.xml |
hadoop-kms-acls | kms-acls.xml |
hadoop-kms-env | kms-env.sh |
hadoop-kms-log4j | kms-log4j.properties |
CLI를 사용하여 하둡 KMS ACL를 설정하려면
-
다음 명령을 사용하여 ACL이 포함된 하둡 KMS에 클러스터를 생성합니다.
aws emr create-cluster --release-label
emr-7.7.0
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json참고
가독성을 위해 Linux 줄 연속 문자(\)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.
myConfig.json
:[ { "Classification": "hadoop-kms-acls", "Properties": { "hadoop.kms.blacklist.CREATE": "hdfs,foo,myBannedUser", "hadoop.kms.acl.ROLLOVER": "myAllowedUser" } } ]
CLI를 사용하여 하둡 KMS를 비활성화하려면
-
다음 명령을 사용하여 하둡 KMS
hadoop.kms.cache.enable
이false
로 설정된 클러스터를 생성합니다.aws emr create-cluster --release-label
emr-7.7.0
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json참고
가독성을 위해 Linux 줄 연속 문자(\)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.
myConfig.json
:[ { "Classification": "hadoop-kms-site", "Properties": { "hadoop.kms.cache.enable": "false" } } ]
CLI를 사용하여 kms-env.sh
스크립트에서 환경 변수를 설정하려면
-
kms-env.sh
에서hadoop-kms-env
구성을 통해 설정을 변경합니다. 다음 명령을 사용하여 하둡 KMS가 포함된 클러스터를 생성합니다.aws emr create-cluster --release-label
emr-7.7.0
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json참고
가독성을 위해 Linux 줄 연속 문자(\)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.
myConfig.json
:[ { "Classification": "hadoop-kms-env", "Properties": { }, "Configurations": [ { "Classification": "export", "Properties": { "JAVA_LIBRARY_PATH": "
/path/to/files
", "KMS_SSL_KEYSTORE_FILE": "/non/Default/Path/
.keystore", "KMS_SSL_KEYSTORE_PASS": "myPass
" }, "Configurations": [ ] } ] } ]
하둡 KMS 구성에 대한 자세한 내용은 하둡 KMS 설명서
여러 프라이머리 노드가 있는 EMR 클러스터에서 HDFS의 투명한 암호화
Apache Ranger
Apache Ranger KMS는 여러 프라이머리 노드가 있는 Amazon EMR 클러스터의 루트 키와 암호화 영역(EZ) 키를 Amazon RDS에 저장합니다. 여러 프라이머리가 있는 Amazon EMR 클러스터에서 HDFS의 투명한 암호화를 활성화하려면 다음 구성을 제공해야 합니다.
-
Ranger KMS 루트 키 및 EZ 키를 저장하기 위한 Amazon RDS 또는 자체 MySQL 서버 연결 URL
-
MySQL의 사용자 이름 및 암호
-
Ranger KMS 루트 키의 암호
-
MySQL 서버에 대한 SSL 연결 시 사용할 인증 기관(CA) PEM 파일. Amazon RDS용 인증서 번들 다운로드 AWS 리전 에서 용 인증서 번들을 다운로드할 수 있습니다. https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesDownload
다음 예제에서 보여주듯이 ranger-kms-dbks-site
분류 및 ranger-kms-db-ca
분류를 사용하여 이러한 구성을 제공할 수 있습니다.
[{ "Classification": "ranger-kms-dbks-site", "Properties": { "ranger.ks.jpa.jdbc.url": "
jdbc:log4jdbc:mysql://mysql-host-url.xx-xxx-1.xxx.amazonaws.com:3306/rangerkms
", "ranger.ks.jpa.jdbc.user": "mysql-user-name
", "ranger.ks.jpa.jdbc.password": "mysql-password
", "ranger.db.encrypt.key.password": "password-for-encrypting-a-master-key
" } }, { "Classification": "ranger-kms-db-ca", "Properties": { "ranger.kms.trust.ca.file.s3.url": "<S3-path-of-downloaded-pem-file>" } } ]]
다음은 Apache Ranger KMS를 위한 구성 객체 분류입니다.
분류 | 설명 |
---|---|
ranger-kms-dbks-site | Ranger KMS에서 dbks-site.xml 파일의 값을 변경합니다. |
ranger-kms-site | Ranger KMS에서 ranger-kms-site.xml 파일의 값을 변경합니다. |
ranger-kms-env | Ranger KMS 환경의 값을 변경합니다. |
ranger-kms-log4j | Ranger KM에서 kms-log4j.properties 파일의 값을 변경합니다. |
ranger-kms-db-ca | Ranger KMS와의 MySQL SSL 연결에서 CA 파일의 값을 변경합니다. |
고려 사항
-
보안을 향상시키려면 Amazon RDS 인스턴스를 암호화하는 것이 좋습니다. 자세한 내용은 Amazon RDS 리소스 암호화 개요를 참조하세요.
-
보안 수준을 높이려면 여러 프라이머리 노드가 있는 각 Amazon EMR 클러스터에 대해 별도의 MySQL 데이터베이스를 사용하는 것이 좋습니다.
-
여러 프라이머리 노드가 있는 Amazon EMR 클러스터에서 HDFS의 투명한 암호를 구성하려면 클러스터를 생성할 때
hdfs-encryption-zones
분류를 지정해야 합니다. 그렇지 않으면 Ranger KMS는 구성되거나 시작되지 않습니다. 실행 중인 클러스터에서의 모든 Hadoop KMS 구성 분류 또는hdfs-encryption-zones
분류의 재구성은 여러 프라이머리 노드가 있는 Amazon EMR 클러스터에서 지원되지 않습니다. -
Amazon RDS용 인증서 번들 다운로드에서 다운로드한 PEM 인증서 번들은 여러 인증서를 하나의 파일로 그룹화합니다. Amazon EMR 7.3.0 이상에서는
ranger.kms.trust.ca.file.s3.url
구성을 사용하여 PEM 파일에서 여러 인증서 가져오기를 지원합니다.