Atlas リソース ポリシー
- クラスター接続に最小 TLS バージョンを適用します。
- クラスター接続には特定の TLS 暗号スイート構成が必要です。
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 の以前のバージョンからの接続をブロックする可能性があります。
前提条件
Atlas ユーザーに適切な組織ロールがあることを確認します。
Atlas リソース ポリシーを表示するには、Atlas
Organization Read Only
Organization Member
への少なくとも または アクセス権が必要です。Atlas リソース
Organization Owner
ポリシーを作成、更新、または削除するには、Atlas に対する アクセス権が必要です。
Atlas Administration APIを使用して Atlas リソース ポリシーを作成または管理するには、Atlas Administration APIで認証できるように、公開APIキーとプライベート API キーを見つけます。詳細については、「Atlas Administration APIの使い始める」を参照してください。
制限
/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アドレスを入力する必要があります。
Cedar ポリシー言語の使用
MongoDB は、オープンソースの Cedar ポリシー言語を使用して、Atlas リソース ポリシーを定義します。Cedar の設計は、リソースポリシーの書き込みと理解の両方を効率化する簡潔な構文を採用して、表現力と単純性のバランスをとります。
Atlas リソース ポリシーを迅速に作成するには、例を調整し、Atlas UIまたは Atlas Administration APIを使用して Atlas に を追加します。次の「 Atlas リソース ポリシー構成の作成 」を参照してください。
Cedar ポリシー言語の詳細については、以下を参照してください。
Atlas のキー Cedarシンタックス要素
Cedar Element | Descripton | Atlas リソース ポリシー オプション |
---|---|---|
|
| 例: |
| ポリシーの影響を受けるユーザーを定義します。 | デフォルトでは ユニバーサルに適用されます。 を変更したり省略したりしないでください。 |
| ポリシーで制御されているアクションを表します。 | 利用可能なアクション:
|
| 特定のクラスターを参照します | クラスターID を見つけるには、Atlas Administration API を使用してプロジェクト内のすべてのクラスターを返します。 |
| 特定のプロジェクトを参照します。 例、 | プロジェクトID を見つけるには、「 プロジェクト設定の管理 」を参照してください。 |
| クラスターが属するプロジェクトを指定します。 | プロジェクトID を見つけるには、「 プロジェクト設定の管理 」を参照してください。 |
| 許可されたクラウドプロバイダーを指定します。 | 利用可能なオプション:
|
| 配置リージョンに基づいてアクセスを制限します。 | 例、 |
| クラスター コンテキスト内に特定のプロパティが存在するかどうかを確認します。 | |
| 例、 | |
| 例、 | |
| プロジェクトにメンテナンスウィンドウが設定されている必要があります。 | 例、 |
| クラスターにアクセスできるIPアドレスを指定します。 | ワイルドカードIP |
| 特定のVPCピアリング接続を示します。 | 特定のクラウドプロバイダーの形式には、「 ネットワーク ピアリングへの変更の防止 」を参照してください。 |
| 特定のプライベートエンドポイントを参照します。 | 特定のクラウドプロバイダーの形式には、「 プライベートエンドポイントへの変更の防止 」を参照してください。 |
| リストに 1 つ以上の要素( | 例: |
| ポリシーに例外を指定します。 特定の条件が満たされない限り、アクションは禁止されます。 | 例: |
| リストが空かどうかを確認します。例、パブリック ネットワーク経由でアクセスを強制するには、 IP アクセス リストが空である必要があります。 |
|
論理演算子( | ポリシーで複数の条件を組み合わせます。 | 利用可能なオプション:
|
IPアドレス指定( | ポリシー内の特定のIPアドレスまたは範囲を参照します。 | 利用可能なオプション:
|
Atlas リソース ポリシー構成の作成
Atlas リソース ポリシーを作成するには、次の手順で、Cedar ポリシー言語を使用してポリシーを構築し、 Atlas UI、 Atlas Administration API、または Terraform を使用して Atlas に追加します。
警告
新しいクラスターを含む新しい組織を作成し、非本番環境でこの機能をテストすることをお勧めします。 これにより、既存のシステムに影響を与えずに機能を安全に評価できます。
Atlas Administration APIを使用して Atlas リソース ポリシーを作成するには、Cedar ポリシー言語を使用してポリシーを構築し、POST
パラメーターを使用するpolicies
リクエストで Atlas Administration APIに渡します。
POST
リクエストを送信します。
組織の 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 リソース ポリシーを作成するには、次の手順で例ポリシーをコピーしてエディターに貼り付け、組織用に変更します 。
Atlas で、 Organization Settings ページに移動します。
警告
ナビゲーションの改善が進行中
現在、新しく改善されたナビゲーション エクスペリエンスを展開しています。次の手順が Atlas UIのビューと一致しない場合は、プレビュー ドキュメントを参照してください。
まだ表示されていない場合は、以下から目的の組織を選択しますナビゲーション バーのOrganizationsメニュー
[Organizations] メニューの横にある [Organization Settings] アイコンをクリックします。
[ Organization Settings ]ページが表示されます。
Resource Policies ページに移動します。
サイドバーの Resource Policy をクリックします。
[ リソース ポリシー ] ページが表示されます。
この 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 リソース ポリシーを作成することを検討してください。
注意
追加の前提条件
このガイドを続行する前に、次の手順を実行してください。
支払い組織のAPIキーを作成し、次のコマンドを実行中てAPIキーを環境変数として保存します。
export MONGODB_ATLAS_PUBLIC_KEY="<your public key>" export MONGODB_ATLAS_PRIVATE_KEY="<your private key>" Terraform CLI をインストールする
Terraform を使用して Atlas リソース ポリシーを作成するには、MongoDB Atlas Terraform プロバイダー を構成し、Cedar ポリシー言語 を使用してポリシーを構築し、それを main.tf
Terraformファイルで指定します。
MongoDB Atlas Terraform プロバイダーを構成します。
プロジェクトディレクトリに 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
Atlas リソース ポリシーの例
次の例のポリシーをコピーして変更して、組織で使用します 。すべての例では 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-1
、aws: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-1
とazure: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-1
と aws: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-1
aws: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アドレスの制限
次の例では、ユーザーがワイルドカード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/32
、8.8.8.8/32
、4.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
より大きいものに制限します。
{ "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) };" } ] }
プロジェクトのメンテナンスWindowsが必要
次の例では、プロジェクトにメンテナンスウィンドウが設定されている必要があります。
{ "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
: VPCのCIDR ブロック。
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 プロトコルと暗号スイートの制限
次の例では 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-1
、aws: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-1
とazure: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-1
と aws: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アドレスの制限
次の例では、ユーザーがワイルドカード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/32
、8.8.8.8/32
、4.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
より大きいものに制限します。
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) };
プロジェクトのメンテナンスWindowsが必要
次の例では、プロジェクトにメンテナンスウィンドウが設定されている必要があります。
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
: VPCのCIDR ブロック。
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 プロトコルと暗号スイートの制限
次の例では 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-1
とaws: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-1
と aws: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アドレスの制限
次の例では、ユーザーがワイルドカード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 }, ] }