Docs Menu

Atlas 데이터 암호화 지침

Atlas는 전송 중, 미사용, 사용 중 데이터를 보호하는 여러 암호화 기능을 제공하여 전체 수명 주기 동안 데이터를 안전하게 보호합니다.

전송 중 암호화는 클라이언트와 서버 간 전송 중에 데이터를 보호하여 이동 중에는 데이터를 검사할 수 없도록 합니다. Atlas 에서 클러스터에 대한 모든 네트워크 트래픽은 기본값 으로 활성화되며 비활성화할 수 없는 TLS(전송 계층 보안)에 의해 보호됩니다. 노드 간에 전송되는 데이터는 전송 중에 TLS를 사용하여 암호화됨 전체에서 안전한 통신을 보장합니다.

Atlas 에서 사용할 TLS 버전을 선택할 수 있습니다. TLS 1.2 및 최소 키 길이가 128 비트인 것이 권장되는 기본값 설정입니다. 전송 중인 모든 암호화 OpenSSL FIPS 객체 모듈에서 지원됩니다.

클라이언트 애플리케이션과 MongoDB Atlas 간에 TLS를 사용한 전송 중 암호화 보여주는 이미지입니다.
클릭하여 확대

미사용 데이터 암호화를 사용하면 디스크의 모든 데이터가 암호화됨 되고 승인된 프로세스 나 애플리케이션 에서 해독한 후에만 볼 수 있습니다. Atlas 에서 고객 데이터는 AES-256를 사용하여 자동으로 암호화됨 . 이 프로세스 cloud 제공자의 디스크 암호화 활용하며, 제공자 는 암호화 키를 관리합니다. 이 프로세스 비활성화할 수 없습니다.

기본값으로 미사용 데이터 암호화는 볼륨 수준 암호화입니다.

또한 Amazon Web Services KMS, Google Cloud Platform KMS 또는 Azure Key Vault 와 같은 KMS (KMS )에 자체 고객 관리 키( CMK )를 가져와 데이터베이스 수준 암호화 활성화 할 수 있습니다. 이 기능 파일 수준 암호화 제공하며 TDE(투명한 데이터 암호화)에 해당하여 엔터프라이즈 TDE 요구 사항을 충족합니다. 고객 키 관리 통한 암호화는 추가적인 기밀성과 데이터 세분화를 위해 또 다른 보안 계층을 추가합니다.

자세한 학습 은 고객 키 관리를 사용한 미사용 데이터 암호화를 참조하세요.

추가 고객 관리형 키를 사용한 미사용 데이터 암호화 보여주는 이미지입니다.
클릭하여 확대

사용 중 암호화는 데이터가 처리되는 동안 데이터를 보호합니다. MongoDB는 데이터 보호 요구 사항을 충족하기 위해 클라이언트 사이드 필드 레벨 암호화와 Queryable Encryption이라는 두 가지 암호화 기능을 사용합니다.

클라이언트 측 필드 레벨 암호화 (CSFLE)는 클라이언트 애플리케이션 중요한 데이터를 MongoDB database 에 저장하기 전에 암호화할 수 있도록 하는 사용 중 암호화 역량 입니다. 민감한 데이터는 투명하게 암호화됨, 수명 주기 동안 암호화됨 유지되며, 클라이언트 사이드에서만 해독됩니다.

문서 내의 개별 필드, 문서 내의 여러 필드 또는 전체 문서를 선택적으로 암호화할 수 있습니다. MongoDB 드라이버를 사용하여 각 필드를 자체 키로 보호하고 클라이언트에서 원활하게 암호를 해독할 수도 있습니다. CSFLE는 인증된 CBC 모드에서 AES-256을 사용하여 데이터를 암호화합니다.

또한 쿼리할 수 없지만 특정 보안 요구 사항에 필요할 수 있는 무작위 암호화 선택할 수 있습니다.

다음 다이어그램은 사용자 레코드가 MongoDB database 에 저장되고 클라이언트 가 쿼리하는 CSFLE 워크플로를 보여줍니다. 사용자의 사회 보장 번호(SSN)는 데이터베이스 에 저장되기 전에 암호화됨 됩니다. 애플리케이션 이 필드 에 대한 기본 동등성 쿼리 제출하면 MongoDB 운전자 키를 사용하여 클라이언트 사이드에서 쿼리 암호화하고 암호화됨 쿼리 서버 로 보냅니다. 서버 암호화됨 결과를 클라이언트 에 반환한 다음 클라이언트는 결과를 해독한 후 인증된 클라이언트 에 읽기 가능한 일반 텍스트로 반환합니다.

CSFLE는 모든 주요 cloud 및 온프레미스 키 관리 서비스를 지원합니다.

클라이언트 측 필드 레벨 암호화(CSFLE) 워크플로 예시를 보여주는 이미지입니다.
클릭하여 확대

Queryable Encryption은 민감한 데이터가 쿼리될 때 해당 데이터를 보호하는 데 도움이 됩니다. CSFLE와 마찬가지로, 이 기능은 애플리케이션이 MongoDB 데이터베이스에 데이터를 저장하기 전에 클라이언트 측에서 데이터를 암호화할 수 있도록 해줍니다. 또한 이 기능을 통해 애플리케이션은 암호화된 검색 알고리즘을 사용하여 암호화된 데이터에 대해 동등성 쿼리와 같은 표현형 쿼리를 직접 수행할 수 있습니다. Queryable Encryption은 민감한 정보에 대한 쿼리 기능을 유지하면서 보호를 보장합니다. Queryable Encryption은 항상 비결정적 암호화를 사용합니다.

Queryable Encryption 에 사용되는 알고리즘에 대해 학습 Queryable Encryption 백서를 참조하세요.

다음 다이어그램은 사용자의 기록이 MongoDB 데이터베이스에 저장되고 클라이언트에 의해 쿼리되는 Queryable Encryption 워크플로를 보여줍니다. 사용자의 생년월일(DOB)은 데이터베이스에 저장되기 전에 암호화됩니다. 애플리케이션이 필드에 표현식 범위 쿼리를 제출하면 MongoDB 드라이버는 키를 사용하여 쿼리를 암호화하고 암호화 토큰을 MongoDB 서버에 전달합니다. 서버는 실제 데이터를 알지 못한 채 쿼리를 처리하기 위해 암호화된 검색 알고리즘을 사용합니다. 마지막으로, 드라이버는 키를 사용하여 쿼리 결과를 해독하고 읽을 수 있는 일반 텍스트 형식으로 인증된 클라이언트에게 반환합니다.

Queryable Encryption 워크플로 예시를 보여주는 이미지입니다.
클릭하여 확대

클러스터를 프로비저닝 때 다음 보안 권장 사항을 고려하세요.

프로젝트 수준에서 고객 키 관리 통해 암호화 활성화. 활성화 하면 설정이 프로젝트 내에서 생성된 모든 클러스터에 자동으로 적용되어 환경 전체에서 일관적인 데이터 보호가 보장됩니다. Amazon Web Services KMS, Google Cloud Platform KMS 또는 Azure Key Vault 와 같은 KMS (KMS )를 사용하는 것이 좋습니다.

스테이징 및 프로덕션 환경에서는 나중에 애플리케이션 개발 팀에 의존하여 클러스터를 구성하지 않도록 클러스터를 프로비저닝할 때 고객 키 관리 사용하여 암호화 활성화 좋습니다.

개발 및 테스트 환경의 경우 비용을 절약하기 위해 고객 키 관리 통한 암호화 건너뛰는 것이 좋습니다. 그러나 의료 또는 금융 서비스 산업과 같이 민감한 데이터를 Atlas 에 저장 경우 개발 및 테스트 환경에서도 고객 키 관리 사용하여 암호화 활성화하는 것이 좋습니다.

고객 키 관리로 암호화를 활성화하는 방법은 다음 방법을 사용하세요.

새로운 Atlas 조직, 프로젝트 및 클러스터를 프로비저닝할 때 고객 키 관리로 암호화를 구성하는 방법을 알아보려면 자동화 예시: Atlas 조직, 프로젝트 및 클러스터.

프로비저닝 프로세스 중에는 데이터의 특정 필드의 민감도를 평가하고 분류하여 암호화 가 필요한 데이터와 이러한 그룹에 적용 할 전역 제한 사항을 결정하는 것도 좋습니다. 다음 데이터 모델링 권장사항 외에도 일반적인 가이드라인에 따라 모든 민감한 필드에 Queryable Encryption 적용 좋습니다.

다음 데이터 분류 수준을 점 으로 삼을 수 있습니다.

  • 공개 데이터: 데이터의 무단 공개, 변경 또는 파기가 발생할 경우 회사에 미치는 위험이 거의 또는 전혀 없는 데이터입니다. 기밀성은 크게 문제가 되지 않지만, 공개 데이터의 무단 수정이나 파괴를 방지하기 위해 권한 부여 제어를 적용 해야 합니다.

    예제: 제품, 브로슈어, 교육 정보

  • 비공개 데이터: 무단 공개, 변경 또는 파기가 발생할 경우 회사에 중간 수준의 위험을 초래하는 데이터입니다. 기본적으로 제한 또는 공개 데이터로 명시적으로 분류되지 않은 모든 기관 데이터는 비공개 데이터로 취급해야 합니다. PII와 같은 개인 데이터를 포함하는 필드에는 반드시 CSFLE 또는 Queryable Encryption을 적용해야 합니다.

    예시: 고객 정보, 계약, 제품 비용

  • 제한된 데이터: 데이터의 무단 공개, 변경 또는 파기가 발생할 경우 회사에 심각한 위험을 초래하는 데이터입니다. 모든 필드에 대한 CSFLE 또는 Queryable Encryption , 고객 키 관리 통한 암호화 등 제한된 데이터에 최고 수준의 보안 제어를 적용하여 보안을 강화합니다.

    예시: 수익 정보, 급여, 보안 위험

다음 예에서는 자동화 용 Atlas 도구를 사용하여고객 키 관리 로 암호화 구성합니다.

고객 키 관리로 암호화를 구성하기 전에 조직, 프로젝트 및 클러스터를 생성해야 합니다. 자세한 내용을 보려면 자동화 예시: Atlas 조직, 프로젝트 및 클러스터를 참조하십시오.

개발 및 테스트 환경에서는 비용 절감을 위해 고객 키 관리 암호화를 생략하는 것을 고려하십시오. 단, 규제가 엄격한 산업에 있거나 민감한 데이터를 저장하는 경우는 예외입니다. 자세히 알아보려면 Atlas 조직, 프로젝트 및 클러스터에 대한 권장 사항을참조하세요.

스테이징 및 프로덕션 환경에서 클러스터를 프로비저닝할 때 고객 키 관리로 암호화를 활성화할 것을 권장합니다. 자세히 알아보려면 Atlas 조직, 프로젝트 및 클러스터에 대한 권장 사항을 참조하세요.

Terraform을 사용하여 고객 키 관리로 암호화를 활성화하려면 다음 리소스를 생성하세요. ID와 이름을 사용자의 값으로 변경합니다.

전체 구성 예시는 Atlas Terraform 제공자 예제를 참조하세요.

또는 구성 프로세스 간소화하기 위해 미사용 데이터 암호화 Terraform 모듈을 사용할 수 있습니다.

resource "mongodbatlas_cloud_provider_access_setup" "setup_only" {
project_id = var.atlas_project_id
provider_name = "AWS"
}
resource "mongodbatlas_cloud_provider_access_authorization" "auth_role" {
project_id = var.atlas_project_id
role_id = mongodbatlas_cloud_provider_access_setup.setup_only.role_id
aws {
iam_assumed_role_arn = aws_iam_role.test_role.arn
}
}
resource "mongodbatlas_encryption_at_rest" "test" {
project_id = var.atlas_project_id
aws_kms_config {
enabled = true
customer_master_key_id = aws_kms_key.kms_key.id
region = var.atlas_region
role_id = mongodbatlas_cloud_provider_access_authorization.auth_role.role_id
}
}
data "mongodbatlas_encryption_at_rest" "test" {
project_id = mongodbatlas_encryption_at_rest.test.project_id
}
output "is_aws_kms_encryption_at_rest_valid" {
value = data.mongodbatlas_encryption_at_rest.test.aws_kms_config.valid
}

전체 구성 예시는 Atlas Terraform 제공자 예제를 참조하세요.

resource "mongodbatlas_encryption_at_rest" "test" {
project_id = var.atlas_project_id
azure_key_vault_config {
enabled = true
azure_environment = "AZURE"
tenant_id = var.azure_tenant_id
subscription_id = var.azure_subscription_id
client_id = var.azure_client_id
secret = var.azure_client_secret
resource_group_name = var.azure_resource_group_name
key_vault_name = var.azure_key_vault_name
key_identifier = var.azure_key_identifier
}
}
data "mongodbatlas_encryption_at_rest" "test" {
project_id = mongodbatlas_encryption_at_rest.test.project_id
}
output "is_azure_encryption_at_rest_valid" {
value = data.mongodbatlas_encryption_at_rest.test.azure_key_vault_config.valid
}
resource "mongodbatlas_encryption_at_rest" "test" {
project_id = var.atlas_project_id
google_cloud_kms_config {
enabled = true
service_account_key = "{\"type\": \"service_account\",\"project_id\": \"my-project-common-0\",\"private_key_id\": \"e120598ea4f88249469fcdd75a9a785c1bb3\",\"private_key\": \"-----BEGIN PRIVATE KEY-----\\nMIIEuwIBA(truncated)SfecnS0mT94D9\\n-----END PRIVATE KEY-----\\n\",\"client_email\": \"my-email-kms-0@my-project-common-0.iam.gserviceaccount.com\",\"client_id\": \"10180967717292066\",\"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\"token_uri\": \"https://accounts.google.com/o/oauth2/token\",\"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/my-email-kms-0%40my-project-common-0.iam.gserviceaccount.com\"}"
key_version_resource_id = "projects/my-project-common-0/locations/us-east4/keyRings/my-key-ring-0/cryptoKeys/my-key-0/cryptoKeyVersions/1"
}
}

이 예시 에 대한 자세한 구성 옵션 및 정보는 Terraform 설명서를 참조하세요.