

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

# Amazon Managed Service for Apache Flink의 키 관리
<a name="key-management-flink"></a>

Amazon MSF에서는 데이터를 암호화하기 위해 [AWS 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html) 또는 사용자가 직접 관리하는 [고객 관리형 키(CMK)](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-mgn-key)를 사용할 수 있습니다. AWS Key Management Service (AWS KMS)의 CMKs는 사용자가 직접 생성, 소유 및 관리하는 암호화 키입니다.

**Topics**
+ [Amazon EMR의 투명한 암호화](#transparent-encryption-flink)
+ [Amazon MSF의 고객 관리형 키](#cmk-flink)
+ [Amazon MSF에서 고객 관리형 키 사용](use-cmk-flink.md)
+ [를 사용하여 CMK 관리 AWS Management Console](manage-cmk-console.md)
+ [API를 사용한 CMK 관리](manage-cmk-api.md)

## Amazon EMR의 투명한 암호화
<a name="transparent-encryption-flink"></a>

기본적으로 Amazon MSF는 AWS 소유 키 (AOKs)를 사용하여 임시(실행 중인 애플리케이션 스토리지) 및 내구성 있는(내구성 있는 애플리케이션 스토리지) 스토리지의 데이터를 암호화합니다. 따라서 Flink [체크포인트](how-fault.md) 또는 [스냅샷](how-snapshots.md)의 대상이 되는 모든 데이터는 기본적으로 암호화됩니다. AOK는 Amazon MSF의 기본 암호화 방식이며 추가 설정이 필요하지 않습니다. Amazon MSF는 전송 중 데이터를 암호화하기 위해 기본적으로 TLS 및 HTTP\$1SSL을 사용하며 추가 설정 또는 구성이 필요하지 않습니다.

## Amazon MSF의 고객 관리형 키
<a name="cmk-flink"></a>

Amazon MSF에서 CMK는 사용자가 AWS KMS에서 직접 생성하고 소유하며 관리하는 키로 애플리케이션 데이터를 암호화할 수 있는 기능입니다.

**Topics**
+ [CMK로 암호화되는 항목은 무엇인가요?](#what-is-encrypted-cmk)
+ [CMK로 암호화되지 않는 항목은 무엇인가요?](#what-is-not-encrypted-cmk)
+ [지원되는 KMS 키 유형](#supported-kms-key-types)
+ [KMS 키 권한](#kms-key-permissions)
+ [KMS 암호화 컨텍스트 및 제약 조건](#kms-encryption-context-constraints)
+ [키 교체 정책](#kms-key-rotation-policy)
+ [최소 권한 키 정책 문](#kms-least-privilege-policy-examples)
+ [AWS CloudTrail 로그 항목 예](#kms-cloudtrail-log-entries)

### CMK로 암호화되는 항목은 무엇인가요?
<a name="what-is-encrypted-cmk"></a>

Amazon MSF 애플리케이션에서 Flink 체크포인트 또는 스냅샷의 대상이 되는 데이터는 애플리케이션에 대해 사용자가 정의한 CMK로 암호화됩니다. 따라서 CMK는 실행 중 애플리케이션 스토리지 또는 내구성 애플리케이션 스토리지에 저장된 데이터를 암호화합니다. [다음 섹션](manage-cmk-api.md)에서는 Amazon MSF 애플리케이션에서 CMK를 설정하는 절차를 설명합니다.

**키 교체 정책**  
Amazon MSF는 CMK의 키 교체 정책을 관리하지 않습니다. 키 교체는 사용자가 직접 책임져야 합니다. 이는 CMK를 사용자가 생성하고 유지 관리하기 때문입니다. Amazon MSF에서 CMK와 함께 키 교체 정책을 사용하는 방법에 관한 자세한 내용은 [키 교체 정책](#kms-key-rotation-policy) 섹션을 참조하세요.

### CMK로 암호화되지 않는 항목은 무엇인가요?
<a name="what-is-not-encrypted-cmk"></a>

**소스 및 싱크**  
데이터 소스 및 싱크의 암호화는 Amazon MSF에서 관리되지 않습니다. 소스나 싱크 구성 또는 애플리케이션 커넥터 구성에 의해 관리됩니다.

**암호화의 소급 적용**  
Amazon MSF의 CMK는 기존의 과거 스냅샷에 CMK를 소급 적용하는 기능을 지원하지 않습니다.

**로그 암호화**  
현재 Amazon MSF는 애플리케이션 코드 JAR에서 생성된 로그에 대해 KMS CMK를 사용한 로그 암호화를 지원하지 않습니다. 로그에 CMK 암호화가 필요한 데이터가 포함되지 않도록 해야 합니다.

**전송 중 데이터 암호화**  
CMK를 사용하여 전송 중 데이터를 암호화할 수 없습니다. 기본적으로 Amazon MSF는 TLS 또는 HTTP와 SSL을 사용하여 전송 중 데이터를 모두 암호화합니다.

### 지원되는 KMS 키 유형
<a name="supported-kms-key-types"></a>

Amazon MSF의 CMK는 [대칭 키](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-choose-key-spec.html#symmetric-cmks)를 지원합니다.

### KMS 키 권한
<a name="kms-key-permissions"></a>

Amazon MSF의 CMK는 다음 KMS 작업을 수행할 수 있는 권한이 필요합니다. 이러한 권한은 액세스 검증, CMK로 암호화된 실행 중 애플리케이션 스토리지 생성, 내구성 애플리케이션 스토리지에 CMK로 암호화된 애플리케이션 상태를 저장하는 데 필요합니다.
+ 

**[kms:DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)**  
KMS 키 별칭을 키 ARN으로 확인할 수 있는 권한을 부여합니다.
+ 

**[kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)**  
내구성 있는 애플리케이션 상태에 액세스하고 실행 중 애플리케이션 스토리지를 프로비저닝할 수 있는 권한을 부여합니다.
+ 

**[kms:GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)**  
내구성 애플리케이션 상태를 저장할 수 있는 권한을 부여합니다.
+ 

**[kms:GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)**  
실행 중 애플리케이션 스토리지를 프로비저닝할 수 있는 권한을 부여합니다.
+ 

**[kms:CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)**  
실행 중 애플리케이션 스토리지에 액세스할 수 있는 권한을 부여합니다.

### KMS 암호화 컨텍스트 및 제약 조건
<a name="kms-encryption-context-constraints"></a>

Amazon MSF의 CMK는 암호화된 데이터를 읽거나 쓸 때 키에 액세스하기 위해 `kms:EncryptionContext:aws:kinesisanalytics:arn` 암호화 컨텍스트를 제공합니다. 암호화 컨텍스트 외에도 내구성이 뛰어난 애플리케이션 스토리지를 읽거나 쓸 때 소스 컨텍스트 [aws:SourceArn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 및 [aws:SourceAccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)가 제공됩니다.

암호화된 실행 중 애플리케이션 스토리지를 프로비저닝하기 위해 권한 부여를 생성할 때, Amazon MSF CMK는 제약 조건 유형 [EncryptionContextSubset](https://docs.aws.amazon.com/kms/latest/developerguide/create-grant-overview.html#grant-constraints)을 사용하는 권한 부여 생성하여 `"kms:GrantOperations": "Decrypt"`를 통해 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 작업만 허용되도록 보장합니다.

### 키 교체 정책
<a name="kms-key-rotation-policy"></a>

Amazon MSF는 CMK의 키 교체 정책을 관리하지 않습니다. CMK를 사용자가 생성하고 유지 관리하기 때문에 키 교체는 사용자 책임입니다.

KMS에서 CMK의 새로운 암호화 자료를 생성하기 위해 자동 또는 수동 키 교체를 사용할 수 있습니다. 키를 교체하는 방법에 관한 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [AWS KMS keys교체](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)를 참조하세요.

Amazon MSF에서 CMK 키를 교체할 때는 연산자(API 호출자)가 이전 키와 새 키 모두에 대한 권한을 가지고 있어야 합니다.

**참고**  
애플리케이션이 CMK 사용으로 구성된 이후에도 AOK로 암호화된 스냅샷에서 시작할 수 있습니다. 또한 이전 CMK로 암호화된 스냅샷에서 시작할 수도 있습니다. 스냅샷에서 애플리케이션을 시작하려면 연산자(API 호출자)가 이전 키와 새 키 모두에 대한 권한을 가지고 있어야 합니다.

Amazon MSF에서는 CMK 암호화를 사용하는 애플리케이션을 중지했다가 다시 시작할 것을 권장합니다. 이렇게 하면 새 교체 마스터 키가 실행 중 애플리케이션 스토리지와 내구성 애플리케이션 스토리지의 모든 데이터에 적용됩니다. 애플리케이션을 중지하고 다시 시작하지 않으면 새 키 구성 요소는 내구성 애플리케이션 스토리지에만 적용됩니다. 실행 중 애플리케이션 스토리지는 계속 이전 키 재료로 암호화됩니다.

CMK에 사용되는 AWS KMS key ARN을 변경하는 경우 Amazon MSF에서 [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)을 사용해야 합니다. 이렇게 하면 `UpdateApplication` 작업의 일부로 Flink 애플리케이션이 다시 시작되면서 CMK 변경 사항이 적용됩니다.

**참고**  
별칭 또는 별칭 ARN을 제공하면 Amazon MSF는 해당 별칭을 키 ARN으로 확인하고 애플리케이션에 대해 구성된 키로 해당 키 ARN을 저장합니다.

### 최소 권한 키 정책 문
<a name="kms-least-privilege-policy-examples"></a>

키 정책 문에 관한 자세한 내용은 [KMS 키 정책 생성](manage-cmk-api.md#create-cmk-kms-key-policy) 및 [애플리케이션 수명 주기 연산자(API 호출자) 권한](manage-cmk-api.md#create-cmk-kms-api-caller-permissions) 섹션을 참조하세요.

### AWS CloudTrail 로그 항목 예
<a name="kms-cloudtrail-log-entries"></a>

Amazon MSF가에서 CMKs 사용하는 경우 AWS KMS는 모든 AWS KMS API 호출 및 관련 세부 정보를 AWS CloudTrail 자동으로 기록합니다. 이러한 로그에는 AWS 서비스 요청, KMS 키 ARN, 수행된 API 작업, 암호화된 데이터를 제외한 타임스탬프와 같은 정보가 포함됩니다. 이러한 로그는 어떤 서비스가 언제 키에 액세스했는지를 보여주므로 규정 준수, 보안 모니터링, 문제 해결을 위한 필수 감사 추적 기능을 제공합니다.

**예제 1:Amazon MSF에서 수임된 역할을 사용하여 API 호출 AWS KMS 해독**  
다음 CloudTrail 로그는 Amazon MSF가 CMK에 대해 테스트용 [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 작업을 수행하는 것을 보여줍니다. Amazon MSF는 [CreateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_CreateApplication.html) API를 사용할 때 **Operator** 역할을 사용하여 이 요청을 수행합니다. 다음 로그에는 대상 KMS 키 ARN, 관련 Amazon MSF 애플리케이션(*MyCmkApplication*), 작업의 타임스탬프와 같은 필수 세부 정보가 포함됩니다.

```
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "REDACTED",
        "arn": "arn:aws:sts::123456789012:assumed-role/Operator/CmkTestingSession",
        "accountId": "123456789012",
        "accessKeyId": "REDACTED",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "REDACTED",
                "arn": "arn:aws:iam::123456789012:role/Operator",
                "accountId": "123456789012",
                "userName": "Operator"
            },
            "attributes": {
                "creationDate": "2025-08-07T13:29:28Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "kinesisanalytics.amazonaws.com"
    },
    "eventTime": "2025-08-07T13:45:45Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "kinesisanalytics.amazonaws.com",
    "userAgent": "kinesisanalytics.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "encryptionContext": {
            "aws:kinesisanalytics:arn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication"
        },
        "keyId": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab",
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "dryRun": true
    },
    "responseElements": null,
    "additionalEventData": {
        "keyMaterialId": "REDACTED"
    },
    "requestID": "56764d19-1eb1-48f1-8044-594aa7dd05c4",
    "eventID": "1371b402-f1dc-4c47-8f3a-1004e4803c5a",
    "readOnly": true,
    "resources": [
        {
            "accountId": "123456789012",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management"
}
```

**예제 2: 직접 서비스 인증을 사용하여 Amazon MSF에서 API 호출 AWS KMS 해독**  
다음 CloudTrail 로그는 Amazon MSF가 CMK에 대해 테스트용 [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 작업을 수행하는 것을 보여줍니다. Amazon MSF는 역할을 수임하는 대신 direct AWS service-to-service 인증을 통해이 요청을 보냅니다. 다음 로그에는 대상 KMS 키 ARN, 관련 Amazon MSF 애플리케이션(*MyCmkApplication*), 작업의 공유 이벤트 ID와 같은 필수 세부 정보가 포함됩니다.

```
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "kinesisanalytics.amazonaws.com"
    },
    "eventTime": "2025-08-07T13:45:45Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "kinesisanalytics.amazonaws.com",
    "userAgent": "kinesisanalytics.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "keyId": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab",
        "encryptionContext": {
            "aws:kinesisanalytics:arn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication"
        },
        "dryRun": true
    },
    "responseElements": null,
    "additionalEventData": {
        "keyMaterialId": "REDACTED"
    },
    "requestID": "5fe45ada-7519-4608-be2f-5a9b8ddd62b2",
    "eventID": "6206b08f-ce04-3011-9ec2-55951d357b2c",
    "readOnly": true,
    "resources": [
        {
            "accountId": "123456789012",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "Application-account-ID",
    "sharedEventID": "acbe4a39-ced9-4f53-9f3c-21ef7e89dc37",
    "eventCategory": "Management"
}
```