Atlas 데이터베이스 배포를 위한 다음과 같은 보안 네트워크 구성 기본값을 제공합니다.
필수 TLS 연결 암호화
하나 이상의 전용 클러스터가 있는 모든 프로젝트에 대한VPC
IP 액세스 목록을 사용하고 명시적으로 선언한 소스에서만 데이터베이스 연결을 허용하는 인증
고유한 보안 요구 사항과 기본 설정을 충족하도록 이러한 보호 기능을 추가로 구성할 수 있습니다.
이 페이지의 권장 사항을 사용하여 클러스터의 네트워크 보안 구성을 계획하세요.
참고
The MongoDB Atlas Shared Responsibility Model defines the complementary duties of MongoDB and its customers in maintaining a secure and resilient data environment. Under this framework, MongoDB manages the security and operational integrity of the underlying platform, while customers are responsible for the configuration, management, and data policies of their specific deployments. For a detailed breakdown of ownership across security and operational excellence, see Shared Responsibility Model.
Atlas 네트워크 보안 기능
Atlas는 데이터베이스에 대한 모든 연결에 TLS 암호화를 시행합니다.
M110+ 전용 클러스터 사용을 권장합니다. 모든 Atlas 프로젝트에서 하나 이상의 M10+ 전용 클러스터가 있으면 각 클러스터는 고유의 전용 클러스터를 받기 때문입니다.
AWS 또는 Google Cloud의 VPC
Azure 의 VNet.
Atlas 모든 전용 클러스터를 이 VPC 또는 VNet 내에 배포합니다.
기본적으로 클러스터에 대한 모든 액세스는 차단됩니다. 다음 방법 중 하나로 인바운드 연결을 명시적으로 허용해야 합니다.
Atlas IP 액세스 목록 에 자동으로 추가하는 비공개 엔드포인트 추가합니다. 다른 액세스 자동으로 추가되지 않습니다.
VPC 또는 VNet 피어링을 사용하여 비공개 IP 주소를 추가합니다.
IP 액세스 목록 에 공용 IP 주소를 추가합니다.
보안을 강화하기 위해 여러 방법을 함께 사용할 수도 있습니다.
TLS
Atlas 데이터베이스에 대한 연결에 TLS 암호화 강제로 적용합니다. TLS 1.2 이 기본값 프로토콜 입니다. 자세한 학습 은 추가 설정 구성의 Set Minimum TLS Protocol Version 섹션을 참조하세요.
IP 액세스 목록
Atlas 관리자로서 다음 작업을 수행할 수 있습니다.
IP 액세스 목록을 구성하여 어떤 IP 주소가 데이터베이스에 인증 시도를 할 수 있는지 제한합니다.
IP 액세스 목록에 추가한 IP 주소 및 CIDR 블록 IP 범위에서만 액세스를 허용합니다. 개별 /32 주소와 같이 가능한 가장 작은 네트워크 세그먼트에만 액세스를 허용하는 것이 좋습니다.
애플리케이션 서버 및 기타 클라이언트의 IP 주소가 IP 액세스 목록에 포함되어 있지 않은 경우 Atlas 클러스터에 대한 액세스를 차단할 수 있습니다.
사용자가 지정한 기간이 지나면 자동으로 만료되는 임시 액세스 목록의 항목을 설정할 수 있습니다.
방화벽 구성
클라이언트 애플리케이션 서버에서 Atlas로 연결할 때 아웃바운드 네트워크 연결을 차단하는 방화벽을 통과해야 한다면 방화벽에서 Atlas 호스트의 TCP 트래픽으로 아웃바운드 연결을 허용하도록 별도로 구성해야 합니다. 이를 통해 애플리케이션이 클러스터에 액세스할 수 있습니다.
수직 확장, 토폴로지 변경 또는 유지 관리 이벤트와 같은 클러스터 변경 대부분의 경우에 Atlas 클러스터의 공용 IP는 동일하게 유지됩니다. 그러나 복제본 세트에서 샤딩된 클러스터로의 변환, 샤드 추가 또는 지역 변경과 같은 특정 토폴로지 변경은 새로운 IP 주소를 사용해야 합니다.
In the case of converting from a replica set to a sharded cluster, the failure to reconnect the application clients might cause your application to suffer from data outages. If you use a DNS seed list connection string, your application automatically connects to the mongos for your sharded cluster. If you use a standard connection string, you must update your connection string to reflect your new cluster topology.
새 샤드를 추가하는 경우 애플리케이션 클라이언트를 다시 연결하지 못하면 애플리케이션 데이터 중단이 발생할 수 있습니다.
비공개 엔드포인트
비공개 엔드포인트는 사용자가 직접 관리하는 VPC에서 Atlas VPC로의 단방향 연결을 가능하게 하며, Atlas가 반대 방향의 연결을 시작하는 것은 허용하지 않습니다. 이를 통해 네트워크 신뢰 경계 확장 없이 Atlas와의 안전한 연결을 사용할 수 있습니다. 다음과 같은 비공개 엔드포인트를 사용할 수 있습니다.
AWS 프라이빗 링크, AWS VPC에서의 연결
Microsoft Azure Private Link, Microsoft Azure VNet에서의 연결용
비공개 서비스 연결, Google Cloud Platform VPC의 연결용
VPC/VNet 피어링
네트워크 피어링을 통해 자체 VPC를 Atlas VPC와 연결하여 트래픽을 비공개로 라우팅하고 데이터 흐름을 공용 인터넷에서 격리할 수 있습니다. Atlas는 VPC를 일대일로 Atlas 프로젝트에 매핑합니다.
VPC 연결을 통해 수행되는 대부분의 작업은 애플리케이션 환경에서 시작되므로 Atlas가 피어 VPC에 대한 아웃바운드 요청을 최소화합니다. 그러나 Atlas를 LDAP 인증을 사용하도록 구성하는 경우, Atlas가 LDAP 프로토콜을 통해 피어 VPC의 인증 엔드포인트로 아웃바운드 연결할 수 있도록 활성화해야 합니다. Atlas에서 8.0을(를) 사용하는 경우 LDAP 인증은 더 이상 지원되지 않습니다. Workforce Identity Federation 및 Workload Identity Federation을 사용하는 것이 좋습니다.
첫 번째 클러스터를 배포하기 전에 VPC 피어링 마법사를 사용하여 Atlas CIDR 블록을 선택할 수 있습니다. Atlas VPC CIDR 블록은 피어링할 예정인 모든 VPC 의 CIDR 블록과 중복되지 않아야 합니다. Atlas는 CIDR 블록에 따라 VPC 당 MongoDB 인스턴스 수를 제한합니다. 예시, /24의 CIDR 블록을 가진 프로젝트는 27 개의 3노드 복제본 세트에 해당하는 것으로 제한됩니다.
Atlas 네트워크 보안 권장 사항
비공개 엔드포인트로 보호되는 멀티 리전 배포에는 다음과 같은 고유한 고려 사항이 있습니다.
Atlas는 글로벌 비공개 엔드포인트에 대해 모든 Atlas 클러스터 노드를 가리키는 SRV 레코드를 자동으로 생성합니다. MongoDB 드라이버는 애플리케이션에서 각 SRV 레코드에 연결을 시도합니다. 이로 인해 DNS 복제를 기다릴 필요 없이 드라이버가 페일오버 이벤트를 처리할 수 있고 드라이버의 연결 문자열을 따로 업데이트하지 않아도 됩니다.
Atlas cluster 의 모든 노드에 대한 자동 SRV 기록 생성을 용이하게 하려면 애플리케이션 VPC 간에 VPC피어링 연결을 설정하고 PrivateLink 또는 이와 동등한 기능을 사용하여 애플리케이션 VPC 를 MongoDB VPC 에 연결해야 합니다.
Atlas 클러스터가 배포된 모든 리전에서 비공개 엔드포인트를 활성화해야 합니다.
Google Cloud Private Service Connect는 리전별로 다릅니다. 그러나 글로벌 액세스를 구성하여 다른 리전의 비공개 엔드포인트에 액세스할 수 있습니다.
To learn more, see Multi-Region Support.
모든 배포서버 패러다임 권장사항
다음 권장사항은 모든 배포서버 패러다임에 적용됩니다.
비공개 엔드포인트
네트워크 신뢰 경계 확장을 제한하기 위해 모든 신규 스테이징 및 프로덕션 프로젝트에 비공개 엔드포인트를 설정할 것이 좋습니다.
일반적으로 모든 Atlas 프로젝트에 비공개 엔드포인트를 사용하는 것을 권장합니다. 이러한 접근 방식은 가장 세분화된 보안을 제공하고 클라우드 네트워크가 확장됨에 따라 IP 액세스 목록 및 대규모 IP 주소 블록 관리에 따르는 관리 부담을 덜어주기 때문입니다. 각 엔드포인트에 비용이 부과됩니다. 따라서 낮은 환경에서는 비공개 엔드포인트가 필요하지 않을 수 있지만, 높은 환경에서는 네트워크 신뢰 경계의 확장을 제한하기 위해 비공개 엔드포인트를 활용해야 합니다.
온프레미스와 클라우드 배포 조합 때문에 애플리케이션이 배포된 VPC 또는 VNet이 서로 피어링할 수 없는 경우에는 리전 비공개 엔드포인트를 고려하는 것이 좋습니다
리전 비공개 엔드포인트를 사용하면 다음을 수행할 수 있습니다.
단일 비공개 엔드포인트를 여러 VNet 또는 VPC에 직접 피어링하지 않고 연결합니다.
리전 내 하나 이상의 서비스에 장애가 발생하는 부분 리전 장애를 완화할 수 있습니다.
리전 엔드포인트와 네트워크를 연결하려면 다음을 수행해야 합니다.
클러스터와 애플리케이션 간의 성공적인 연결 및 작동을 확인하기 위해 정기적이고 철저한 상태 점검을 수행할 수 있습니다. 클러스터와의 연결 상태를 빠르게 확인하려면
db.runCommand("ping")명령어로 핑을 보내거나rs.conf()를 실행하여 클러스터의 각 노드에 대한 세부 정보를 얻을 수 있습니다.각 리전에 대해 고유한 연결 문자열을 사용해야 합니다.
Atlas 로의 리전 간 라우팅을 사용하여 Atlas VPC 연결이 끊어지는 경우에도 가용성을 유지합니다.
To learn more about private endpoints in Atlas, including limitations and considerations, see Learn About Private Endpoints in Atlas. To learn how to set up private endpoints for your clusters, see Set Up a Private Endpoint for a Dedicated Cluster.
클라우드 공급자별 지침
AWS: Atlas에 연결해야 하는 모든 자체 관리형 VPC에 대해 VPC 피어링을 권장합니다. 글로벌 비공개 엔드포인트를 활용하세요.
Azure: Atlas와 연결해야 하는 모든 자체 관리 VNet 간 VNet 피어링을 권장합니다. 글로벌 비공개 엔드포인트를 활용하세요.
GCP: GlobalConnect를 사용할 경우 자체 관리 VPC 간 피어링은 필요하지 않습니다. 모든 Atlas 리전은 각 리전 내 자체 관리 VPC와 비공개 엔드포인트로 연결되어야 합니다.
GCP 비공개 엔드포인트 고려 사항 및 제한 사항
Atlas 서비스는 1024부터 시작하는 포트의 GCP Private Service Connect 엔드포인트를 통해 액세스할 수 있습니다. 포트는 클러스터 변경을 포함하되 이에 국한되지 않는 특정 상황에서 변경될 수 있습니다.
멀티 리전 클러스터를 배포하려면 모든 지역에서 GCP Private Service Connect가 활성화되어 있어야 합니다. 대상 리전 중 일부에서만 GCP Private Service Connect가 활성화되어 있는 경우 오류가 발생합니다.
드라이버가 멀티 리전 클러스터 내 모든 노드에 연결할 수 있도록 내부적으로 저장되는 연결 문자열의 수를 관리 가능한 수준으로 유지해야 합니다. 이는 드라이버가 클러스터 내에서 동적으로 할당되는 프라이머리 노드에 연결되어 데이터베이스의 모든 작업을 수행할 수 있도록 보장하기 위함입니다. 이를 위해서는 다음 방법 중 하나만 선택할 수 있습니다.
둘 이상의 리전 에 노드를 배포하고 리전당 하나 리전 비공개 엔드포인트를 갖습니다.
한 리전 에 여러 비공개 엔드포인트 가 있고 다른 비공개 엔드포인트 는 없습니다.
중요
이 제한은 모든 클라우드 공급자에 적용됩니다. 예를 들어 GCP의 단일 리전에서 둘 이상의 비공개 엔드포인트를 생성하는 경우 AWS 또는 다른 GCP 리전에서 비공개 엔드포인트를 생성할 수 없습니다.
To learn more, see Why are regionalized endpoints only available for sharded clusters?.
샤딩된 클러스터에서는 노드 간 트래픽이 기본적으로 클러스터 내 모든 노드에 연결된 mongos 프로세스를 통해 라우팅됩니다. 따라서 특정 리전에서 원하는 만큼의 비공개 엔드포인트를 생성할 수 있습니다. 자세한 내용은 멀티 리전 샤딩 클러스터를 위한 리전화된 비공개 엔드포인트(선택 사항)를 참조하세요.
여러 리전에 걸쳐 GCP Private Service Connect를 사용하는 Atlas 프로젝트를 배포 때 최대 40 개의 노드를 가질 수 있습니다. 이 합계에는 다음 인스턴스가 제외됩니다.
서로 통신하는GCP 리전
무료 클러스터 또는 공유 크러스터
GCP Private Service Connect는 가상 머신당 최대 1024 개의 발신 연결을 지원합니다. 따라서 단일 GCP 가상 머신에서 Atlas 클러스터로 1024 개를 초과하는 연결은 불가능합니다.
자세한 학습 은 GCP cloud NAT 문서를 참조하세요.
GCP Private Service Connect는 리전별로 다릅니다. 그러나 다른 리전 에서 비공개 엔드포인트 에 액세스 글로벌 액세스 구성할 수 있습니다.
To learn more, see Multi-Region Support.
IP 액세스 목록
CI/CD 파이프라인 또는 오케스트레이션 시스템과 같은 신뢰할 수 있는 IP 주소에서만 액세스 허용하도록 API 키 및 프로그래밍 방식 액세스 에 대한 IP 액세스 목록 구성하는 것이 좋습니다. 이러한 IP 액세스 목록은 서비스 계정을 프로비저닝 할 때 Atlas 컨트롤 플레인에서 설정하다 되며 클러스터 연결을 위해 Atlas 프로젝트 데이터 플레인에서 설정하다 수 있는 IP 액세스 목록과는 별개입니다.
IP 액세스 목록 구성할 때는 다음을 수행하는 것이 좋습니다.
팀 구성원이 임시 작업 위치에서 환경에 액세스해야 하거나 프로덕션 중단 상황을 해결하기 위해 사람이 프로덕션에 액세스해야 하는 긴급 상황에서는 임시 액세스 목록 항목을 사용합니다. 이러한 상황에 대비하기 위해 임시 액세스를 빠르게 추가할 수 있는 자동화 스크립트를 작성할 것이 좋습니다.
가능한 가장 작은 네트워크 세그먼트를 포함하도록 IP 액세스 목록 항목을 정의합니다. 이 작업을 수행하려면 가능한 경우 개별 IP 주소를 사용하고 대규모 CIDR 블록을 피합니다.
VPC/VNet 피어링
VPC 또는 VNet 피어링을 구성하는 경우 다음을 수행하는 것이 좋습니다.
엄격한 네트워크 신뢰 경계를 유지하려면 보안 그룹 및 네트워크 ACL 을 구성하여 Atlas 측 VPC 에서 애플리케이션 VPC 내부의 시스템에 대한 인바운드 액세스를 방지합니다.
민감한 애플리케이션 인프라와 Atlas VPC 사이에서 중개자 역할을 하는 새로운 VPC를 생성합니다. VPC는 비전이적이므로 Atlas에 액세스가 필요한 애플리케이션 구성 요소만 노출할 수 있습니다.
자동화 예시: Atlas 네트워크 보안
다음 예제에서는 IP 액세스 목록, VPC 피어링, 비공개 엔드포인트를 사용하여 애플리케이션 환경과 Atlas cluster 간의 연결을 구성합니다.
이러한 예시는 다음을 포함한 다른 권장 구성에도 적용됩니다.
개발/테스트 환경을 위해 클러스터 계층을
M10으로 설정합니다. 애플리케이션 크기에 맞는 권장 클러스터 계층을 알아보려면 클러스터 크기 가이드를 참조하세요.단일 리전, 3-노드 복제본 세트/샤드 배포 토폴로지
Our examples use AWS, Azure, and Google Cloud interchangeably. You can use any of these three cloud providers, but you must change the region name to match the cloud provider. To learn about the cloud providers and their regions, see Cloud Providers.
중간 규모 애플리케이션을 위해 클러스터 계층을
M30으로 설정합니다. 애플리케이션 크기에 맞는 권장 클러스터 계층을 알아보려면 클러스터 크기 가이드를 참조하세요.단일 리전, 3-노드 복제본 세트/샤드 배포 토폴로지
Our examples use AWS, Azure, and Google Cloud interchangeably. You can use any of these three cloud providers, but you must change the region name to match the cloud provider. To learn about the cloud providers and their regions, see Cloud Providers.
참고
Atlas CLI로 연결을 구성하기 전에 다음을 수행해야 합니다.
Connect from the Atlas CLI using the steps for Service Account.
IP 액세스 목록 항목 만들기
허용하려는 각 연결에 대해 다음 명령을 실행하세요. 항목을 적절한 옵션과 실제 값으로 변경하세요.
atlas accessList create 192.0.2.15 --type ipAddress --projectId 5e2211c17a3e5a48f5497de3 --comment "IP address for app server 2" --output json
For more configuration options and information about this example, see atlas accessLists create.
For information on how to create an IP access list entry with AWS, GCP and Azure, see Set Up a Private Endpoint for a Dedicated Cluster
VPC 피어링 연결 생성
Atlas VPC 와 피어링하려는 각 VPC 에서 다음 코드를 실행합니다. aws를 azure 또는 gcp로 적절하게 대체하고 옵션과 값을 해당 VPC 또는 VNet에 적합한 것으로 변경하세요:
atlas networking peering create aws --accountId 854333054055 --atlasCidrBlock 192.168.0.0/24 --region us-east-1 --routeTableCidrBlock 10.0.0.0/24 --vpcId vpc-078ac381aa90e1e63
이 예시 에 대한 자세한 구성 옵션 및 정보는 다음을 참조하세요.
Atlas 네트워킹 피어링은 Amazon Web Services Services VPC용 Amazon Web Services Services를 생성합니다.
atlas networking peering create azure, for Microsoft Azure VNets
atlas networking peering create gcp, for Google Cloud VPCs
비공개 엔드포인트 만들기
생성하려는 각 비공개 엔드포인트에 대해 다음 명령을 실행합니다. aws 을(를) azure 또는 gcp(으)로 적절히 바꾸고 옵션과 값을 VPC 또는 VNet에 적합한 것으로 변경합니다.
atlas privateEndpoints aws create --region us-east-1 --projectId 5e2211c17a3e5a48f5497de3 --output json
이 예시 에 대한 자세한 구성 옵션 및 정보는 다음을 참조하세요.
atlas privateEndpoints aws create, for connections from AWS VPCs
atlas privateEndpoints azure create, for connections from Microsoft Azure VNets
atlas privateEndpoints gcp create, for connections from GCP Private Service Connect
참고
Terraform으로 리소스를 생성하기 전에 다음을 수행해야 합니다.
결제 조직 만들고 결제 조직 에 대한 서비스 계정을 만듭니다. 터미널에서 다음 명령을 실행 하여 서비스 계정 자격 증명 환경 변수로 저장합니다.
export MONGODB_ATLAS_CLIENT_ID="<insert your client ID here>" export MONGODB_ATLAS_CLIENT_SECRET="<insert your client secret here>"
We also suggest 환경에 맞는 작업 공간을 만드는 것이 좋습니다.
IP 액세스 목록 항목 만들기
IP 액세스 목록 에 항목을 추가하려면 다음 파일 만들어 액세스 부여하려는 프로젝트 의 디렉토리 에 배치합니다. 값을 사용하도록 ID와 이름을 변경합니다.
accessEntryForAddress1.tf
# Add an entry to your IP Access List resource "mongodbatlas_access_list_api_key" "address_1" { org_id = "<org-id>" ip_address = "2.3.4.5" api_key_id = "a29120e123cd" }
파일을 생성한 후 프로젝트 디렉토리로 이동하여 다음 명령을 실행하여 Terraform을 초기화합니다.
terraform init
Terraform 계획을 보려면 다음 명령을 실행합니다.
terraform plan
Run the following command to add one entry to the IP access list for your project. The command uses the file and the MongoDB & HashiCorp Terraform to add the entry.
terraform apply
메시지가 표시되면 yes를 입력하고 Enter 키를 눌러 구성을 적용합니다.
VPC 피어링 연결 생성
애플리케이션 VPC 와 Atlas VPC 간에 피어링 연결을 생성하려면 다음 파일 생성하여 액세스 부여하려는 프로젝트의 디렉토리에 배치합니다. 값을 사용하도록 ID와 이름을 변경합니다.
vpcConnection.tf
# Define your application VPC resource "aws_default_vpc" "default" { tags = { Name = "Default VPC" } } # Create the peering connection request resource "mongodbatlas_network_peering" "mongo_peer" { accepter_region_name = "us-east-2" project_id = local.project_id container_id = one(values(mongodbatlas_advanced_cluster.test.container_id)) provider_name = "AWS" route_table_cidr_block = "172.31.0.0/16" vpc_id = aws_default_vpc.default.id aws_account_id = local.AWS_ACCOUNT_ID } # Accept the connection resource "aws_vpc_peering_connection_accepter" "aws_peer" { vpc_peering_connection_id = mongodbatlas_network_peering.mongo_peer.connection_id auto_accept = true tags = { Side = "Accepter" } }
파일 생성한 후 프로젝트 디렉토리 로 이동하여 다음 명령을 실행 Terraform을 초기화합니다.
terraform init
Terraform 계획을 보려면 다음 명령을 실행합니다.
terraform plan
Run the following command to add a VPC peering connection from your application to your project. The command uses the file and the MongoDB & HashiCorp Terraform to add the entry.
terraform apply
메시지가 표시되면 yes를 입력하고 Enter 키를 눌러 구성을 적용합니다.
비공개 링크 생성
PrivateLink를 만들려면 애플리케이션 VPC 에서 Atlas VPC</ub85c 다음 클라우드 공급자 특정 모듈 중 하나를 사용하세요. 연결하려는 프로젝트의 디렉토리에 다음 파일을 만들어 넣습니다. ID와 이름을 사용자의 값으로 변경합니다.
For AWS:
privateLink.tf
module "atlas_aws" { source = "terraform-mongodbatlas-modules/atlas-aws/mongodbatlas" version = "~> 0.3" project_id = "<project-id>" privatelink_endpoints = [ { region = "<aws-region>" subnet_ids = ["<subnet-id>"] } ] }
For Azure, use the atlas-azure module with the privatelink_endpoints attribute. For complete examples, see atlas-azure privatelink examples.
파일 생성한 후 프로젝트 디렉토리 로 이동하여 다음 명령을 실행 Terraform을 초기화합니다.
terraform init
Terraform 계획을 보려면 다음 명령을 실행합니다.
terraform plan
Run the following command to add a PrivateLink endpoint from your application to your project. The command uses the file and the MongoDB & HashiCorp Terraform to add the entry.
terraform apply
메시지가 표시되면 yes를 입력하고 Enter 키를 눌러 구성을 적용합니다.