Amazon Managed Service for Apache Flink(Amazon MSF)는 이전에 Amazon Kinesis Data Analytics for Apache Flink로 알려져 있었습니다.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
API를 사용한 CMK 관리
이 주제에서는 Amazon MSF API를 사용하여 KMS CMK를 생성하고 업데이트하는 방법을 설명합니다. 이 주제에 설명된 절차를 따르려면 KMS 키와 Amazon MSF 애플리케이션을 관리할 수 있는 권한이 있어야 합니다. 이 주제의 절차에서는 데모 및 테스트 목적으로만 허용적인 키 정책을 사용합니다. 프로덕션 워크로드에서는 이러한 허용적 키 정책을 사용하는 것을 권장하지 않습니다. 실제 프로덕션 워크로드 시나리오에서는 역할, 권한, 워크플로가 분리되어 있습니다.
KMS 키 생성 및 할당
시작하기 전에 KMS 키를 생성합니다. KMS 키를 생성하는 방법에 관한 자세한 내용은 AWS Key Management Service 개발자 안내서의 KMS 키 생성을 참조하세요.
KMS 키 정책 생성
Amazon MSF에서 CMK를 사용하려면 키 정책에 kinesisanalytics.amazonaws.com 및 infrastructure.kinesisanalytics.amazonaws.com 서비스 보안 주체를 추가해야 합니다 Amazon MSF는 이러한 서비스 보안 주체를 검증 및 리소스 액세스에 사용합니다. 이러한 서비스 보안 주체를 포함하지 않으면 Amazon MSF는 요청을 거부합니다.
다음 KMS 키 정책은 Amazon MSF가 MyCmkApplication 애플리케이션에 CMK를 사용할 수 있게 합니다. 이 정책은 Operator 역할과 kinesisanalytics.amazonaws.com 및 infrastructure.kinesisanalytics.amazonaws.com Amazon MSF 서비스 보안 주체 모두에게 다음 작업을 수행하는 데 필요한 권한을 부여합니다.
-
CMK 설명
-
애플리케이션 데이터 암호화
-
애플리케이션 데이터 복호화
-
키에 대한 권한 부여 생성
다음 예제에서는 IAM 역할을 사용합니다. 다음 예제를 템플릿으로 사용하여 KMS 키 정책을 생성할 수 있지만, 반드시 아래 작업을 수행해야 합니다.
-
arn:aws:iam::를123456789012:role/OperatorOperator역할로 바꿉니다. 키 정책을 생성하기 전에Operator역할 또는 사용자를 생성해야 합니다. 이렇게 하지 않으면 요청이 실패합니다. -
arn:aws:kinesisanalytics:us-east-1:을 사용자의 애플리케이션 ARN으로 교체합니다.123456789012:application/MyCmkApplication -
kinesisanalytics.을 해당 리전의 서비스 값으로 교체합니다.us-east-1.amazonaws.com -
123456789012를 CMK에 대한 사용자의 계정 ID 키 정책으로 교체합니다. -
키 관리자가 KMS 키를 관리하도록 허용하는 정책 문을 추가합니다. 이를 수행하지 않으면 키를 관리할 수 있는 액세스 권한을 상실합니다.
다음 키 정책 문은 각 작업에 필요한 조건을 명확히 보여주기 위해 길고 상세하게 작성되어 있습니다.
{ "Version":"2012-10-17", "Id": "MyMsfCmkApplicationKeyPolicy", "Statement": [ { "Sid": "AllowOperatorToDescribeKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/Operator" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com" } } }, { "Sid": "AllowOperatorToConfigureAppToUseKeyForApplicationState", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/Operator" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:kinesisanalytics:arn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication", "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com" } } }, { "Sid": "AllowOperatorToConfigureAppToCreateGrantForRunningState", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/Operator" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:kinesisanalytics:arn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication", "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com", "kms:GrantConstraintType": "EncryptionContextSubset" }, "ForAllValues:StringEquals": { "kms:GrantOperations": "Decrypt" } } }, { "Sid": "AllowMSFServiceToDescribeKey", "Effect": "Allow", "Principal": { "Service": [ "kinesisanalytics.amazonaws.com", "infrastructure.kinesisanalytics.amazonaws.com" ] }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication", "aws:SourceAccount": "123456789012" } } }, { "Sid": "AllowMSFServiceToGenerateDataKeyForDurableState", "Effect": "Allow", "Principal": { "Service": "kinesisanalytics.amazonaws.com" }, "Action": [ "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication", "kms:EncryptionContext:aws:kinesisanalytics:arn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication", "aws:SourceAccount": "123456789012" } } }, { "Sid": "AllowMSFServiceToDecryptForDurableState", "Effect": "Allow", "Principal": { "Service": "kinesisanalytics.amazonaws.com" }, "Action": [ "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:kinesisanalytics:arn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication" } } }, { "Sid": "AllowMSFServiceToUseKeyForRunningState", "Effect": "Allow", "Principal": { "Service": [ "infrastructure.kinesisanalytics.amazonaws.com" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKeyWithoutPlaintext" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:kinesisanalytics:arn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication" } } }, { "Sid": "AllowMSFServiceToCreateGrantForRunningState", "Effect": "Allow", "Principal": { "Service": [ "infrastructure.kinesisanalytics.amazonaws.com" ] }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:kinesisanalytics:arn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication", "kms:GrantConstraintType": "EncryptionContextSubset" }, "ForAllValues:StringEquals": { "kms:GrantOperations": "Decrypt" } } } ] }
애플리케이션 수명 주기 연산자(API 호출자) 권한
다음 IAM 정책은 애플리케이션 수명 주기 연산자가 애플리케이션 MyCmkApplication에 KMS 키를 할당하는 데 필요한 권한을 갖도록 보장합니다.
기존 애플리케이션을 CMK 사용으로 업데이트
Amazon MSF에서는 AWS 소유 키 (AOKs.
Amazon MSF는 기본적으로 AOK를 사용하여 임시 스토리지(실행 중 애플리케이션 스토리지)와 내구성 스토리지(내구성 애플리케이션 스토리지)에 있는 모든 데이터를 암호화합니다. 따라서 Flink 체크포인트 또는 스냅샷의 대상이 되는 모든 데이터는 기본적으로 AOK를 사용하여 암호화됩니다. AOK를 CMK로 교체하면 새 체크포인트와 스냅샷이 CMK로 암호화됩니다. 그러나 기존 스냅샷은 AOK로 암호화된 상태로 유지됩니다.
기존 애플리케이션을 CMK 사용으로 업데이트하려면
-
다음 구성을 포함한 JSON 파일을 생성합니다.
CurrentApplicationVersionId값은 애플리케이션의 현재 버전 번호로 교체해야 합니다. 애플리케이션의 현재 버전 번호는 DescribeApplication을 통해 확인할 수 있습니다.이 JSON 구성의
샘플값은 실제 값으로 바꿔야 합니다.{ "ApplicationName": "MyCmkApplication", "CurrentApplicationVersionId":1, "ApplicationConfigurationUpdate": { "ApplicationEncryptionConfigurationUpdate": { "KeyTypeUpdate": "CUSTOMER_MANAGED_KEY", "KeyIdUpdate": "arn:aws:kms:us-east-1:" } } }123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab -
이 파일을 저장합니다. 예를 들어
enable-cmk.json이라는 이름으로 저장합니다. -
다음 예제와 같이 update-application AWS CLI 명령을 실행합니다. 이 명령에서는 이전 단계에서 생성한 JSON 구성 파일을 파일 인수로 제공합니다.
aws kinesisanalyticsv2 update-application \ --cli-input-json file://enable-cmk.json
앞서 제시한 구성은 다음 조건을 모두 충족할 때만 애플리케이션을 CMK로 업데이트하는 데 적용할 수 있습니다.
-
API 호출자에게 키 접근을 허용하는 정책 문이 있어야 합니다.
-
키 정책에 API 호출자의 키 접근을 허용하는 정책 문이 포함되어 있어야 합니다.
-
키 정책에 예를 들면
kinesisanalytics.amazonaws.com과 같은 Amazon MSF 서비스 보안 주체에 키 접근을 허용하는 정책 문이 포함되어 있어야 합니다.
CMK에서 로 되돌리기 AWS 소유 키
CMK에서 AOK로 되돌리려면
-
다음 구성을 포함한 JSON 파일을 생성합니다.
이 JSON 구성의
샘플값은 실제 값으로 바꿔야 합니다.{ "ApplicationName": "MyCmkApplication", "CurrentApplicationVersionId":1, "ApplicationConfigurationUpdate": { "ApplicationEncryptionConfigurationUpdate": { "KeyTypeUpdate": "AWS_OWNED_KEY" } } } -
이 파일을 저장합니다. 예를 들어
disable-cmk.json이라는 이름으로 저장합니다. -
다음 예제와 같이 update-application AWS CLI 명령을 실행합니다. 이 명령에서는 이전 단계에서 생성한 JSON 구성 파일을 파일 인수로 제공합니다.
aws kinesisanalyticsv2 update-application \ --cli-input-json file://disable-cmk.json