KMS CMK를 사용한 디스크 암호화 - Amazon EMR

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

KMS CMK를 사용한 디스크 암호화

EMR Serverless는 기본적으로 서비스 소유 암호화 키를 사용하여 작업자에게 연결된 모든 디스크를 암호화합니다. 필요에 따라 자체 AWS KMS 고객 관리형 키(CMKs. 이를 통해 키 정책을 설정 및 유지 관리하고 키 사용을 감사하는 기능을 포함하여 암호화 키를 더 잘 제어할 수 있습니다.

애플리케이션을 생성하거나 개별 작업을 제출할 때 디스크 암호화를 구성할 수 있습니다. 애플리케이션 수준에서 활성화하면 해당 애플리케이션의 모든 작업이 암호화 설정을 상속합니다. 작업을 제출할 때 디스크 암호화 구성을 지정하여 애플리케이션의 기본값을 재정의할 수도 있습니다.

참고

EMR Serverless 디스크 암호화는 대칭 KMS 키만 지원합니다. 비대칭 KMS 키는 지원되지 않습니다. 에서 생성된 대칭 암호화 KMS 키를 사용해야 합니다 AWS KMS. 에 대한 자세한 내용은 란 무엇입니까 AWS KMS?를 AWS KMS참조하십시오.

암호화 컨텍스트 사용

선택적으로 EMR Serverless는 암호화 컨텍스트를 사용하여 암호화 작업에 대해 인증된 추가 데이터를 제공합니다. 암호화 컨텍스트는 비밀이 아닌 추가 인증 데이터를 포함할 수 있는 키-값 페어 세트입니다. 암호화 컨텍스트는 암호화된 데이터에 암호화 방식으로 바인딩되므로 데이터를 해독하려면 동일한 암호화 컨텍스트가 필요합니다.

EMR Serverless에서는 디스크 암호화를 구성할 때 사용자 지정 암호화 컨텍스트를 지정할 수 있습니다. 이 암호화 컨텍스트는 KMS 작업을 식별하고 이해하는 데 도움이 되도록 AWS CloudTrail 로그에 포함됩니다.

참고

민감한 정보는 AWS CloudTrail 로그의 일반 텍스트로 표시되므로 암호화 컨텍스트에 저장하지 마십시오.

고객 관리형 키를 사용하여 디스크 암호화 구성

CreateApplication

자체 KMS 키로 디스크를 암호화하려면 EMR Serverless 애플리케이션을 생성할 때 diskEncryptionConfiguration 파라미터를 포함합니다.

aws emr-serverless create-application \ --type TYPE \ --name APPLICATION_ID \ --release-label RELEASE_LABEL \ --region AWS_REGION \ --disk-encryption-configuration '{ "encryptionKeyArn": "key-arn", "encryptionContext": { "key": "value" } }'

UpdateApplication

KMS 키 ARN 및/또는 암호화 컨텍스트를 업데이트하려면 애플리케이션을 업데이트할 때 diskEncryptionConfiguration 파라미터를 새 값으로 지정합니다.

aws emr-serverless update-application \ --name APPLICATION_ID \ --region AWS_REGION \ --disk-encryption-configuration '{ "encryptionKeyArn": "key-arn", "encryptionContext": { "key": "value" } }'
참고

애플리케이션에서 구성된 디스크 암호화를 설정 해제하려면 애플리케이션 업데이트 diskEncryptionConfiguration 중에 빈을 전달합니다.

StartJobRun

자체 KMS 키로 디스크를 암호화하려면 작업 실행을 제출할 때 diskEncryptionConfiguration 구성을 사용합니다.

--configuration-overrides '{ "diskEncryptionConfiguration": { "encryptionKeyArn": "key-arn", "encryptionContext": { "key": "value" } } }'

퍼블릭 Livy 엔드포인트

퍼블릭 Livy 엔드포인트를 통해 Spark 세션을 생성할 때 자체 KMS 키로 디스크를 암호화하려면 세션의 conf 객체에 암호화 구성을 지정합니다.

data = { "kind": "pyspark", "heartbeatTimeoutInSecond": 60, "conf": { "emr-serverless.session.executionRoleArn": "role_arn", "spark.emr-serverless.disk.encryptionKeyArn": "key-arn", "spark.emr-serverless.disk.encryptionContext": "key1:value1,key2:value2" # Optional } } # Send request to create a session with the Livy API endpoint request = AWSRequest(method='POST', url=endpoint + "/sessions", data=json.dumps(data), headers=headers)

디스크 암호화에 필요한 권한

EMR Serverless에 대한 암호화 키 권한

자체 암호화 키로 디스크를 암호화하는 경우 emr-serverless.amazonaws.com 보안 주체에 대해 다음 KMS 키 권한을 구성해야 합니다.

  • kms:GenerateDataKey : 디스크 볼륨 암호화를 위한 데이터 키 생성

  • kms:Decrypt : 암호화된 디스크 콘텐츠에 액세스할 때 데이터 키를 복호화하려면

{ "Effect": "Allow", "Principal":{ "Service": "emr-serverless.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:emr-serverless:region:aws-account-id:/applications/application-id" }, "StringEquals": { "kms:EncryptionContext:applicationId": "application-id", "aws:SourceAccount": "aws-account-id" } } }

보안 모범 사례로 aws:SourceArn 조건 키를 KMS 키 정책에 추가하는 것이 좋습니다. IAM 전역 조건 키 aws:SourceArn은 EMR Serverless가 애플리케이션 ARN에 대해서만 KMS 키를 사용하도록 하는 데 도움이 됩니다. 또한 aws:SourceAccount 조건 키를 포함하면 KMS 키 사용을 조건에 지정된 AWS 계정 ID에서 시작되는 요청으로 제한하여 또 다른 보안 계층이 제공됩니다.

작업 런타임 역할에는 IAM 정책에 다음 권한이 있어야 합니다.

{ "Sid": "Enable GDK and Decrypt", "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "key-arn" } }

필요한 사용자 권한

작업을 제출하는 사용자에게는 키를 사용할 수 있는 권한이 있어야 합니다. 사용자, 그룹 또는 역할에 대한 IAM 정책 또는 KMS 키 정책에서 권한을 지정할 수 있습니다. 작업을 제출하는 사용자에게 KMS 키 권한이 없는 경우 EMR Serverless는 작업 실행 제출을 거부합니다.

예제 키 정책

다음 키 정책은 kms:DescribeKey, kms:GenerateDataKey 및에 대한 권한을 제공합니다kms:Decrypt.

  • kms:DescribeKey : 고객 관리형 KMS 키가 활성화되었는지 확인하고 사용하기 전에 SYMMETRIC를 확인합니다.

{ "Sid": "Enable DescribeKey", "Effect": "Allow", "Principal":{ "AWS": "arn:aws:iam::111122223333:user/user-name" }, "Action": [ "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Enable GDK and Decrypt", "Effect": "Allow", "Principal":{ "AWS": "arn:aws:iam::111122223333:user/user-name" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "emr-serverless.region.amazonaws.com", "kms:EncryptionContext:key": "value" } } }

보안 모범 사례로 kms:viaService 조건 키를 KMS 키 정책에 추가하는 것이 좋습니다. KMS 키 사용을 emr-serverless의 검증 요청으로 제한합니다.

IAM 정책 예제

다음 IAM 정책은 kms:DescribeKey, kms:GenerateDataKey 및에 대한 권한을 제공합니다kms:Decrypt.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "key-arn" } }

키 사용량 모니터링

EMR Serverless에서 고객 관리형 키의 사용을 모니터링할 수 있습니다 AWS CloudTrail.는 EMR Serverless 콘솔, EMR Serverless API, AWS CLI 또는 AWS SDK의 호출을 포함하여에 대한 모든 API 호출을 이벤트 AWS KMS 로 AWS CloudTrail 캡처합니다.

캡처되는 정보에는 KMS 키를 사용한 특정 EMR Serverless 리소스를 식별하고 감사하는 데 도움이 될 수 있도록 지정한 암호화 컨텍스트가 포함됩니다. 예를 들어에서 다음과 유사한 이벤트가 표시될 수 있습니다 AWS CloudTrail. 사용에 대한 자세한 내용은 AWS CloudTrail 사용 설명서를 AWS CloudTrail참조하세요.

GenerateDataKey

EMR Serverless가 암호화된 디스크 볼륨을 생성할 때 GenerateDataKey 작업에 대한 샘플 이벤트

{ "eventVersion": "1.11", "userIdentity": { "type": "AWSService", "principalId": "user", "invokedBy": "AWS Internal" }, "eventTime": "2025-07-28T21:43:51Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "ipAddress", "userAgent": "userAgent", "requestParameters": { "encryptionContext": { "applicationId": "test" }, "keyId": "arn:aws:kms:region:accountId:key/ffffffff-fffff-aaaaa-eeee-sample", "keySpec": "AES_256" }, "responseElements": null, "additionalEventData": { "keyMaterialId": "145c963debe558dfb01848d2a4539da940f3478852f86cfe2f52d5df796a5a02" }, "requestID": "cc9d1c5e-97c4-4a4f-ae7a-e576sample", "eventID": "0b0fef09-f28d-4da8-a5a1-17b74sample", "readOnly": true, "resources": [ { "accountId": "account", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:region:accountId:key/ffffffff-fffff-aaaaa-eeee-sample" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "accountId", "eventCategory": "Management" }

Decrypt

EMR Serverless가 암호화된 데이터에 액세스할 때 복호화 작업에 대한 샘플 이벤트입니다.

{ "eventVersion": "1.11", "userIdentity": { "type": "AWSService", "principalId": "user", "invokedBy": "AWS Internal" }, "eventTime": "2025-07-28T21:43:51Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "ipAddress", "userAgent": "userAgent", "requestParameters": { "encryptionContext": { "applicationId": "test" }, "keyId": "arn:aws:kms:region:accountId:key/ffffffff-fffff-aaaaa-eeee-sample", "keySpec": "AES_256" }, "responseElements": null, "additionalEventData": { "keyMaterialId": "145c963debe558dfb01848d2a4539da940f3478852f86cfe2f52d5df796a5a02" }, "requestID": "cc9d1c5e-97c4-4a4f-ae7a-e576sample", "eventID": "0b0fef09-f28d-4da8-a5a1-17b74sample", "readOnly": true, "resources": [ { "accountId": "account", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:region:accountId:key/ffffffff-fffff-aaaaa-eeee-sample" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "accountId", "eventCategory": "Management" }

자세히 알아보기

다음 리소스에서 키에 대한 추가 정보를 확인할 수 있습니다.