APIs 사용하여 CMK 관리 - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink(Amazon MSF)는 이전에 Amazon Kinesis Data Analytics for Apache Flink로 알려졌습니다.

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

APIs 사용하여 CMK 관리

이 주제에서는 Amazon MSF APIs를 사용하여 KMS CMKs 생성하고 업데이트하는 방법을 설명합니다. 이 주제에 설명된 절차를 따르려면 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 역할 및 Amazon MSF 서비스 보안 주체, kinesisanalytics.amazonaws.com 및 모두에 다음 작업을 수행하는 infrastructure.kinesisanalytics.amazonaws.com데 필요한 권한을 부여합니다.

  • CMK 설명

  • 애플리케이션 데이터 암호화

  • 애플리케이션 데이터 복호화

  • 키에 대한 권한 부여 생성

다음 예제에서는 IAM 역할을 사용합니다. 다음 예제를 템플릿으로 사용하여 KMS 키에 대한 키 정책을 생성할 수 있지만 다음을 수행해야 합니다.

  • Operator 역할arn:aws:iam::123456789012:role/Operator로 바꿉니다. 키 정책을 생성하기 전에 Operator 역할 또는 사용자를 생성해야 합니다. 이렇게 하지 않으면 요청이 실패합니다.

  • 를 애플리케이션의 ARNarn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication으로 바꿉니다.

  • 를 해당 리전의 서비스 값으로 kinesisanalytics.us-east-1.amazonaws.com 바꿉니다.

  • 123456789012을 CMK에 대한 계정 idKey 정책으로 바꿉니다.

  • 키 관리자가 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 키를 할당하는 데 필요한 권한을 갖도록 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowMSFAPICalls", "Effect": "Allow", "Action": "kinesisanalytics:*", "Resource": "*" }, { "Sid": "AllowPassingServiceExecutionRole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::123456789012:role/MyCmkApplicationRole" }, { "Sid": "AllowDescribeKey", "Effect": "Allow", "Action": [ "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab", "Condition": { "StringEquals": { "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com" } } }, { "Sid": "AllowMyCmkApplicationKeyOperationsForDurableState", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab", "Condition": { "StringEquals": { "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:kinesisanalytics:arn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication" } } }, { "Sid": "AllowMyCmkApplicationKeyOperationsForRunningState", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKeyWithoutPlaintext" ], "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab", "Condition": { "StringEquals": { "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:kinesisanalytics:arn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication" } } }, { "Sid": "AllowMyCmkApplicationCreateGrantForRunningState", "Effect": "Allow", "Action": "kms:CreateGrant", "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab", "Condition": { "ForAllValues:StringEquals": { "kms:GrantOperations": "Decrypt" }, "StringEquals": { "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:kinesisanalytics:arn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication", "kms:GrantConstraintType": "EncryptionContextSubset" } } } ] }

CMK를 사용하도록 기존 애플리케이션 업데이트

Amazon MSF에서는 AWS 소유 키 (AOKs.

기본적으로 Amazon MSF는 AOKs 사용하여 임시(실행 중인 애플리케이션 스토리지) 및 내구성 있는(내구성 있는 애플리케이션 스토리지) 스토리지의 모든 데이터를 암호화합니다. 즉, Flink 체크포인트 또는 스냅샷의 대상이 되는 모든 데이터는 기본적으로 AOKs 사용하여 암호화됩니다. AOK를 CMK로 바꾸면 새 체크포인트와 스냅샷이 CMK로 암호화됩니다. 그러나 기록 스냅샷은 AOK로 암호화된 상태로 유지됩니다.

CMK를 사용하도록 기존 애플리케이션을 업데이트하려면
  1. 다음 구성으로 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" } } }
  2. 이 파일을 저장합니다. 예를 들어 이름으로 저장합니다enable-cmk.json.

  3. 다음 예제와 같이 update-application AWS CLI 명령을 실행합니다. 이 명령에서 이전 단계에서 생성한 JSON 구성 파일을 파일 인수로 제공합니다.

    aws kinesisanalyticsv2 update-application \ --cli-input-json file://enable-cmk.json

위의 구성은 다음 조건이 충족되는 경우에만 CMK를 사용하기 위한 애플리케이션을 업데이트하는 데 허용됩니다.

  • API 호출자에게 키에 대한 액세스를 허용하는 정책 문이 있습니다.

  • 키 정책에는 API 호출자가 키에 액세스할 수 있도록 허용하는 정책 문이 있습니다.

  • 키 정책에는 Amazon MSF 서비스 보안 주체가 키에 kinesisanalytics.amazonaws.com 액세스할 수 있도록 허용하는 정책 문이 있습니다.

CMK에서 로 되돌리기 AWS 소유 키

CMK에서 AOK로 되돌리려면
  1. 다음 구성으로 JSON 파일을 생성합니다.

    이 JSON 구성에서는 샘플 값을 실제 값으로 바꿔야 합니다.

    { "ApplicationName": "MyCmkApplication", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationEncryptionConfigurationUpdate": { "KeyTypeUpdate": "AWS_OWNED_KEY" } } }
  2. 이 파일을 저장합니다. 예를 들어 이름으로 저장합니다disable-cmk.json.

  3. 다음 예제와 같이 update-application AWS CLI 명령을 실행합니다. 이 명령에서 이전 단계에서 생성한 JSON 구성 파일을 파일 인수로 제공합니다.

    aws kinesisanalyticsv2 update-application \ --cli-input-json file://disable-cmk.json