Docs Menu

Atlas リソース ポリシー

Atlas リソース ポリシーは、Organization Owners が Atlas クラスターを作成または構成するときに開発者が使用できる特定の構成オプションを制限できるようにする制御です。

リソースポリシーを使用すると、次のことが可能になります。

  • クラスターの配置を特定のクラウドプラットフォーム( Amazon Web Services 、 Google Cloud Platform、 Azure )に制限します。

  • クラスターの配置をクラウドプロバイダー内の指定されたリージョンに制限します。 例、aws:us-east-1

  • より厳格なネットワーク制御を強制するには、ワイルドカードIP (0.0.0.0/0)の使用を禁止します。

  • IP アクセス リストが空のままであることを要求するか、既存のIP アクセス リストへの追加を防ぐことで、パブリック ネットワークを介したトラフィックを禁止します。

  • ユーザーがクラスターを指定されたしきい値を超える、または低い階層にプロビジョニング、アップデート、またはオートスケーリングするのを防ぎます。

  • プロジェクトにメンテナンスウィンドウが設定されている必要があります。

  • クラウドプロバイダー間でのVPCピアリングとプライベートエンドポイント接続の変更を防ぎます。

  • 最小の TLS バージョンを適用するか、クラスター接続用に特定の TLS 暗号スイート構成が必要です。

Atlas リソース ポリシーは組織レベルで作成し、組織内のすべてのプロジェクトとクラスターに適用されます。

Atlas UIと Atlas 管理APIに加えて、 HashiCorp Terraform MongoDB Atlas Provider MongoDB Atlas Amazon Web Services CloudFormation Resources 、または Amazon Web Services CloudFormation を使用して、Atlas リソースポリシーの構成と管理を行います。

注意

HashiCorp Terraform MongoDB Atlas Provider の場合は、1.33.0 以降を使用して最小の TLS バージョンを適用するか、クラスター接続に特定の TLS 暗号スイート構成が必要です。 Atlas は Terraform の以前のバージョンからの接続をブロックする可能性があります。

  • /orgs/{ORG- ID}/nonCompliantResources エンドポイントを使用して、非準拠リソースのリストを積極的に監視することを強くお勧めします。 Atlas リソース ポリシーは定義された目的へのコンプライアンスを確保しますが、中間または過渡的な状態を強制しません。例、下流の コンポーネントが失敗すると、ポリシーは一時的に非準拠の中間状態になることがあります。

  • 各 Atlas リソース ポリシーには一意の名前が必要です。既存の名前で Atlas リソース ポリシーを作成しようとすると、サーバーは400 (Bad Request) ステータス コードを返します。

  • 異なる名前で同一の Atlas リソース ポリシーを作成することが可能です。これにより機能の競合は発生しませんが、ポリシー管理の冗長性と混乱が生じる可能性があります。

  • Atlas リソース ポリシーはデフォルトで許可されています。 Atlas リソースポリシーが存在しない場合、ユーザーは Atlas ユーザーロールが許可する Atlas クラスターに対してすべてのアクションを実行できます。

  • Cedar ポリシー言語の実装バージョンは、 .cedarファイルごとに 1 つの Cedar.cedar ポリシーのみをサポートしますが、Atlas リソース ポリシーに複数の Cedar ポリシー( ファイル)を一覧表示できます。各.cedar ファイルは、Atlas Administration APIレスポンスで、 の後の一意の24 16policies.id 進数文字列として識別されます。

  • 既存のクラスターのオートスケーリング制限が新しい Atlas リソース ポリシーと一致しない場合、クラスターはポリシーに定義された境界を超える可能性があります。この問題に対処するには、 /orgs/{ORG- ID}/nonComplianceResources エンドポイントを使用して非準拠のリソースを識別してモニターし、ポリシー要件を満たすようにアップデートします。

  • ネットワークレイヤー制御を有効にする前に、既存のIP アクセス リストを確認して、必要なアクセス ポイントがすべて含まれていることを確認します。

  • Cedar ポリシー言語でのプライベートエンドポイントの定義には、ワイルドカード操作がサポートされていないため、個々のIPアドレスを入力する必要があります。

MongoDB は、オープンソースの Cedar ポリシー言語を使用して、Atlas リソース ポリシーを定義します。Cedar の設計は、リソースポリシーの書き込みと理解の両方を効率化する簡潔な構文を採用して、表現力と単純性のバランスをとります。

Atlas リソース ポリシーを迅速に作成するには、例を調整し、Atlas UIまたは Atlas Administration APIを使用して Atlas に を追加します。次の「 Atlas リソース ポリシー構成の作成 」を参照してください。

Cedar ポリシー言語の詳細については、以下を参照してください。

Cedar Element
Descripton
Atlas リソース ポリシー オプション

forbid

when 句の条件が満たされている場合は、指定されたアクションを拒否します。 変換要素 permit は Atlas リソース ポリシーでは許可されていません。

例: forbid (principal, action, resource) when { ... };

principal

ポリシーの影響を受けるユーザーを定義します。

デフォルトでは ユニバーサルに適用されます。 を変更したり省略したりしないでください。

action

ポリシーで制御されているアクションを表します。

利用可能なアクション:

  • IP アクセス リストを制限します。 ResourcePolicy::Action::"project.ipAccessList.modify"

  • クラスター属性を制限します。 ResourcePolicy::Action::"cluster.modify"

  • メンテナンスウィンドウを変更します。 ResourcePolicy::Action::"project.maintenanceWindow.modify"

ResourcePolicy::Cluster::"<CLUSTER-ID>"

特定のクラスターを参照します

クラスターID を見つけるには、Atlas Administration API を使用してプロジェクト内のすべてのクラスターを返します。

ResourcePolicy::Project::"<PROJECT-ID>"

特定のプロジェクトを参照します。 例、 ResourcePolicy::Project::"6217f7fff7957854e2d09179"

プロジェクトID を見つけるには、「 プロジェクト設定の管理 」を参照してください。

context.cluster.project

クラスターが属するプロジェクトを指定します。

プロジェクトID を見つけるには、「 プロジェクト設定の管理 」を参照してください。

context.cluster.cloudProviders

許可されたクラウドプロバイダーを指定します。

利用可能なオプション:

  • ResourcePolicy::CloudProvider::"aws"

  • ResourcePolicy::CloudProvider::"azure"

  • ResourcePolicy::CloudProvider::"gcp"

context.cluster.regions

配置リージョンに基づいてアクセスを制限します。

例、ResourcePolicy::Region::"aws:us-east-1"。 クラウドプロバイダーが利用可能なリージョンのリストについては、 「 Amazon Web Services (Amazon Web Services) 」、 「 Google Cloud Platform (GCP) 」、または「 Microsoft Azure 」を参照してください。

context.cluster has <PROPERTY>

クラスター コンテキスト内に特定のプロパティが存在するかどうかを確認します。

利用可能なプロパティ:

context.cluster.minGeneralClassInstanceSizeValue

クラスターをスケールダウンするための最小クラスター層を設定します。

例、context.cluster.minGeneralClassInstanceSizeValue < 30 は、現在の階層または最小オートスケーリング サイズが M30 未満のクラスターに一致します。

context.cluster.maxGeneralClassInstanceSizeValue

クラスターをスケールアップするための最大クラスター層を設定します。

例、context.cluster.maxGeneralClassInstanceSizeValue < 60 は、現在の階層または最大オートスケーリング サイズが M60 未満のクラスターに一致します。

context.project.hasDefinedMaintenanceWindow

プロジェクトにメンテナンスウィンドウが設定されている必要があります。

例、context.project.hasDefinedMaintenanceWindow == false は、プロジェクトにメンテナンスウィンドウが設定されていないかどうかを確認します。

context.project.ipAccessList

クラスターにアクセスできるIPアドレスを指定します。

ワイルドカードIP ip("0.0.0.0/0") をブロックしてセキュリティを強化できます。

context.project.peeringConnections

特定のVPCピアリング接続を示します。

特定のクラウドプロバイダーの形式には、「 ネットワーク ピアリングへの変更の防止 」を参照してください。

context.project.privateEndpoints

特定のプライベートエンドポイントを参照します。

containsAny および containsAll

リストに 1 つ以上の要素(containsAny)またはすべての要素(containsAll)が含まれているかどうかを確認します。

例: context.cluster.regions.containsAny([ResourcePolicy::Region::"aws:us-east-1"])

unless

ポリシーに例外を指定します。 特定の条件が満たされない限り、アクションは禁止されます。

例: forbid (principal, action, resource) unless { condition };

isEmpty

リストが空かどうかを確認します。例、パブリック ネットワーク経由でアクセスを強制するには、 IP アクセス リストが空である必要があります。

forbid (principal, action == ResourcePolicy::Action::"project.ipAccessList.modify", resource) unless { context.project.ipAccessList.isEmpty() };

論理演算子(&&||

ポリシーで複数の条件を組み合わせます。

利用可能なオプション:

  • && (AND): すべての条件が true である必要があります。

  • || (または): 少なくとも 1 つの条件が true である必要があります。

IPアドレス指定(ip

ポリシー内の特定のIPアドレスまたは範囲を参照します。

利用可能なオプション:

  • ip("0.0.0.0/0") ワイルドカードIP用。

  • ip("1.2.3.4/32") 特定のIPアドレス用。

Atlas リソース ポリシーを作成するには、次の手順で、Cedar ポリシー言語を使用してポリシーを構築し、 Atlas UI、 Atlas Administration API、または Terraform を使用して Atlas に追加します。

警告

新しいクラスターを含む新しい組織を作成し、非本番環境でこの機能をテストすることをお勧めします。 これにより、既存のシステムに影響を与えずに機能を安全に評価できます。

Atlas Administration APIを使用して Atlas リソース ポリシーを作成するには、Cedar ポリシー言語を使用してポリシーを構築し、POST パラメーターを使用するpolicies リクエストで Atlas Administration APIに渡します。

1

[] ポリシー言語を使用してリソースを制限するルールを指定します。組織の次の例のポリシーをコピーして変更できます。

注意

追跡を容易にするために、複数の単純な Atlas リソース ポリシーを作成することをお勧めします。 例、クラウドプロバイダーと複数のリージョンを制限する場合は、クラウドプロバイダーを制限する Atlas リソース ポリシーを 1 つ作成し、リージョンを制限する Atlas リソース ポリシーを作成することを検討してください。

2

組織の Atlas リソース ポリシー を作成するには、 POST バージョンを使用します。 リクエストには、次の要素が含まれている必要があります。

  • name: Atlas リソース ポリシーの名前。

  • policies: 前のステップで [Cedar ポリシー言語]で定義したクラスター制限。policies.body で引用符(")を使用する場合は、バックスラッシュ(\)でエスケープします。

POSTリクエストの例 :

curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
--header "Content-Type: application/json" \
--header "Accept: application/vnd.atlas.2024-08-05+json" \
--include \
--request POST "https://cloud.mongodb.com/api/atlas/v2/orgs/{ORG-ID}/resourcePolicies?pretty=true" \
--data '{
"name": "MyResourcePolicy",
"policies": [
{
"body": "forbid (principal, action == ResourcePolicy::Action::\"cluster.modify\", resource) when {context.cluster.regions.contains(ResourcePolicy::Region::\"aws:us-west-1\")};"
}
]
}'

応答例:

1{
2 "createdByUser" : {
3 "id" : "66ce81217d08f463824f3b80",
4 "name" : "ecwwjhop"
5 },
6 "createdDate" : "2024-08-28T02:22:49Z",
7 "id" : "66ce89f9b535d00a2cb02f83",
8 "lastUpdatedByUser" : {
9 "id" : "66ce81217d08f463824f3b80",
10 "name" : "ecwwjhop"
11 },
12 "lastUpdatedDate" : "2024-08-28T02:22:49Z",
13 "name" : "MyResourcePolicy",
14 "orgId" : "{ORG-ID}",
15 "policies" : [ {
16 "body" : "forbid (principal, action == ResourcePolicy::Action::\"cluster.modify\", resource) when {context.cluster.regions.contains(ResourcePolicy::Region::\"aws:us-west-1\")};",
17 "id" : "66ce89f9b535d00a2cb02f82"
18 } ],
19 "version" : "v1"

新しい Atlas UIエディターを使用して Atlas リソース ポリシーを作成するには、次の手順で例ポリシーをコピーしてエディターに貼り付け、組織用に変更します 。

1

警告

ナビゲーションの改善が進行中

現在、新しく改善されたナビゲーション エクスペリエンスを展開しています。次の手順が Atlas UIのビューと一致しない場合は、プレビュー ドキュメントを参照してください。

  1. まだ表示されていない場合は、以下から目的の組織を選択しますナビゲーション バーのOrganizationsメニュー

  2. [Organizations] メニューの横にある [Organization Settings] アイコンをクリックします。

    [ Organization Settings ]ページが表示されます。

2

サイドバーの Resource Policy をクリックします。

[ リソース ポリシー ] ページが表示されます。

3
4
  1. Atlas リソース ポリシーに一意の名前を付けます。

  2. (任意)説明を追加します。

  3. 組織の次の例ポリシーをコピーして変更し、Cedar Policyフィールドにコードを貼り付けます。

    注意

    追跡を容易にするために、複数の単純な Atlas リソース ポリシーを作成することをお勧めします。 例、クラウドプロバイダーと複数のリージョンを制限する場合は、クラウドプロバイダーを制限する Atlas リソース ポリシーを 1 つ作成し、リージョンを制限する Atlas リソース ポリシーを作成することを検討してください。

5

この Atlas リソース ポリシーは、すべての新しいクラスターに適用されます。 Atlas リソース ポリシーに準拠していない既存のクラスターの場合、Atlas はクラスターをコンプライアンスさせる クラスターへの変更のみを許可します。 例、cluster0 がAmazon Web Servicesで実行され、 Amazon Web Servicesのクラスターをブロックする Atlas リソースcluster0 ポリシーを適用すると、クラウドプロバイダーをAzureに切り替える間で、ユーザーは に変更を加えることができます。またはGoogle Cloud Platform。

AtlasGET リソース ポリシーに準拠していない既存のクラスターのリストを返すには、 /orgs/{ORG- ID}/nonComplientResourcesリソースを使用します。

Atlas は、Atlas リソース ポリシーを作成、更新、または削除すると、アクティビティフィードイベントを生成します。アクティビティフィードイベントを識別し、追跡を容易にするには、複数のシンプルな Atlas リソース ポリシーを作成することをお勧めします。例、クラウドプロバイダーと複数のリージョンの使用を制限する場合は、クラウドプロバイダーを制限する Atlas リソース ポリシーを 1 つ作成し、リージョンを制限する Atlas リソース ポリシーを作成することを検討してください。

注意

追加の前提条件

このガイドを続行する前に、次の手順を実行してください。

Terraform を使用して Atlas リソース ポリシーを作成するには、MongoDB Atlas Terraform プロバイダー を構成し、Cedar ポリシー言語 を使用してポリシーを構築し、それを main.tf Terraformファイルで指定します。

1

プロジェクトディレクトリに main.tf という新しいファイルを作成します。 MongoDB Atlasプロバイダーを構成し、公開キーと秘密キーを指定する次のコードを貼り付けます。

terraform {
required_version = ">=1.4"
required_providers {
mongodbatlas = {
source = "mongodb/mongodbatlas"
version = "~>1.31"
}
}
}
provider "mongodbatlas" {}
variable "org_id" {
type = string
description = "<Organization ID>"
}

ファイルを作成した後、次のコマンドを実行してプロバイダーの最新バージョンをダウンロードし、Terraform を初期化します。

terraform init -upgrade
2

[] ポリシー言語を使用してリソースを制限するルールを指定します。組織の次の例のポリシーをコピーして変更できます。

注意

追跡を容易にするために、複数の単純な Atlas リソース ポリシーを作成することをお勧めします。 例、クラウドプロバイダーと複数のリージョンを制限する場合は、クラウドプロバイダーを制限する Atlas リソース ポリシーを 1 つ作成し、リージョンを制限する Atlas リソース ポリシーを作成することを検討してください。

3

main.tfファイルで必要なポリシーを定義 したら、次のコマンドを実行してポリシーを作成します。

terraform apply

次の例のポリシーをコピーして変更して、組織で使用します 。すべての例では Cedar ポリシー言語 が使用されますが、 Atlas Administration APIの場合、例は JSON でラップされているため、 API 呼び出しに直接貼り付けることができます。詳細については、「Atlas リソース ポリシー構成の作成」を参照してください。

次の例では、ユーザーがGoogle Cloud Platformでクラスターを作成するのを防ぎます。

{
"name": "Policy Preventing GCP Clusters",
"policies": [
{
"body": "forbid (principal, action == ResourcePolicy::Action::\"cluster.modify\", resource) when { context.cluster.cloudProviders.contains(ResourcePolicy::CloudProvider::\"gcp\") };"
}
]
}

次の例では、unless 句を使用して、ユーザーがGoogle Cloud Platform上でのみクラスターを作成できるようにしています。

{
"name": "Policy Allowing Only GCP Clusters",
"policies": [
{
"body": "forbid(principal, action == ResourcePolicy::Action::\"cluster.modify\", resource) unless { context.cluster.cloudProviders == [ResourcePolicy::CloudProvider::\"gcp\"] };"
}
]
}

次の例では、 when 句を使用して、 Google Cloud Platform が唯一のクラウドプロバイダーでない限り、 ID 6217f7fff7957854e2d09179 を持つプロジェクト内でクラスターを作成または編集することを防ぎます。

{
"name": "Policy Allowing Only GCP Clusters for One Project",
"policies": [
{
"body": "forbid (principal, action == ResourcePolicy::Action::\"cluster.modify\", resource) when { resource in ResourcePolicy::Project::\"6217f7fff7957854e2d09179\" && context.cluster.cloudProviders == [ResourcePolicy::CloudProvider::\"gcp\"] };"
}
]
}

次の例では、 Google Cloud Platformがクラウドプロバイダーの場合に、 ID 3217e2gdf79a4c54e2d0827 のクラスターへの変更を防止します。

{
"name": "Forbid Modifications to Specific GCP Cluster",
"policies": [
{
"body": "forbid (principal, action == ResourcePolicy::Action::\"cluster.modify\", resource) when { resource in ResourcePolicy::Project::\"65dcbf5ccd12a54df59a54e6\" && resource == ResourcePolicy::Cluster::\"670968dfc0a2297ef46bc02a\" && context.cluster.cloudProviders == [ResourcePolicy::CloudProvider::\"gcp\"]};"
}
]
}

次の例では、ユーザーがリージョン aws:us-east-1 でクラスターを作成または編集できないようにしています。

{
"name": "Prohibit Cluster Deployment in the US-EAST-1 Region",
"policies": [
{
"body": "forbid (principal,action == ResourcePolicy::Action::\"cluster.modify\",resource) when {context.cluster.regions.contains(ResourcePolicy::Region::\"aws:us-east-1\")};"
{
]
}

次の例では、ユーザーがリージョン aws:us-west-1 にクラスターを作成できないようにしています。

{
"name": "Policy Preventing Clusters in AWS:us-west-1",
"policies": [
{
"body": "forbid(principal, action == ResourcePolicy::Action::\"cluster.modify\", resource) when { context.cluster.regions.contains(ResourcePolicy::Region::\"aws:us-west-1\") };"
}
]
}

次の例では、ユーザーが aws:us-east-1aws:us-west-1、または azure:westeurope のリージョンにクラスターを作成できないようにしています。

{
"name": "Policy Preventing Clusters in 3 AWS Regions",
"policies": [
{
"body": "forbid(principal, action == ResourcePolicy::Action::\"cluster.modify\", resource) when { context.cluster.regions.containsAny([ResourcePolicy::Region::\"aws:us-east-1\", ResourcePolicy::Region::\"aws:us-west-1\", ResourcePolicy::Region::\"azure:westeurope\"]) };"
}
]
}

次の例では、unless 句を使用して、ユーザーが aws:us-east-1azure:westeurope のリージョンにのみクラスターを作成できるようにします。

{
"name": "Policy Allowing Clusters Only in 2 AWS Regions",
"policies": [
{
"body": "forbid(principal, action == ResourcePolicy::Action::\"cluster.modify\", resource) unless { [ResourcePolicy::Region::\"aws:us-east-1\", ResourcePolicy::Region::\"azure:westeurope\"].containsAll(context.cluster.regions) };"
}
]
{

次の例では、 when 句を使用して、リージョン aws:us-east-1aws:us-west-1 でID 3217e2gdf79a4c54e2d0827 を持つクラスターを編集するユーザーを制限します。

{
"name": "Policy Restricting Edits to One Cluster from 2 AWS Regions",
"policies": [
{
"body": "forbid(principal, action == ResourcePolicy::Action::\"cluster.modify\", resource == ResourcePolicy::Cluster::\"3217e2gdf79a4c54e2d0827\") when { context.cluster.regions.containsAny([ResourcePolicy::Region::\"aws:us-east-1\",ResourcePolicy::Region::\"aws:us-west-1\"]) };"
}
]
}

次の例では、Atlas ユーザーがGoogle Cloud PlatformまたはAmazon Web Servicesリージョン または で Atlas クラスターを作成することを制限します。aws:us-east-1aws:us-west-1

{
"name": "Policy Restricting All GCP Clusters and Some AWS Regions",
"policies": [{"body": "forbid (principal,action == ResourcePolicy::Action::\"cluster.modify\", resource) when {context.cluster.cloudProviders.containsAny([ResourcePolicy::CloudProvider::\"gcp\"]) || context.cluster.regions.containsAny([ResourcePolicy::Region::\"aws:us-east-1\", ResourcePolicy::Region::\"aws:us-west-1\"])};"}]
}

次の例では、ユーザーがワイルドカードIP (0.0.0.0/0)からプロジェクトを編集することを防ぎます。

{
"name": "Policy Restricting Wildcard IP",
"policies": [
{
"body": "forbid(principal, action == ResourcePolicy::Action::\"project.ipAccessList.modify\", resource) when { context.project.ipAccessList.contains(ip(\"0.0.0.0/0\")) };"
}
]
}

次の例では、unless 句を使用して、ユーザーがIPアドレス 1.2.3.4/328.8.8.8/324.4.4.4/32 からのみプロジェクトを編集できるようにします。

{
"name": "Policy Restricting Project Edits to Specified IPs",
"policies": [
{
"body": "forbid(principal, action == ResourcePolicy::Action::\"project.ipAccessList.modify\", resource) unless { [ip(\"1.2.3.4/32\"), ip(\"8.8.8.8/32\"), ip(\"4.4.4.4/32\")].containsAll(context.project.ipAccessList) };"
}
]
}

次の例では、IP アクセス リストが空であることを要求して、クラスターへのすべてのトラフィックがパブリック ネットワーク経由で禁止されていることを確認します。

{
"name": "Policy Preventing Access Over Public Networks",
"policies": [
{
"body": "forbid (principal, action == ResourcePolicy::Action::\"project.ipAccessList.modify\", resource) unless {context.project.ipAccessList.isEmpty() };"
}
]
}

次の例では、when 句を使用して、Atlas によるクラスターのプロビジョニングまたはスケーリングを M30 未満、または M60 より大きいものに制限します。

注意

このポリシーは、 低 CPU または NVMe SSDのクラスタークラスを持つクラスターを制限しません。

{
"name": "Policy Restricting Min/Max Cluster Size",
"policies": [
{
"body": "forbid(principal, action == ResourcePolicy::Action::"cluster.modify", resource) when { (context.cluster has minGeneralClassInstanceSizeValue && context.cluster.minGeneralClassInstanceSizeValue < 30) || (context.cluster has maxGeneralClassInstanceSizeValue && context.cluster.maxGeneralClassInstanceSize > 60) };"
}
]
}

次の例では、プロジェクトにメンテナンスウィンドウが設定されている必要があります。

{
"name": "Policy Enforcing Existence of a Project Maintenance Window",
"policies": [
{
"body": "forbid (principal, action == ResourcePolicy::Action::"project.maintenanceWindow.modify", resource) when {context.project.hasDefinedMaintenanceWindow == false};"
}
]
}

次の例では、異なるクラウドプロバイダー( Amazon Web Services 、 Google Cloud Platform、 Azure )にわたるVPCピアリング接続の変更を防止しています。

各クラウドプロバイダーはVPCピアリングに異なる詳細を必要とします。クラウドプロバイダーの次の詳細を収集し、例ではそれを置き換えます。

Amazon Web Services: aws:<AWS_ACCOUNT_ID>:<VPC_ID>:<VPC_CIDR>

  • AWS_ACCOUNT_ID: Amazon Web Services のアカウント番号。

  • VPC_ID: VPCのID 。

  • VPC_CIDR: VPCCIDR ブロック。

Azure: azure:<SUBSCRIPTION_ID>:<RESOURCE_GROUP_NAME>:<VNET_NAME>

  • SUBSCRIPTION_ID: AzureサブスクライブID。

  • RESOURCE_GROUP_NAME: 仮想ネットワーク(VNet)が存在するリソースグループ。

  • VNET_NAME: VNet の名前。

Google Cloud Platform : gcp:<GCP_PROJECT_ID>:<VPC_NAME>

  • GCP_PROJECT_ID: Google Cloud PlatformプロジェクトのID 。

  • VPC_NAME: Google Cloud PlatformのVPCの名前。

{
"name": "Policy Preventing Modifications to Peering Across Providers",
"policies": [
{
"body": "forbid (principal, action == ResourcePolicy::Action::\"project.vpcPeering.modify\", resource) when {context.project.peeringConnections == [\"aws:000123456789:us-east-1:vpc-0316c47cc923ce313:10.0.0.0/16\", \"azure:fd01aafc-b3re-2193-8497-83lp3m83a1a5:rg-name:vnet\", \"gcp:inductive-cocoa-108200:default\"]};"
}
]
}

次の例では、クラウドプロバイダー( Amazon Web Services 、 Google Cloud Platform、 Azure )間のプライベートエンドポイント接続に対する変更を防止します。

各クラウドプロバイダーには、プライベートエンドポイントの異なる詳細が必要です。クラウドプロバイダーの次の詳細を収集し、例ではそれを置き換えます。

Amazon Web Services: aws:<VPC_ENDPOINT_ID>

  • VPC_ENDPOINT_ID: Amazon Web Services VPCエンドポイントのID 。

Azure: azure:<PRIVATE_ENDPOINT_RESOURCE_ID>:<PRIVATE_ENDPOINT_IP_ADDRESS>

  • PRIVATE_ENDPOINT_RESOURCE_ID: Azureプライベートエンドポイントの完全なリソースIDパス。

  • PRIVATE_ENDPOINT_IP_ADDRESS: プライベートエンドポイントに割り当てられたIPアドレス。

Google Cloud Platform : gcp:<GCP_PROJECT_ID>:<VPC_NAME>

  • GCP_PROJECT_ID: Google Cloud PlatformプロジェクトのID 。

  • VPC_NAME: 接続に関連付けられているGoogle Cloud Platform内のVPCの名前。

{
"name": "Policy Preventing Modifications to Private Endpoints Across Providers",
"policies": [
{
"body": "forbid (principal, action == ResourcePolicy::Action::\"project.privateEndpoint.modify\", resource) when {context.project.privateEndpoints == [\"aws:vpce-042d72ded1748f314\", \"azure:/subscriptions/fd01aafc-b3re-2193-8497-83lp3m83a1a5/resourceGroups/rg-name/providers/Microsoft.Network/privateEndpoints/pe-name:10.0.0.4\", \"gcp:inductive-cocoa-108200:default\"]};"
}
]
}

次の例では TLS への着信接続にクラスターが受け入れる TLS1.2 の最小バージョンを制限します。

minTLSVersion に指定できる値は次のとおりです。

  • TLS 1.0: ResourcePolicy::TLSVersion::\"tls1_0\"

  • TLS 1.1: ResourcePolicy::TLSVersion::\"tls1_1\"

  • TLS 1.2: ResourcePolicy::TLSVersion::\"tls1_2\"

{
"name": "Policy Restricting Cluster Connections to Minimum TLS 1.2",
"policies": [
{
"body": "forbid (principal, action == ResourcePolicy::Action::\"cluster.modify\", resource)unless {context.cluster.minTLSVersion == ResourcePolicy::TLSVersion::\"tls1_2\"};"
}
]
}

次の例では、クラスターで ResourcePolicy::CipherConfigMode::\"custom\" を設定してカスタム TLS 暗号スイート構成 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 を使用する必要があります。

カスタム TLS 暗号スイート構成に指定できる値は次のとおりです。

  • ResourcePolicy::CipherSuite::\"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\"

  • ResourcePolicy::CipherSuite::\"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\"

{
"name": "Policy Requiring Specific TLS Cipher Suite",
"policies": [
{
"body": "forbid (principal, action == ResourcePolicy::Action::\"cluster.modify\", resource) unless {context.cluster.cipherConfigMode == ResourcePolicy::CipherConfigMode::\"custom\" && context.cluster.cipherSuites == [ResourcePolicy::CipherSuite::\"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\"]};"
}
]
}

次の例では、クラスターがデフォルトのTLS 暗号スイート構成を使用する必要があります。

{
"name": "Policy Requiring Default TLS Cipher Suite",
"policies": [
{
"body": "forbid (principal, action == ResourcePolicy::Action::\"cluster.modify\", resource) unless {context.cluster.cipherConfigMode == ResourcePolicy::CipherConfigMode::\"default\"};"
}
]
}

次の例では、ユーザーがGoogle Cloud Platformでクラスターを作成するのを防ぎます。

forbid (
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
)
when { context.cluster.cloudProviders.contains(ResourcePolicy::CloudProvider::"gcp") };

次の例では、unless 句を使用して、ユーザーがGoogle Cloud Platform上でのみクラスターを作成できるようにしています。

forbid(
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
)
unless { context.cluster.cloudProviders == [ResourcePolicy::CloudProvider::"gcp"] };

次の例では、 when 句を使用して、 Google Cloud Platform が唯一のクラウドプロバイダーでない限り、 ID 6217f7fff7957854e2d09179 を持つプロジェクト内でクラスターを作成または編集することを防ぎます。

forbid (
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
)
when {resource in ResourcePolicy::Project::"6217f7fff7957854e2d09179" && context.cluster.cloudProviders == [ResourcePolicy::CloudProvider::"gcp"] };

次の例では、 Google Cloud Platformがクラウドプロバイダーの場合に、 ID 3217e2gdf79a4c54e2d0827 のクラスターへの変更を防止します。

forbid (
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
)
when {resource in ResourcePolicy::Project::"65dcbf5ccd12a54df59a54e6" && resource == ResourcePolicy::Cluster::"670968dfc0a2297ef46bc02a" && context.cluster.cloudProviders == [ResourcePolicy::CloudProvider::"gcp"]};

次の例では、ユーザーがリージョン aws:us-east-1 でクラスターを作成または編集できないようにしています。

forbid (
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
)
when {context.cluster.regions.contains(ResourcePolicy::Region::"aws:us-east-1")};

次の例では、ユーザーがリージョン aws:us-west-1 にクラスターを作成できないようにしています。

forbid(
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
)
when { context.cluster.regions.contains(ResourcePolicy::Region::"aws:us-west-1") };

次の例では、ユーザーが aws:us-east-1aws:us-west-1、または azure:westeurope のリージョンにクラスターを作成できないようにしています。

forbid(
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
)
when { context.cluster.regions.containsAny([ResourcePolicy::Region::"aws:us-east-1",ResourcePolicy::Region::"aws:us-west-1",ResourcePolicy::Region::"azure:westeurope"]) };

次の例では、unless 句を使用して、ユーザーが aws:us-east-1azure:westeurope のリージョンにのみクラスターを作成できるようにします。

forbid(
principal,
action == ResourcePolicy::Action::\"cluster.modify\",
resource
)
unless { [ResourcePolicy::Region::"aws:us-east-1", ResourcePolicy::Region::"azure:westeurope"].containsAll(context.cluster.regions) };

次の例では、 when 句を使用して、リージョン aws:us-east-1aws:us-west-1 でID 3217e2gdf79a4c54e2d0827 を持つクラスターを編集するユーザーを制限します。

forbid(
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource == ResourcePolicy::Cluster::"3217e2gdf79a4c54e2d0827"
)
when { context.cluster.regions.containsAny([ResourcePolicy::Region::"aws:us-east-1",ResourcePolicy::Region::"aws:us-west-1"]) };

次の例では、ユーザーがワイルドカードIP (0.0.0.0/0)からプロジェクトを編集することを防ぎます。

forbid(
principal,
action == ResourcePolicy::Action::"project.ipAccessList.modify",
resource
)
when { context.project.ipAccessList.contains(ip("0.0.0.0/0")) };

次の例では、unless 句を使用して、ユーザーがIPアドレス 1.2.3.4/328.8.8.8/324.4.4.4/32 からのみプロジェクトを編集できるようにします。

forbid(
principal,
action == ResourcePolicy::Action::"project.ipAccessList.modify",
resource
)
unless { [ip("1.2.3.4/32"), ip("8.8.8.8/32"), ip("4.4.4.4/32")].containsAll(context.project.ipAccessList) };

次の例では、IP アクセス リストが空であることを要求して、クラスターへのすべてのトラフィックがパブリック ネットワーク経由で禁止されていることを確認します。

forbid (
principal,
action == ResourcePolicy::Action::"project.ipAccessList.modify",
resource
)
unless { context.project.ipAccessList.isEmpty() };

次の例では、when 句を使用して、Atlas によるクラスターのプロビジョニングまたはスケーリングを M30 未満、または M60 より大きいものに制限します。

注意

このポリシーは、 低 CPU または NVMe SSDのクラスタークラスを持つクラスターを制限しません。

forbid(
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
)
when { (context.cluster has minGeneralClassInstanceSizeValue && context.cluster.minGeneralClassInstanceSizeValue < 30) || (context.cluster has maxGeneralClassInstanceSizeValue && context.cluster.maxGeneralClassInstanceSizeValue > 60) };

次の例では、プロジェクトにメンテナンスウィンドウが設定されている必要があります。

forbid (
principal,
action == ResourcePolicy::Action::"project.maintenanceWindow.modify",
resource
)
when {context.project.hasDefinedMaintenanceWindow == false};

次の例では、異なるクラウドプロバイダー( Amazon Web Services 、 Google Cloud Platform、 Azure )にわたるVPCピアリング接続の変更を防止しています。

各クラウドプロバイダーはVPCピアリングに異なる詳細を必要とします。クラウドプロバイダーの次の詳細を収集し、例ではそれを置き換えます。

Amazon Web Services: aws:<AWS_ACCOUNT_ID>:<VPC_ID>:<VPC_CIDR>

  • AWS_ACCOUNT_ID: Amazon Web Services のアカウント番号。

  • VPC_ID: VPCのID 。

  • VPC_CIDR: VPCCIDR ブロック。

Azure: azure:<SUBSCRIPTION_ID>:<RESOURCE_GROUP_NAME>:<VNET_NAME>

  • SUBSCRIPTION_ID: AzureサブスクライブID。

  • RESOURCE_GROUP_NAME: 仮想ネットワーク(VNet)が存在するリソースグループ。

  • VNET_NAME: VNet の名前。

Google Cloud Platform : gcp:<GCP_PROJECT_ID>:<VPC_NAME>

  • GCP_PROJECT_ID: Google Cloud PlatformプロジェクトのID 。

  • VPC_NAME: Google Cloud PlatformのVPCの名前。

forbid (
principal,
action == ResourcePolicy::Action::"project.vpcPeering.modify",
resource
)
when {context.project.peeringConnections == ["aws:000123456789:us-east-1:vpc-0316c47cc923ce313:10.0.0.0/16", "azure:fd01aafc-b3re-2193-8497-83lp3m83a1a5:rg-name:vnet", "gcp:inductive-cocoa-108200:default"]};

次の例では、クラウドプロバイダー( Amazon Web Services 、 Google Cloud Platform、 Azure )間のプライベートエンドポイント接続に対する変更を防止します。

各クラウドプロバイダーには、プライベートエンドポイントの異なる詳細が必要です。クラウドプロバイダーの次の詳細を収集し、例ではそれを置き換えます。

Amazon Web Services: aws:<VPC_ENDPOINT_ID>

  • VPC_ENDPOINT_ID: Amazon Web Services VPCエンドポイントのID 。

Azure: azure:<PRIVATE_ENDPOINT_RESOURCE_ID>:<PRIVATE_ENDPOINT_IP_ADDRESS>

  • PRIVATE_ENDPOINT_RESOURCE_ID: Azureプライベートエンドポイントの完全なリソースIDパス。

  • PRIVATE_ENDPOINT_IP_ADDRESS: プライベートエンドポイントに割り当てられたIPアドレス。

Google Cloud Platform : gcp:<GCP_PROJECT_ID>:<VPC_NAME>

  • GCP_PROJECT_ID: Google Cloud PlatformプロジェクトのID 。

  • VPC_NAME: 接続に関連付けられているGoogle Cloud Platform内のVPCの名前。

forbid (
principal,
action == ResourcePolicy::Action::"project.privateEndpoint.modify",
resource
)
when {context.project.privateEndpoints == ["aws:vpce-042d72ded1748f314", "azure:/subscriptions/fd01aafc-b3re-2193-8497-83lp3m83a1a5/resourceGroups/rg-name/providers/Microsoft.Network/privateEndpoints/pe-name:10.0.0.4", "gcp:inductive-cocoa-108200:default"]};

次の例では TLS への着信接続にクラスターが受け入れる TLS1.2 の最小バージョンを制限します。

minTLSVersion に指定できる値は次のとおりです。

  • TLS 1.0: ResourcePolicy::TLSVersion::"tls1_0"

  • TLS 1.1: ResourcePolicy::TLSVersion::"tls1_1"

  • TLS 1.2: ResourcePolicy::TLSVersion::"tls1_2"

forbid (
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
)
unless
{ context.cluster.minTLSVersion == ResourcePolicy::TLSVersion::"tls1_2" };

次の例では、クラスターで ResourcePolicy::CipherConfigMode::"custom" を設定してカスタム TLS 暗号スイート構成 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 を使用する必要があります。

カスタム TLS 暗号スイート構成に指定できる値は次のとおりです。

  • ResourcePolicy::CipherSuite::"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"

  • ResourcePolicy::CipherSuite::"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"

forbid (
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
)
unless
{
context.cluster.cipherConfigMode == ResourcePolicy::CipherConfigMode::"custom" &&
context.cluster.cipherSuites == [ResourcePolicy::CipherSuite::"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"]
};

次の例では、クラスターがデフォルトのTLS 暗号スイート構成を使用する必要があります。

forbid (
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
)
unless
{
context.cluster.cipherConfigMode == ResourcePolicy::CipherConfigMode::"default"
};

次の例では、ユーザーがAWSを除くすべてのクラウドプロバイダーにクラスターを作成できるようにしています。

resource "mongodbatlas_resource_policy" "allow_only_aws_cloud_provider" {
org_id = var.org_id
name = "cluster-allow-only-aws-cloud-provider"
policies = [
{
body = <<EOF
forbid (
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
)
unless
{ context.cluster.cloudProviders == [ResourcePolicy::CloudProvider::"aws"] };
EOF
}]
}

次の例では、unless 句を使用して、ユーザーが aws:us-east-1aws:eu-central-1 のリージョンにのみクラスターを作成できるようにします。

resource "mongodbatlas_resource_policy" "allow_only_regions" {
org_id = var.org_id
name = "cluster-allow-only-regions"
policies = [
{
body = <<EOF
forbid (
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
) unless {
[ResourcePolicy::Region::"aws:eu-west-1", ResourcePolicy::Region::"aws:eu-central-1"]
.containsAll(context.cluster.regions)};
EOF
},
]
}

次の例では、unless 句を使用して、ユーザーが Google Cloud またはリージョン aws:us-east-1aws:eu-central-1のみクラスターを作成できるようにします。

resource "mongodbatlas_resource_policy" "allow_only_provider_regions" {
org_id = var.org_id
name = "cluster-allow-only-provider-regions"
policies = [
{
body = <<EOF
forbid (
principal,
action == ResourcePolicy::Action::"cluster.modify",
resource
) unless {
context.cluster.cloudProviders == [ResourcePolicy::CloudProvider::"gcp"] ||
[ResourcePolicy::Region::"aws:eu-west-1", ResourcePolicy::Region::"aws:eu-central-1"]
.containsAll(context.cluster.regions)};
EOF
},
]
}

次の例では、ユーザーがワイルドカードIP (0.0.0.0/0)からプロジェクトを編集することを防ぎます。

resource "mongodbatlas_resource_policy" "forbid_project_access_anywhere" {
org_id = var.org_id
name = "forbid-project-access-anywhere"
policies = [
{
body = <<EOF
forbid (
principal,
action == ResourcePolicy::Action::"project.ipAccessList.modify",
resource
)
when {context.project.ipAccessList.contains(ip("0.0.0.0/0"))};
EOF
},
]
}