

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

# KMS CMK를 사용한 디스크 암호화
<a name="disk-encryption-cmk"></a>

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

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

**참고**  
EMR Serverless 디스크 암호화는 대칭 KMS 키만 지원합니다. 비대칭 KMS 키는 지원되지 않습니다. 에서 생성된 대칭 암호화 KMS 키를 사용해야 합니다 AWS KMS. 에 대한 자세한 내용은 [란 무엇입니까 AWS KMS?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)를 AWS KMS참조하십시오.

## 암호화 컨텍스트 사용
<a name="disk-encryption-context"></a>

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

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

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

## 고객 관리형 키를 사용하여 디스크 암호화 구성
<a name="disk-encryption-configure"></a>

### CreateApplication
<a name="disk-encryption-create-app"></a>

자체 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
<a name="disk-encryption-update-app"></a>

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
<a name="disk-encryption-start-job"></a>

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

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

### 퍼블릭 Livy 엔드포인트
<a name="disk-encryption-livy"></a>

퍼블릭 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)
```

## 디스크 암호화에 필요한 권한
<a name="disk-encryption-permissions"></a>

### EMR Serverless에 대한 암호화 키 권한
<a name="disk-encryption-key-permissions"></a>

자체 암호화 키로 디스크를 암호화하는 경우 `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"
    }
}
```

### 필요한 사용자 권한
<a name="disk-encryption-user-permissions"></a>

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

#### 예제 키 정책
<a name="disk-encryption-example-key-policy"></a>

다음 키 정책은 `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 정책 예제
<a name="disk-encryption-example-iam-policy"></a>

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

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

## 키 사용량 모니터링
<a name="disk-encryption-monitoring"></a>

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 사용 설명서를](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/) AWS CloudTrail참조하세요.

### GenerateDataKey
<a name="disk-encryption-monitoring-gdk"></a>

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
<a name="disk-encryption-monitoring-decrypt"></a>

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"
}
```

## 자세히 알아보기
<a name="disk-encryption-learn-more"></a>

다음 리소스에서 키에 대한 추가 정보를 확인할 수 있습니다.
+  AWS KMS 기본 개념에 대한 자세한 내용은 [AWS KMS 개발자 안내서](https://docs.aws.amazon.com/kms/latest/developerguide/)를 참조하세요.
+ 의 보안 모범 사례에 대한 자세한 내용은 [AWS KMS 개발자 안내서](https://docs.aws.amazon.com/kms/latest/developerguide/best-practices.html)를 AWS KMS참조하세요.