AmazonHDFS에서 의 투명한 암호화 EMR - Amazon EMR

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AmazonHDFS에서 의 투명한 암호화 EMR

투명한 암호화는 사용자가 정의한 HDFS 경로인 HDFS 암호화 영역 를 사용하여 구현됩니다. 각 암호화 영역에는 고유의 키가 있으며, 이 키는 hdfs-site 구성 분류를 사용하여 지정된 키 서버에 저장됩니다.

Amazon EMR 릴리스 버전 4.8.0부터 Amazon EMR 보안 구성을 사용하여 클러스터에 대한 데이터 암호화 설정을 더 쉽게 구성할 수 있습니다. 보안 구성은 Amazon Elastic Block Store(Amazon EBS) 스토리지 볼륨 및 Amazon S3의 데이터에 전송 중인 데이터와 저장 중인 EMRFS 데이터에 대한 보안을 활성화하는 설정을 제공합니다. 자세한 내용은 Amazon EMR 관리 가이드전송 중 및 저장 중 데이터 암호화를 참조하세요.

AmazonEMR은 KMS 기본적으로 Hadoop을 사용하지만 작업을 구현KMS하는 다른 를 KeyProvider API 사용할 수 있습니다. HDFS 암호화 영역의 각 파일에는 암호화 영역 키로 암호화된 고유한 데이터 암호화 키 가 있습니다. HDFS 암호화 및 복호화 활동은 클라이언트에서만 발생하므로 데이터가 암호화 영역에 기록될 때 데이터가 암호화 end-to-end됩니다(저장 및 전송 중).

암호화 영역 간에 또는 암호화 영역에서 암호화되지 않은 경로로 파일을 이동할 수 없습니다.

NameNode 및 HDFS 클라이언트는 작업을 통해 HadoopKMS(또는 KMS 구성한 대체)과 상호 작용합니다 KeyProvider API. KMS 는 백업 키 스토어에 암호화 키를 저장하는 역할을 합니다. 또한 AmazonEMR에는 JCE 무제한 강도 정책이 포함되어 있으므로 원하는 길이로 키를 생성할 수 있습니다.

자세한 내용은 Hadoop 설명서의 에서 투명한 암호화HDFS를 참조하세요.

참고

Amazon 에서 EMR KMS overHTTPS는 기본적으로 Hadoop 에서 활성화되지 않습니다KMS. KMS 를 통해 활성화하는 방법에 대한 자세한 내용은 Hadoop KMS 설명서 를 HTTPS참조하세요.

HDFS 투명 암호화 구성

키를 생성하고 암호화 영역을 추가하여 Amazon에서 투명한 암호화EMR를 구성할 수 있습니다. 여러 가지 방법으로 이 작업을 수행할 수 있습니다.

  • 클러스터를 생성할 때 Amazon EMR 구성 API 작업 사용

  • command-runner.jar에서 Hadoop JAR 단계 사용

  • 하둡 클러스터의 마스터 노드에 로그인하여 hadoop keyhdfs crypto 명령줄 클라이언트 사용

  • REST APIs HadoopKMS용 및 사용 HDFS

에 대한 자세한 내용은 Hadoop KMS 및 에 대한 해당 설명서를 REST APIs참조하세요HDFS.

를 사용하여 클러스터 생성 시 암호화 영역 및 해당 키를 생성하려면 CLI

구성 API 작업의 hdfs-encryption-zones 분류를 사용하면 클러스터를 생성할 때 키 이름과 암호화 영역을 지정할 수 있습니다. Amazon은 클러스터의 HadoopKMS에서 이 키를 EMR 생성하고 암호화 영역을 구성합니다.

  • 다음 명령을 사용하여 클러스터를 생성합니다.

    aws emr create-cluster --release-label emr-7.3.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" } } ]
마스터 노드에서 암호화 영역과 해당 키를 수동으로 생성하려면
  1. 4.1.0보다 큰 Amazon EMR 릴리스를 사용하여 클러스터를 시작합니다.

  2. 를 사용하여 클러스터의 마스터 노드에 연결합니다SSH.

  3. Hadoop 내에서 키를 생성합니다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.
    중요

    HadoopKMS에서는 키 이름을 소문자로 지정해야 합니다. 대문자가 있는 키를 사용하면 클러스터가 시작 중 실패합니다.

  4. 에서 암호화 영역 경로를 생성합니다HDFS.

    $ hadoop fs -mkdir /myHDFSPath2
  5. 생성한 키를 사용하여 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 투명한 암호화에 대한 고려 사항

모범 사례는 파일을 작성할 수 있는 각 애플리케이션에 대해 암호화 영역을 생성하는 것입니다. 또한 구성의 hdfs-encryption-zones 분류를 HDFS 사용하여 모든 를 암호화API하고 루트 경로(/)를 암호화 영역으로 지정할 수 있습니다.

Hadoop 키 관리 서버

HadoopKMS은 Hadoop 클러스터에 대한 암호화 서비스를 구현할 수 있는 기능을 제공하는 키 관리 서버이며 의 키 공급업체 역할을 할 수 있습니다AmazonHDFS에서 의 투명한 암호화 EMR. EMR 클러스터를 시작하는 동안 Hadoop 애플리케이션을 선택하면 기본적으로 AmazonKMS의 Hadoop이 EMR 설치되고 활성화됩니다. Hadoop은 임시 캐싱의 경우를 제외하고 키 자체를 저장하지 KMS 않습니다. HadoopKMS은 키 공급자와 클라이언트 수탁자 간에 백업 키스토어에 대한 프록시 역할을 합니다. 이는 키스토어가 아닙니다. Hadoop에 대해 생성된 기본 키 스토어는 Java Cryptography Extension KeyStore ()KMS입니다JCEKS. JCE 무제한 강도 정책도 포함되어 있으므로 원하는 길이의 키를 생성할 수 있습니다. Hadoop은 와 같은 다른 클라이언트 애플리케이션과 독립적으로 키 및 키 작업에 대한 액세스를 ACLs 제어하는 다양한 KMS도 지원합니다HDFS. Amazon의 기본 키 길이는 256비트EMR입니다.

Hadoop 를 hadoop-kms-site 구성하려면 분류를 KMS사용하여 설정을 변경합니다. 를 구성하려면 분류 kms-acls를 ACLs사용합니다.

자세한 내용은 Hadoop KMS 설명서 를 참조하세요. HadoopKMS은 Hadoop HDFS 투명 암호화에 사용됩니다. HDFS 투명 암호화에 대한 자세한 내용은 Apache Hadoop 설명서의 HDFS 투명 암호화 주제를 참조하세요.

참고

Amazon 에서 EMR KMS overHTTPS는 기본적으로 Hadoop 에서 활성화되지 않습니다KMS. 를 KMS 통해 활성화하는 방법을 알아보려면 Hadoop KMS 설명서 를 HTTPS참조하세요.

중요

HadoopKMS에서는 키 이름을 소문자로 지정해야 합니다. 대문자가 있는 키를 사용하면 클러스터가 시작 중 실패합니다.

AmazonKMS에서 Hadoop 구성 EMR

Amazon EMR 릴리스 버전 4.6.0 이상을 사용하는 kms-http-port는 9700이고 는 9701kms-admin-port입니다.

Amazon EMR 릴리스에 API 대한 구성을 사용하여 KMS 클러스터 생성 시 Hadoop을 구성할 수 있습니다. 다음은 Hadoop 에 사용할 수 있는 구성 객체 분류입니다KMS.

Hadoop KMS 구성 분류
분류 Filename
hadoop-kms-site kms-site.xml
hadoop-kms-acls kms-acls.xml
hadoop-kms-env kms-env.sh
hadoop-kms-log4j kms-log4j.properties
를 KMS ACLs 사용하여 Hadoop을 설정하려면 CLI
  • 다음 명령을 ACLs 사용하여 를 사용하여 HadoopKMS으로 클러스터를 생성합니다.

    aws emr create-cluster --release-label emr-7.3.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" } } ]
를 사용하여 Hadoop KMS 캐시를 비활성화하려면 CLI
  • 다음 명령을 false사용하여 Hadoop이 로 KMS hadoop.kms.cache.enable 설정된 클러스터를 생성합니다.

    aws emr create-cluster --release-label emr-7.3.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" } } ]
를 사용하여 kms-env.sh 스크립트에서 환경 변수를 설정하려면 CLI
  • kms-env.sh에서 hadoop-kms-env 구성을 통해 설정을 변경합니다. 다음 명령을 KMS 사용하여 Hadoop을 사용하여 클러스터를 생성합니다.

    aws emr create-cluster --release-label emr-7.3.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": [ ] } ] } ]

Hadoop 구성에 대한 자세한 내용은 Hadoop KMS 설명서 섹션을 KMS참조하세요.

HDFS 여러 마스터 노드가 있는 EMR 클러스터의 투명한 암호화

Apache RangerKMS는 에서 투명한 암호화를 위해 여러 기본 노드가 있는 Amazon EMR 클러스터에서 사용됩니다HDFS.

Apache Ranger는 여러 프라이머리 노드가 있는 Amazon EMR 클러스터RDS에 대해 Amazon에 루트 키와 Encryption Zone(EZ) 키를 KMS 저장합니다. 여러 기본 노드가 있는 Amazon EMR 클러스터HDFS에서 에서 투명한 암호화를 활성화하려면 다음 구성을 제공해야 합니다.

  • Ranger KMS 루트 키와 EZ 키를 저장URL하기 위한 Amazon RDS 또는 자체 MySQL 서버 연결

  • My의 사용자 이름 및 암호SQL

  • Ranger KMS 루트 키의 암호

  • 내SQL 서버에 SSL 연결하기 위한 CA(인증 기관) PEM 파일

다음 예제에서 보여주듯이 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://rds-downloads/rds-ca-2019-root.pem" } } ]

다음은 Apache Ranger 에 대한 구성 객체 분류입니다KMS.

Hadoop KMS 구성 분류
분류 설명
ranger-kms-dbks-site Ranger 의 dbks-site.xml 파일의 값을 변경합니다KMS.
ranger-kms-site Ranger 의 ranger-kms-site.xml 파일에서 값을 변경합니다KMS.
ranger-kms-env Ranger KMS 환경에서 값을 변경합니다.
ranger-kms-log4j Ranger 의 kms-log4j.properties 파일의 값을 변경합니다KMS.
ranger-kms-db-ca S3 for MySQL SSL connection with Ranger 에서 CA 파일의 값을 변경합니다KMS.

고려 사항

  • 보안을 강화하려면 Amazon RDS 인스턴스를 암호화하는 것이 좋습니다. 자세한 내용은 Amazon RDS 리소스 암호화 개요 섹션을 참조하세요.

  • 높은 보안 막대를 위해 여러 기본 노드가 있는 각 Amazon EMR 클러스터에 대해 별도의 MySQL 데이터베이스를 사용하는 것이 좋습니다.

  • 여러 기본 노드가 있는 Amazon EMR 클러스터HDFS에서 의 투명한 암호화를 구성하려면 클러스터를 생성하는 동안 hdfs-encryption-zones 분류를 지정해야 합니다. 그렇지 않으면 RangerKMS가 구성되거나 시작되지 않습니다. 실행 중인 클러스터에서 hdfs-encryption-zones 분류 또는 Hadoop KMS 구성 분류를 재구성하는 것은 여러 기본 노드가 있는 Amazon EMR 클러스터에서는 지원되지 않습니다.