Amazon Redshift 데이터 API와 함께 AWS KMS 사용 - Amazon Redshift

Amazon Redshift는 2025년 11월 1일부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. Python UDF를 사용하려면 이 날짜 이전에 UDF를 생성하세요. 기존 Python UDF는 정상적으로 계속 작동합니다. 자세한 내용은 블로그 게시물을 참조하세요.

Amazon Redshift 데이터 API와 함께 AWS KMS 사용

Amazon Redshift 클러스터 또는 Redshift Serverless 작업 그룹을 고객 관리형 키로 암호화하는 경우 Amazon Redshift 데이터 API는 동일한 고객 관리형 키를 사용하여 쿼리와 결과를 저장하고 암호화합니다.

데이터 API는 기본적으로 데이터를 암호화하여 쿼리 텍스트 및 쿼리 결과와 같은 민감한 정보를 보호합니다. 이 보호를 위해 AWS에서 소유한 AWS KMS 암호화 키를 사용합니다.

저장 데이터의 기본 암호화는 민감한 데이터를 보호하는 데 수반되는 운영 오버헤드와 복잡성을 줄여줍니다. 이 방법으로 엄격한 암호화 규정 준수 및 규제 요구 사항을 충족하는 안전한 애플리케이션을 구축할 수 있습니다.

AWS KMS에서 권한 부여 사용

데이터 API는 고객 관리형 키를 사용하려면 권한 부여가 필요합니다.

고객 관리형 키로 암호화된 클러스터에 대해 ExecuteStatement 또는 BatchExecuteStatement를 직접 호출하면 Amazon Redshift는 AWS KMS에 CreateGrant 요청을 전송하여 사용자를 대신하여 권한 부여를 생성합니다. AWS KMS는 권한 부여를 사용하여 계정의 KMS 키에 대한 데이터 API 액세스 권한을 부여합니다.

데이터 API는 다음 작업에 대해 고객 관리형 키를 사용할 수 있는 권한이 필요합니다.

  • AWS KMS에 Encrypt 요청을 보내 고객 관리형 키로 쿼리 메타데이터를 암호화합니다.

  • AWS KMS에 GenerateDataKey 요청을 보내 고객 관리 키로 암호화된 데이터 키를 생성합니다.

  • 암호화된 데이터 키를 암호화할 수 있도록 암호화된 데이터 키의 암호를 해독하기 위한 Decrypt 요청을 AWS KMS에 보냅니다.

언제든지 권한 부여에 대한 액세스 권한을 취소하거나 고객 관리형 키에 대한 Amazon Redshift 액세스 권한을 제거할 수 있습니다. 그렇게 할 경우 API는 고객이 관리하는 키로 암호화된 데이터에 더 이상 접근할 수 없게 되어 해당 데이터에 의존하는 작업에 영향을 미칩니다. 예를 들어 권한 부여를 취소한 후 쿼리 결과를 검색하거나 쿼리 상태를 추적하려고 하면 데이터 API가 AccessDeniedException을 반환합니다.

고객 관리형 키에 대한 키 정책

키 정책은 고객 관리형 키에 대한 액세스를 제어합니다. 모든 고객 관리형 키에는 키를 사용할 수 있는 사람과 키를 사용하는 방법을 결정하는 문장이 포함된 정확히 하나의 키 정책이 있어야 합니다. 고객 관리형 키를 만들 때 키 정책을 지정할 수 있습니다. 자세한 내용은 AWS Key Management Service 개발자 안내서고객 관리형 키를 참조하세요.

데이터 API에서 고객 관리형 키를 사용하려면 먼저 Amazon Redshift에 대한 액세스를 허용해야 합니다. 키 정책에서 다음 API 작업을 허용해야 합니다.

  • kms:CreateGrant – 고객 관리형 키에 권한 부여를 추가합니다. 권한 부여는 지정된 AWS KMS 키에 대한 액세스를 제어하여 Amazon Redshift에 필요한 권한 부여 작업에 대한 액세스를 허용합니다. 자세한 내용은 AWS KMS에서 권한 부여 사용을 참조하세요.

다음은 예제 키 정책입니다.

"Statement":[ { "Sid":"Allow access to principals authorized to use Amazon Redshift", "Effect":"Allow", "Principal":{ "AWS":"*" }, "Action":[ "kms:DescribeKey", "kms:CreateGrant" ], "Resource":"*", "Condition":{ "StringEquals":{ "kms:ViaService":"redshift.amazonaws.com", "kms:CallerAccount":"111122223333" } } }, { "Sid":"AllowKeyAdministratorsAccess", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::111122223333:role/ExampleAdminRole" }, "Action":"kms:*", "Resource":"*" }, { "Sid":"AllowKeyUseForExampleRole", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::111122223333:role/ExampleUserRole" }, "Action":[ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource":"*" } ]

데이터 API 암호화 컨텍스트

암호화 컨텍스트는 데이터에 대한 추가 컨텍스트 정보를 포함하는 키-값 페어의 선택적 집합입니다. AWS KMS는 암호화 컨텍스트를 인증된 암호화를 지원하기 위한 추가 인증 데이터로 사용합니다. 데이터 암호화 요청에 암호화 컨텍스트를 포함하는 경우, AWS KMS는 암호화된 데이터에 암호화 컨텍스트를 바인딩합니다. 이 데이터를 해독하려면 요청에 동일한 암호화 컨텍스트를 포함해야 합니다.

데이터 API는 프로비저닝된 클러스터의 모든 AWS KMS 암호화 작업에서 동일한 세 개의 암호화 컨텍스트 키-값 페어를 사용합니다.

  • aws:redshift:arn - 클러스터의 Amazon 리소스 이름(ARN)

  • aws:redshift:createtime - 클러스터 생성을 요청한 시점의 타임스탬프

  • serviceNameRedshiftDataAPI

"EncryptionContextSubset": { "aws:redshift:arn": "arn:aws:redshift:us-east-1:123456789012:cluster:redshift-cluster", "aws:redshift:createtime": "20250815T0000Z", "serviceName": "RedshiftDataAPI", }

데이터 API는 서버리스 작업 그룹의 모든 AWS KMS 암호화 작업에 두 개의 암호화 컨텍스트 키-값 페어를 사용합니다.

  • aws:redshift-serverless:arn - 네임스페이스의 Amazon 리소스 이름(ARN)

  • serviceName – RedshiftDataAPI

"EncryptionContextSubset": { "aws:redshift-serverless:arn": "arn:aws:redshift-serverless:us-east-1:123456789012:namespace:12345678-1234-1234-1234-123456789012", "serviceName": "RedshiftDataAPI" }

암호화에 대한 자세한 내용은 AWS KMS의 암호화 세부 정보 소개를 참조하세요. Amazon Redshift 및 AWS KMS 통합에 대한 자세한 내용은 Amazon Redshift가 AWS KMS를 사용하는 방법을 참조하세요.