HDFSAmazon의 투명한 암호화 EMR - 아마존 EMR

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

HDFSAmazon의 투명한 암호화 EMR

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

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

EMRAmazon은 KMS 기본적으로 하둡을 사용하지만 작업을 KMS 구현하는 다른 Hadoop을 사용할 수 있습니다. KeyProvider API 암호화 영역의 각 파일에는 고유한 데이터 HDFS 암호화 키가 있으며, 이 암호화 키는 암호화 영역 키로 암호화됩니다. HDFS암호화 및 암호 해독 활동은 클라이언트에서만 이루어지기 때문에 데이터가 암호화 영역에 기록되면 데이터가 암호화됩니다 end-to-end (저장 및 전송 중).

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

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

자세한 내용은 하둡 설명서의 투명한 암호화를 참조하십시오. HDFS

참고

EMRAmazon에서는 KMS HTTPS 오버가 기본적으로 KMS 하둡과 함께 활성화되어 있지 않습니다. KMS오버를 활성화하는 방법에 대한 자세한 내용은 하둡 HTTPS KMS 설명서를 참조하십시오.

투명한 암호화 구성 HDFS

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

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

  • command-runner.jar 기반 하둡 JAR 단계 사용

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

  • RESTAPIs하둡용 사용 및 KMS HDFS

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

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

구성 API 작업의 hdfs-encryption-zones 분류를 통해 클러스터를 생성할 때 키 이름과 암호화 영역을 지정할 수 있습니다. EMRAmazon은 클러스터의 KMS 하둡에 이 키를 생성하고 암호화 영역을 구성합니다.

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

    aws emr create-cluster --release-label emr-7.2.0 --instance-type m5.xlarge --instance-count 2 \ --applications Name=App1 Name=App2 --configurations https://s3.amazonaws.com/mybucket/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. 하둡 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하둡에서는 키 이름이 소문자여야 합니다. 대문자가 있는 키를 사용하면 클러스터가 시작 중 실패합니다.

  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투명 암호화에 대한 고려 사항

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

Hadoop 키 관리 서버

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

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

자세한 내용은 Hadoop 설명서를 참조하십시오. KMS KMS하둡은 하둡 투명 암호화에 사용됩니다. HDFS HDFS투명 암호화에 대한 자세한 내용은 Apache Hadoop HDFS설명서의 투명 암호화 항목을 참조하십시오.

참고

EMRAmazon에서는 KMS HTTPS 오버가 기본적으로 KMS 하둡과 함께 활성화되어 있지 않습니다. KMS오버를 활성화하는 방법을 HTTPS 알아보려면 하둡 KMS 설명서를 참조하십시오.

중요

KMS하둡에서는 키 이름이 소문자여야 합니다. 대문자가 있는 키를 사용하면 클러스터가 시작 중 실패합니다.

아마존에서 하둡 KMS 설정하기 EMR

아마존 EMR 릴리스 버전 4.6.0 이상을 사용하는 경우 버전은 kms-http-port 9700이고 kms-admin-port 9701입니다.

APIAmazon EMR 릴리스 구성을 사용하여 클러스터 생성 KMS 시 하둡을 구성할 수 있습니다. 하둡에 사용할 수 있는 구성 객체 분류는 다음과 같습니다. KMS

하둡 구성 분류 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 하둡을 설정하려면 CLI
  • 다음 명령을 ACLs 사용하여 KMS Hadoop으로 클러스터를 생성합니다.

    aws emr create-cluster --release-label emr-7.2.0 --instance-type m5.xlarge --instance-count 2 \ --applications Name=App1 Name=App2 --configurations https://s3.amazonaws.com/mybucket/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" } } ]
를 사용하여 하둡 캐시를 KMS 비활성화하려면 CLI
  • 다음 명령을 사용하여 Hadoop이 로 KMS hadoop.kms.cache.enable false 설정된 클러스터를 생성합니다.

    aws emr create-cluster --release-label emr-7.2.0 --instance-type m5.xlarge --instance-count 2 \ --applications Name=App1 Name=App2 --configurations https://s3.amazonaws.com/mybucket/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.2.0 --instance-type m5.xlarge --instance-count 2 \ --applications Name=App1 Name=App2 --configurations https://s3.amazonaws.com/mybucket/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

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

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

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

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

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

  • 레인저 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

하둡 구성 분류 KMS
분류 설명
ranger-kms-dbks-site 레인저의 dbks-site.xml 파일에서 값을 변경하십시오. KMS
ranger-kms-site ranger-kms-site레인저의.xml 파일에서 값을 변경합니다. KMS
ranger-kms-env Ranger KMS 환경에서 값을 변경합니다.
ranger-kms-log4j 레인저의 kms-log4j.properties 파일에서 값을 변경하십시오. KMS
ranger-kms-db-ca 레인저와의 내 연결에 대한 S3의 CA 파일 값을 변경합니다. SQL SSL KMS

고려 사항

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

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

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