데이터 카탈로그 암호화 - AWS Glue

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

데이터 카탈로그 암호화

AWS Glue Data Catalog 암호화는 민감한 데이터에 대한 보안을 강화합니다. AWS Glue는 AWS Key Management Service(AWS KMS)와 통합되어 데이터 카탈로그에 저장된 메타데이터를 암호화합니다. AWS Glue 콘솔 또는 AWS CLI를 사용하여 데이터 카탈로그의 리소스에 대한 암호화 설정을 활성화하거나 비활성화할 수 있습니다.

데이터 카탈로그의 암호화를 활성화하면 새로 만드는 모든 객체가 암호화됩니다. 암호화를 비활성화하면 새로 만든 객체는 암호화되지 않지만 기존의 암호화된 객체는 암호화된 상태로 유지됩니다.

AWS 관리형 암호화 키 또는 고객 관리 암호화 키를 사용하여 전체 데이터 카탈로그를 암호화할 수 있습니다. 키 유형 및 상태에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 AWS Key Management Service 개념을 참조하세요.

AWS 관리형 키

AWS 관리형 키는 AWS KMS와 통합된 AWS 서비스가 고객의 계정에서 고객 대신 생성하고 관리하고 사용하는 KMS 키입니다. 계정에서 AWS 관리형 키를 확인하고 키 정책을 확인하며 AWS CloudTrail 로그에서의 사용을 감사할 수 있습니다. 하지만 이러한 키를 관리하거나 이들의 권한을 변경할 수는 없습니다.

저장된 암호화는 메타데이터를 암호화하는 데 사용되는 AWS Glue에 대한 AWS 관리형 키를 관리하기 위해 AWS KMS와 자동으로 통합됩니다. 메타데이터 암호화를 활성화할 때 AWS 관리형 키가 없는 경우 AWS KMS가 자동으로 새 키를 생성합니다.

자세한 내용은 AWS 관리형 키를 참조하세요.

고객 관리형 키

고객 관리형 키는 사용자가 생성, 소유 및 관리하는 AWS 계정의 KMS 키입니다. 이러한 KMS 키를 완전히 제어할 수 있습니다. 다음을 할 수 있습니다.

  • 키 정책, IAM 정책, 권한 부여 설정 및 관리

  • 활성화 및 비활성화

  • 암호화 자료 교체

  • 태그 추가

  • 이를 참조하는 별칭 생성

  • 이를 삭제하도록 예약

고객 관리형 키의 권한 관리에 대한 자세한 내용은 고객 관리형 키를 참조하세요.

중요

AWS Glue에서는 대칭 고객 관리형 키만 지원합니다. KMS 키 목록에는 대칭 키만 표시됩니다. 그러나 Choose a KMS key ARN(KMS 키 ARN 선택)을 선택하면 콘솔에서 모든 키 유형에 대해 ARN을 입력할 수 있습니다. 대칭 키에 대한 ARN만 입력해야 합니다.

대칭 고객 관리형 키를 생성하려면 AWS Key Management Service 개발자 안내서의 대칭 고객 관리형 키 생성 단계를 따르세요.

저장된 데이터 카탈로그 암호화를 활성화하면 다음 리소스 유형이 KMS 키를 사용하여 암호화됩니다.

  • 데이터베이스 수

  • 파티션

  • 테이블 버전

  • 열 통계값

  • 사용자 정의 함수

  • 데이터 카탈로그 보기

AWS Glue 암호화 컨텍스트

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

"encryptionContext": { "glue_catalog_id": "111122223333" }

AWS 관리형 키 또는 대칭 고객 관리형 키를 사용하여 데이터 카탈로그를 암호화하는 경우 감사 기록 및 로그의 암호화 컨텍스트를 사용하여 키가 어떻게 사용되고 있는지 파악할 수도 있습니다. 암호화 컨텍스트는 AWS CloudTrail 또는 Amazon CloudWatch 로그에서 생성되는 로그에도 나타납니다.

암호화 활성화

AWS Glue 콘솔의 데이터 카탈로그 설정에서 또는 AWS CLI를 사용하여 AWS Glue Data Catalog 객체에 대한 암호화를 활성화할 수 있습니다.

Console
콘솔을 사용하여 암호화 활성화
  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/glue/에서 AWS Glue 콘솔을 엽니다.

  2. 탐색 창의 데이터 카탈로그를 선택합니다.

  3. 데이터 카탈로그 설정 페이지에서 메타데이터 암호화 확인란을 선택하고 AWS KMS 키를 선택합니다.

    암호화를 사용 설정할 때 고객 관리 키를 지정하지 않으면 암호화 설정에서 AWS 관리형 KMS 키를 사용합니다.

  4. (선택 사항) 고객 관리형 키를 사용하여 데이터 카탈로그를 암호화하는 경우, 데이터 카탈로그는 리소스를 암호화 및 해독하기 위해 IAM 역할을 등록할 수 있는 옵션을 제공합니다. AWS Glue가 사용자를 대신하여 수행할 수 있는 IAM 역할 권한을 부여해야 합니다. 여기에는 데이터 암호화 및 암호 해독을 위한 AWS KMS 권한이 포함됩니다.

    데이터 카탈로그에서 새 리소스를 생성하면 AWS Glue가 데이터 암호화를 위해 제공된 IAM 역할을 맡습니다. 마찬가지로 소비자가 리소스에 액세스할 때 AWS Glue가 데이터 암호 해독을 위해 IAM 역할을 맡습니다. 필요한 권한이 있는 IAM 역할을 등록하면 호출 주체는 더 이상 키에 액세스하고 데이터를 해독하는 데 권한이 필요하지 않습니다.

    중요

    고객 관리형 키를 사용하여 데이터 카탈로그 리소스를 암호화하는 경우에만 KMS 작업을 IAM 역할에 위임할 수 있습니다. 현재 KMS 역할 위임 기능은 데이터 카탈로그 리소스를 암호화하는 데 AWS 관리형 키를 사용하는 것을 지원하지 않습니다.

    주의

    IAM 역할이 KMS 작업을 위임하도록 설정하면 이전에 AWS 관리형 키를 사용하여 암호화되었던 데이터 카탈로그 리소스에 더 이상 액세스할 수 없습니다.

    1. AWS Glue가 사용자를 대신하여 데이터를 암호화하고 암호를 해독할 수 있는 IAM 역할을 활성화하려면 KMS 작업을 IAM 역할에 위임 옵션을 선택합니다.

    2. 다음으로 IAM 역할을 선택합니다.

      IAM 역할을 생성하려면 AWS Glue의 IAM 역할 생성을 참조하십시오.

      AWS Glue가 데이터 카탈로그에 액세스하기 위해 가정하는 IAM 역할에는 데이터 카탈로그의 메타데이터를 암호화 및 암호 해독을 위한 권한이 있어야 합니다. IAM 역할을 생성하여 다음 인라인 정책을 연결할 수 있습니다.

      • 다음 정책을 추가하여 데이터 카탈로그의 암호화 및 암호 해독을 위한 AWS KMS 권한을 포함하세요.

        { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:<region>:<account-id>:key/<key-id>" } ] }
      • 다음으로 AWS Glue 서비스에 대한 역할에 다음 신뢰 정책을 추가하여 IAM 역할을 위임합니다.

        { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
      • 그런 다음 IAM 역할에 iam:PassRole 권한을 추가합니다.

        { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::<account-id>:role/<encryption-role-name>" ] } ] }

    암호화를 사용 설정할 때 AWS Glue가 맡을 IAM 역할을 지정하지 않은 경우 데이터 카탈로그에 액세스하는 주체는 다음 API 작업을 수행할 수 있는 권한이 있어야 합니다.

    • kms:Decrypt

    • kms:Encrypt

    • kms:GenerateDataKey

AWS CLI
SDK 또는 AWS CLI을 사용하여 암호화 활성화
  • PutDataCatalogEncryptionSettings API 작업을 사용합니다. 키를 지정하지 않으면 AWS Glue는 고객 계정에 대해 AWS 관리형 암호화 키를 사용하여 데이터 카탈로그를 암호화합니다.

    aws glue put-data-catalog-encryption-settings \ --data-catalog-encryption-settings '{ "EncryptionAtRest": { "CatalogEncryptionMode": "SSE-KMS-WITH-SERVICE-ROLE", "SseAwsKmsKeyId": "arn:aws:kms:<region>:<account-id>:key/<key-id>", "CatalogEncryptionServiceRole":"arn:aws:iam::<account-id>:role/<encryption-role-name>" } }'

암호화를 활성화하면 데이터 카탈로그 객체에서 생성하는 모든 객체가 암호화됩니다. 이 설정을 삭제하면 데이터 카탈로그에서 생성하는 객체가 더 이상 암호화되지 않습니다. 필요한 KMS 권한을 사용하여 데이터 카탈로그의 기존 암호화된 객체에 계속 액세스할 수 있습니다.

중요

AWS KMS 키는 데이터 카탈로그에 함께 암호화된 객체의 AWS KMS 키 스토어에서 계속 사용할 수 있어야 합니다. 키를 제거하면 객체의 암호를 해독할 수 없습니다. 일부 시나리오에서는 데이터 카탈로그 메타데이터에 대한 액세스를 방지하기 위에 이것이 필요할 수 있습니다.

AWS Glue에 대한 KMS 키 모니터링

데이터 카탈로그 리소스와 함께 KMS 키를 사용하는 경우 AWS CloudTrail 또는 Amazon CloudWatch 로그를 사용하여 AWS Glue가 AWS KMS로 보내는 요청을 추적할 수 있습니다. AWS CloudTrail은 AWS Glue가 KMS 키로 암호화된 데이터에 액세스하기 위해 호출하는 KMS 작업을 모니터링하고 기록합니다.

다음 예제는 DecryptGenerateDataKey 작업에 대한 AWS CloudTrail 이벤트입니다.

Decrypt
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAXPHTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAXPHTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "111122223333", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "creationDate": "2024-01-10T14:33:56Z", "mfaAuthenticated": "false" } }, "invokedBy": "glue.amazonaws.com" }, "eventTime": "2024-01-10T15:18:11Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "eu-west-2", "sourceIPAddress": "glue.amazonaws.com", "userAgent": "glue.amazonaws.com", "requestParameters": { "encryptionContext": { "glue_catalog_id": "111122223333" }, "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "43b019aa-34b8-4798-9b98-ee968b2d63df", "eventID": "d7614763-d3fe-4f84-a1e1-3ca4d2a5bbd5", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:<region>:111122223333:key/<key-id>" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management", "sessionCredentialFromConsole": "true" }
GenerateDataKey
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAXPHTESTANDEXAMPLE:V_00_GLUE_KMS_GENERATE_DATA_KEY_111122223333", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/V_00_GLUE_KMS_GENERATE_DATA_KEY_111122223333", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAXPHTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "AKIAIOSFODNN7EXAMPLE", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "creationDate": "2024-01-05T21:15:47Z", "mfaAuthenticated": "false" } }, "invokedBy": "glue.amazonaws.com" }, "eventTime": "2024-01-05T21:15:47Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "eu-west-2", "sourceIPAddress": "glue.amazonaws.com", "userAgent": "glue.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:eu-west-2:AKIAIOSFODNN7EXAMPLE:key/AKIAIOSFODNN7EXAMPLE", "encryptionContext": { "glue_catalog_id": "111122223333" }, "keySpec": "AES_256" }, "responseElements": null, "requestID": "64d1783a-4b62-44ba-b0ab-388b50188070", "eventID": "1c73689b-2ef2-443b-aed7-8c126585ca5e", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-2:111122223333:key/AKIAIOSFODNN7EXAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }