Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ /
Atlas Architecture Center
/

Atlas ネットワークセキュリティに関するガイダンス

Atlas は、データベース配置用に次のような安全なネットワーク構成のデフォルトを提供します。

  • 必須の TLS/SSL 接続暗号化

  • 1 つ以上の専用クラスターを持つすべてのプロジェクトのVPC

  • IPアクセスリストを使用し、明示的に宣言したソースからのデータベース接続のみを受け入れる認証

これらの保護を、独自のセキュリティ ニーズと設定に合わせてさらに構成できます。

このページの推奨事項を使用して、クラスターのネットワークセキュリティ構成を計画します。

Atlas は、データベースへのすべての接続に TLS/SSL 暗号化を強制します。

M10+ 専有クラスターを使用することを推奨します。これは、1 つ以上の M10+ 専有クラスターを持つすべての Atlas プロジェクトが専用を提供するためです。

  • AWS または Google Cloud 上の VPC

  • Azure上の VNet。

Atlasは、すべての専有クラスターをこのVPCまたは VNet 内に配置します。

デフォルトでは、すべてのクラスターへのアクセスがブロックされます。次のいずれかの方法で、受信接続を明示的に許可する必要があります。

  • プライベートエンドポイントを追加します 。これは Atlas によってIP アクセス リストに自動的に追加されます。他のアクセスは自動的に追加されません。

  • VPCまたは VNet ピアリング を使用して、プライベートIPアドレスを追加します。

  • パブリックIPアドレスをIP アクセス リストに追加します。

また、セキュリティを強化するために、複数の方法を併用することもできます。

Atlas は、データベースへの接続に必須の TLS 暗号化を強制します。TLS 1.2 はデフォルトのプロトコルです。詳しくは「追加設定の構成」の「Set Minimum TLS Protocol Version」セクションを参照してください。

Atlas 管理者として、次の操作を行うことができます。

IPアクセス リスト を設定して、データベースへの認証を試行できるIPアドレスを制限します。

IP アクセス リストに追加したIPアドレスと CIDR ブロックIP範囲からのアクセスのみを許可します。個々の アドレスなど、可能な限り最小のネットワーク/32 セグメントへのアクセスを許可することをお勧めします。

IPアドレスがIP アクセス リストに含まれていない場合は、アプリケーションサーバーおよび他のクライアントが Atlas クラスターにアクセスすることを拒否します。

ユーザーが定義した期間後に自動的に期限切れとなる一時的なアクセス リスト エントリを設定します。

クライアントアプリケーションサーバーから Atlas に接続し、アウトバウンド ネットワーク接続をブロックするファイアウォールを経由する場合は、アプリケーションが Atlas ホスト上の TCP トラフィックにアウトバウンド接続を行えるようにファイアウォールも構成する必要があります。これにより、アプリケーションはクラスターにアクセスできるようになります。

Atlas クラスターのパブリック IP は、垂直スケーリングトポロジーの変更、またはメンテナンス イベントなどのクラスター変更において、過半数の場合変更しません。ただし、レプリカセットからシャーディングされたクラスターへの変換シャードの追加、またはリージョンの変更など、特定のトポロジーの変更では新しい IP アドレスを使用する必要があります。

レプリカセットからシャーディングされたクラスターへの変換の場合、アプリケーションクライアントの再接続に失敗すると、アプリケーションにデータが停止する可能性があります。 DNSシードリスト接続文字列を使用すると、アプリケーションがシャーディングされたクラスターの mongosに自動的に接続されます。標準の接続文字列を使用する場合は、新しい クラスタートポロジー を反映するように接続文字列を更新する必要があります。

新しいシャードを追加する場合、アプリケーションクライアントの再接続に失敗するとアプリケーションがデータ停止時を引き起こす可能性があります。

プライベートエンドポイントは、Atlas が相互接続を開始することを許可せずに、ユーザーが直接管理するVPCから Atlas VPCへの一方向接続を容易にします。これにより、ネットワーク信頼境界を拡張することなく、Atlas への安全な接続を使用できるようになります。次のプライベートエンドポイントが利用可能です。

「 MongoDB Atlasプライベートエンドポイントの動作方法を表すイメージ。」
クリックして拡大します

ネットワークピアリングを使用すると、独自のVPCを Atlas VPCに接続してトラフィックをプライベートにルーティングし、パブリック インターネットからデータフローを分離できます。 Atlas はVPCを 1 対 1 で Atlas プロジェクトにマッピングします。

VPC接続経由で実行されるほとんどの操作はアプリケーション環境から発生するため、Atlas がピアVPCへのアウトバウンド アクセス リクエストを行う必要が最小限に抑えられます。ただし、 LDAP認証を使用するように Atlas を構成する場合は、Atlas が LDAPプロトコル経由でピアVPCの認証エンドポイントにアウトバウンドで接続するように有効にする必要があります。 Atlas8 では. を使用して LDAP認証が非推奨になっていることに注意してください。代わりに0 Workforce IdP Workload Identity Federation を使用することをお勧めします。

最初のクラスターを配置する前に、 VPC ピアリング ウィザードを使用して Atlas CIDR ブロックを選択できます。Atlas VPC CIDR ブロックは、ピアリングする VPC CIDR ブロックと重複してはなりません。Atlas は、 CIDR ブロックに基づいて、 VPC あたりのMongoDBインスタンスの数を制限します。例、CIDR ブロックが /24 のプロジェクトは、27 3-ノードレプリカセットと同等に制限されます。

「 MongoDB Atlas VPC/VNet ピアリングの仕組みを表す画像」。
クリックして拡大します

単一のリージョンでの配置にのみ適用される推奨事項

単一リージョン配置には、Atlas ネットワーク セキュリティに関する固有の考慮事項はありません。

複数のリージョンまたは複数のクラウドプロバイダーにわたる配置にのみ適用される推奨事項

プライベートエンドポイントで保護されているマルチリージョン配置には、次の固有の考慮事項があります。

  • グローバル プライベートエンドポイントの場合、Atlas はすべての Atlas クラスター ノードをポイントする SRVレコードを自動的に生成します。 MongoDBドライバーは、アプリケーションから各 SRVレコードに接続しようとします。これにより、DNSレプリケーションを待たずに、ドライバーの接続文字列を更新する必要なく、ドライバーはフェイルオーバーイベントを処理できるようになります。

  • Atlas クラスター内のすべてのノードの SRVレコードの自動生成を容易にするには、アプリケーションVPC間でVPCピアリング接続を確立し、PrivateLink または同等の機能を使用して、アプリケーションVPCをMongoDB VPCに接続する必要があります。

  • Atlas クラスターが配置されているすべてのリージョンでプライベートエンドポイントを有効にする必要があります。

  • Google Cloud Private Service Connect はリージョン固有です。ただし、グローバル アクセスを設定して、異なるリージョンからプライベートエンドポイントにアクセスすることは可能です。

    詳しくは、「マルチリージョン サポート」を参照してください。

次の推奨事項は、すべての 配置パラダイムに適用されます。

ネットワークの信頼境界の拡大を制限するために、すべての新しいステージングおよび本番プロジェクトにはプライベート エンドポイントを設定することを推奨します。

一般的には、すべての Atlasプロジェクトに プライベートエンドポイント を使用することをお勧めします。これは、最も粒度の高いセキュリティを提供し、クラウドネットワークの規模に応じてIPアクセス リストや大規模なIPアドレスの管理から発生し得る管理負荷を軽減するためです。各エンドポイントにはコストがかかります。したがって、低い環境ではプライベートエンドポイントは必要ないかもしれませんが、上位の環境ではプライベートエンドポイントを活用して、ネットワークの信頼境界の拡張を制限する必要があります。

アプリケーションが配置されている VPC または VNet を相互にピアリングできない場合は、オンプレミスとクラウド配置の組み合わせが原因で、リージョン別プライベートエンドポイントの使用を検討してください。

リージョン プライベート エンドポイントを使用すると、次のことが可能です。

  • 相互に直接ピアリングせずに、単一のプライベートエンドポイントを複数の VNet または VPC に接続します。

  • リージョン内の 1 つ以上のサービスが失敗する部分的なリージョン障害を軽減します。

リージョン エンドポイントを使用してネットワーク化するには、次の操作を行う必要があります。

  • 定期的かつ堅牢にヘルスチェックを実行し、クラスターとアプリケーション間の接続と操作が成功したことを検証します。 db.runCommand("ping") コマンドでクラスターを ping接続をすばやく確認するか、rs.conf() を実行してクラスター内の各ノードに関する詳細情報を取得します。

  • 各リージョンに個別の接続文字列を使用します。

  • Atlas VPC が切断された場合に可用性を維持するには、Atlas へのクロスリージョン ルーティングを使用します。

制限や考慮事項を含む Atlas のプライベートエンドポイントの詳細については、「 Atlas のプライベートエンドポイントの詳細 」を参照してください。クラスターのプライベートエンドポイントを設定する方法については、「 専用クラスターのプライベートエンドポイントの設定 」を参照してください。

  • AWS : Atlas に接続する必要があるすべての自己管理型VPC でVPCピアリングを推奨します。グローバル プライベート エンドポイント を活用します。

  • Azure : Atlas に接続する必要があるすべての自己管理型型 VNet で VNet ピアリングを行うことを推奨します。グローバル プライベート エンドポイント を活用します。

  • GCP : GlobalConnect を使用する場合、自己管理型VPC 間でピアリングは必要ありません。すべての Atlas リージョンは、各リージョンの自己管理型VPCにプライベートエンドポイントを使用してネットワーク化する必要があります。

Atlas サービスには、ポート 27015 から 27017 の GCP Private Service Connect エンドポイントを介してアクセスします。ポートはクラスターの変更など、いくつかの特定状況下で変更可能です。

  • GCP Private Service Connect は、マルチリージョンクラスターを配置するすべてのリージョンでアクティブである必要があります。GCP Private Service Connect が、全リージョンでなく一部のターゲット リージョンでアクティブになっている場合は、エラーが表示されます。

  • ドライバーがマルチリージョンクラスター内のすべてのノードに接続できるようにする内部に保存される接続文字列の数を管理するために必要です。これは、ドライバーがクラスター内の動的に割り当てられたプライマリノードに接続され、次が可能であることを確認するために必要です:したがって、データベースに対してすべての操作を実行する場合は、次のいずれかの操作のみを実行できます。

    • 複数のリージョンにノードを配置し、リージョンごとに 1 つのプライベートエンドポイントを含めます。

    • 1 つのリージョンに複数のプライベートエンドポイントがあり、他のプライベートエンドポイントはありません。

      重要

      この制限は、クラウドプロバイダー全体に適用されます。例、 GCPの 1 つのリージョンに複数のプライベートエンドポイントを作成した場合は、 AWSやその他のGCPリージョンにプライベートエンドポイントを作成できません。

    詳しくは、「 リージョン化されたエンドポイントがシャーディングされたクラスターでのみ使用できるのはなぜですか 」を参照してください。

    シャーディングされたクラスターでは、ノード間のトラフィックは mongos プロセスを通じてルーティングされます。このプロセスはデフォルトでクラスター内のすべてのノードに接続されます。そのため、特定のリージョンに任意の数のプライベートエンドポイントを作成できます。詳細については、「 (任意)マルチリージョンのシャーディングされたクラスターのリージョン別プライベートエンドポイント 」を参照してください。

  • Atlas は、サブネット マスク値が 27 である サービス アタッチメントを 50 個作成します。Atlas が作成するサービス アタッチメントの数とサブネットマスクを変更するには、Set One Project Limit Atlas Administration API エンドポイントで次の制限を設定します。

    • サービス アタッチメントの数を変更するには、atlas.project.deployment.privateServiceConnectionsPerRegionGroup 制限を設定します。

    • 各サービス アタッチメントのサブネット マスクを変更するには、atlas.project.deployment.privateServiceConnectionsSubnetMask 制限を設定します。

    詳しくは、「1 つのプロジェクト制限を設定」を参照してください。

  • 単一リージョンで GCP Private Service Connect を使用する Atlas プロジェクトを作成する場合、最大 50 のノードを使用できます。ノード数の変更が必要な場合は、以下のいずれかのアクションを実行します。

重要

  • GCP内の各プライベートエンドポイントでは、 GCP VPC内にIPアドレスが予約され、エンドポイントのIPアドレスからのトラフィックは サービス アタッチメント に転送されます。プライベートエンドポイントは、サービス アタッチメントと同数(サービス アタッチメント数のデフォルトは50 です。

アドレス指定可能なターゲットには、以下のものがあります。

  • レプリカセット配置内の各 mongod インスタンス(シャーディングされたクラスターは除く)。

  • シャーディングされたクラスター配置内の各 mongos インスタンス。

  • プロジェクト内のすべての専用クラスターにわたる Atlas 用 BI Connector の各インスタンス。

  • 複数のリージョンにわたって GCP Private Service Connect を使用する Atlas プロジェクトを作成する場合、最大 40 のノードを使用できます。この合計数には次のインスタンスは含まれません。

    • 相互に通信するGCPリージョン

    • 無料クラスターまたは共有クラスター

  • GCP Private Service Connect1024 は、仮想マシンごとに最大1024 の送信接続をサポートします。そのため、単一のGCP仮想マシンから Atlas クラスターへの接続は までしか確立できません。

    詳しくは、 「 GCPクラウドNAT ドキュメント 」を参照してください。

  • GCP Private Service Connect はリージョン固有です。ただし、 グローバル アクセス を設定して、異なるリージョンからプライベートエンドポイントにアクセスすることは可能です。

    詳しくは、「マルチリージョン サポート」を参照してください。

APIキーとプログラムによるアクセスのIP アクセス リストを設定して、CI/CDパイプラインやオーケストレーション システムなどの信頼できるIPアドレスからのアクセスのみを許可することをお勧めします。これらのIPアクセス リストは、サービス アカウントのプロビジョニング時に Atlas コントロール プレーンに設定され、クラスターへの接続用に Atlasプロジェクトデータ プレーンで設定できるIPアクセス リストとは別です。

IP アクセス リストを設定するときは、以下を行うことをお勧めします。

  • 一時的なアクセスリストエントリは、チームメンバーが一時的な作業場所から環境にアクセスする必要がある場合や、本番環境のダウンタイムを解決するために人間による本番環境へのアクセスが必要な緊急時に使用します。これらのインシデントに備えるために、一時的なアクセスを迅速に追加するオートメーション スクリプトをビルドすることをお勧めいたします。

  • 可能な最小のネットワーク セグメントをカバーするIP アクセス リストエントリを定義します。そのためには、可能な限り個々のIPアドレスを優先し、大きな CIDR ブロックを避けます。

VPCまたは VNet ピアリングを構成する場合は、次のことをお勧めします。

  • 厳格なネットワーク信頼境界を維持するには、セキュリティ グループとネットワーク ACL を設定して、Atlas 側VPCからアプリケーションVPC内のシステムへの受信アクセスを防止します。

  • 機密性の高いアプリケーションインフラストラクチャと Atlas VPC間の中間者として機能する新しいVPCを作成します。VPCは推移的であるため、Atlas へのアクセスが必要なアプリケーションのコンポーネントのみを公開できます。

次の例では、 IPアクセス リスト、 VPCピアリング、プライベートエンドポイントを使用して、アプリケーション環境と Atlas クラスター間の接続を構成します。

これらの例では、次のようなその他の推奨される構成も適用されます。

  • 開発およびテスト環境用にクラスター階層が M10 に設定されました。クラスター サイズ ガイドを使用して、アプリケーションのサイズに合った推奨クラスター階層を確認してください。

  • 単一リージョン、3 ノード レプリカ セットまたはシャード配置トポロジー。

当社の例では、AWSAzure、および Google Cloud を互換的に使用します。これら 3 つのクラウド プロバイダーのいずれかを使用できますが、クラウド プロバイダーに一致するようにリージョン名を変更する必要があります。クラウドプロバイダーとそのリージョンに関する詳細は、「クラウドプロバイダー」をご覧ください。

  • 中規模アプリケーション用のクラスター階層が M30 に設定されました。クラスター サイズ ガイドを使用して、アプリケーションのサイズに合った推奨クラスター階層を確認してください。

  • 単一リージョン、3 ノード レプリカ セットまたはシャード配置トポロジー。

当社の例では、AWSAzure、および Google Cloud を互換的に使用します。これら 3 つのクラウド プロバイダーのいずれかを使用できますが、クラウド プロバイダーに一致するようにリージョン名を変更する必要があります。クラウドプロバイダーとそのリージョンに関する詳細は、「クラウドプロバイダー」をご覧ください。

注意

Atlas CLI で接続を設定する前に、次のことを行う必要があります。

許可したい各接続ごとに、次のコマンドを実行します。適切なオプションと実際の値を使用するようにエントリを変更します。

atlas accessList create 192.0.2.15 --type ipAddress --projectId 5e2211c17a3e5a48f5497de3 --comment "IP address for app server 2" --output json

この例に関する詳細については、「 Atlas accessLists create 」を参照してください。

AWSGCPAzure を使用して IP アクセスリストエントリを作成する方法については、「専用クラスターのプライベート エンドポイントの設定」を参照してください。

Atlas VPCにピアリングするVPCごとに次のコードを実行します。必要に応じて、 awsazureを または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

この例に関する詳細と構成オプションについては、以下を参照してください。

作成するプライベートエンドポイントごとに次のコマンドを実行します。必要に応じて、awsazure または gcp に置き換え、オプションと値をVPCまたは VNet に適したものに変更します。

atlas privateEndpoints aws create --region us-east-1 --projectId 5e2211c17a3e5a48f5497de3 --output json

この例に関する詳細と構成オプションについては、以下を参照してください。

注意

Terraform でリソースを作成する前に、次の手順を実行する必要があります。

  • 支払い組織を作成し、その支払い組織の API キーを作成します。ターミナルで次のコマンドを実行し、API キーを環境変数として保存します。

    export MONGODB_ATLAS_PUBLIC_KEY="<insert your public key here>"
    export MONGODB_ATLAS_PRIVATE_KEY="<insert your private key here>"
  • Terraform のインストール

また、環境に合わせてワークスペースを作成することもおすすめしています。

IP アクセス リストにエントリを追加するには、次のファイルを作成し、アクセス権を付与するプロジェクトのディレクトリに配置します。ID と名前を変更して、 値を使用します。

# 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

次のコマンドを実行して、プロジェクトのIP アクセス リストに 1 件のエントリを追加します。コマンドは、ファイルとMongoDB & HashiCorp Terraform を使用してエントリを追加します。

terraform apply

プロンプトが表示されたら、yes を入力し、Enter を押して設定を適用します。

アプリケーションVPCと Atlas VPCの間でピアリング接続を作成するには、次のファイルを作成し、アクセス権を付与するプロジェクトのディレクトリに配置します。ID と名前を変更して、 値を使用します。

# 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

以下のコマンドを実行して、アプリケーションからプロジェクトに VPC ピアリング接続を追加します。コマンドは、ファイルと MongoDB & HashiCorp Terraform を使用してエントリを追加します。

terraform apply

プロンプトが表示されたら、yesと入力し、Enterを押して設定を適用してください。

アプリケーションのVPCから Atlas VPCへの PrivateLink を作成するには、次のファイルを作成し、接続するプロジェクトのディレクトリに配置します。ID と名前を変更して、 値を使用します。

resource "mongodbatlas_privatelink_endpoint" "test" {
project_id = "<project-id>"
provider_name = "AWS/AZURE"
region = "US_EAST_1"
timeouts {
create = "30m"
delete = "20m"
}
}

ファイルを作成したら、プロジェクトディレクトリに移動し、次のコマンドを実行して Terraform を初期化します。

terraform init

Terraform プランを表示するには、次のコマンドを実行します。

terraform plan

次のコマンドを実行して、PrivateLink エンドポイントをアプリケーションからプロジェクトに追加します。コマンドは、ファイルと MongoDB & HashiCorp Terraform を使用してエントリを追加します。

terraform apply

プロンプトが表示されたら、yesと入力し、Enterを押して設定を適用してください。

戻る

セキュリティ