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