Atlas リソース ポリシー
- VPCピアリング接続への変更を防ぎます。
- プライベートエンドポイント接続の変更を防ぎます。
Atlas リソース ポリシーは、Organization Owners
が Atlas クラスターを作成または構成するときに開発者が使用できる特定の構成オプションを制限できるようにする制御です。
リソースポリシーを使用すると、次のことが可能になります。
クラスターの配置を特定のクラウドプラットフォーム( Amazon Web Services 、 Google Cloud Platform、 Azure )に制限します。
クラスターの配置をクラウドプロバイダー内の指定されたリージョンに制限します。 例、
aws:us-east-1
。より厳格なネットワーク制御を強制するには、ワイルドカードIP (
0.0.0.0/0
)の使用を禁止します。ユーザーがクラスターを指定されたしきい値を超える、または低い階層にプロビジョニング、アップデート、またはオートスケーリングするのを防ぎます。
クラウドプロバイダー間でのVPCピアリングとプライベートエンドポイント接続の変更を防ぎます。
Atlas リソース ポリシーは組織レベルで作成し、組織内のすべてのプロジェクトとクラスターに適用されます。
Atlas UIと Atlas 管理APIに加えて、 HashiCorp Terraform MongoDB Atlas Provider 、 MongoDB Atlas AWS CloudFormation Resources 、または AWS CloudFormation を使用して、Atlas リソースポリシーの構成と管理を行います。
前提条件
Atlas ユーザーに適切な組織ロールがあることを確認します。
Atlas リソース ポリシーを表示するには、Atlas
Organization Read Only
Organization Member
への少なくとも または アクセス権が必要です。Atlas リソース
Organization Owner
ポリシーを作成、更新、または削除するには、Atlas に対する アクセス権が必要です。
Atlas Administration APIを使用して Atlas リソース ポリシーを作成または管理するには、公開APIキーとプライベート API キーを見つけます。Atlas Administration APIで認証できるように、詳細については、「 Atlas Administration APIの使い始める 」を参照してください。
制限
Atlas リソース ポリシーはデフォルトで許可されています。 Atlas リソースポリシーが存在しない場合、ユーザーは Atlas ユーザーロールが許可する Atlas クラスターに対してすべてのアクションを実行できます。
Atlas リソース ポリシーは定義された目的へのコンプライアンスを確保しますが、中間または過渡的な状態を強制しません。 例、下流の コンポーネントが失敗すると、ポリシーは一時的に非準拠の中間状態になることがあります。 /orgs/{ORG- ID}/nonComplientResources エンドポイントを使用して、非準拠のリソースのリストを積極的に監視する必要があります。
Cedar ポリシー言語の実装バージョンは、
.cedar
ファイルごとに 1 つの Cedar.cedar
ポリシーのみをサポートしますが、Atlas リソース ポリシーに複数の Cedar ポリシー( ファイル)を一覧表示できます。各.cedar
ファイルは、Atlas Administration APIレスポンスで、 の後の一意の24 16policies.id
進数文字列として識別されます。各 Atlas リソース ポリシーには一意の名前が必要です。 既存の名前で Atlas リソース ポリシーを作成しようとすると、サーバーは
400 (Bad Request)
ステータス コードを返します。既存のクラスターのオートスケーリング制限が新しい 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アドレスまたは範囲を参照します。 | 利用可能なオプション:
|
Atlas リソース ポリシー構成の作成
Atlas リソース ポリシーを作成するには、次の手順で、Cedar ポリシー言語を使用してポリシーを構築し、Atlas UIまたは Atlas Administration APIを使用して Atlas に追加します。
警告
新しいクラスターを含む新しい組織を作成し、非本番環境でこの機能をテストすることをお勧めします。 これにより、既存のシステムに影響を与えずに機能を安全に評価できます。
Atlas Administration APIを使用して Atlas リソース ポリシーを作成するには、Cedar ポリシー言語を使用してポリシーを構築し、POST
パラメーターを使用するpolicies
リクエストで Atlas Administration APIに渡します。
Cedar ポリシー言語でポリシーを構築します。
Cedar ポリシー言語を使用してリソースを制限するルールを指定します。組織の次の例のポリシーをコピーして変更できます。
注意
追跡を容易にするために、複数の単純な Atlas リソース ポリシーを作成することをお勧めします。 例、クラウドプロバイダーと複数のリージョンを制限する場合は、クラウドプロバイダーを制限する Atlas リソース ポリシーを 1 つ作成し、リージョンを制限する Atlas リソース ポリシーを作成することを検討してください。
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 ページに移動します。
まだ表示されていない場合は、以下から目的の組織を選択しますナビゲーション バーの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 リソース ポリシーを作成することを検討してください。
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 またはAWSリージョン aws:us-east-1
または で Atlasaws: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) };" } ] }
クラスター階層を制限する
次の例では、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) };" } ] }
プロジェクトのメンテナンス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};" } ] }
ピアリングの変更を防ぐ
次の例では、異なるクラウドプロバイダー( AWS 、Google Cloud、 Azure )にわたるVPCピアリング接続の変更を防止しています。
各クラウドプロバイダーはVPCピアリングに異なる詳細を必要とします。クラウドプロバイダーの次の詳細を収集し、例ではそれを置き換えます。
AWS: aws:<AWS_ACCOUNT_ID>:<VPC_ID>:<VPC_CIDR>
AWS_ACCOUNT_ID
: AWSアカウント番号。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プロジェクトのID 。VPC_NAME
: Google Cloud 内の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\"]};" } ] }
プライベートエンドポイントへの変更を防ぐ
次の例では、クラウドプロバイダー( AWS 、Google Cloud、 Azure )間のプライベートエンドポイント接続の変更を防止しています。
各クラウドプロバイダーには、プライベートエンドポイントの異なる詳細が必要です。クラウドプロバイダーの次の詳細を収集し、例ではそれを置き換えます。
AWS: aws:<VPC_ENDPOINT_ID>
VPC_ENDPOINT_ID
: AWS 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プロジェクトのID 。VPC_NAME
: 接続に関連付けられた Google Cloud 内のVPCの名前。
{ "name": "Policy Preventing Modifications to Peering 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\"]};" } ] }
クラウドプロバイダーを制限する
次の例では、ユーザーが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) };
クラスター階層を制限する
次の例では、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) };
プロジェクトのメンテナンスWindowsが必要
次の例では、プロジェクトにメンテナンスウィンドウが設定されている必要があります。
forbid ( principal, action == ResourcePolicy::Action::"project.maintenanceWindow.modify", resource ) when {context.project.hasDefinedMaintenanceWindow == false};
ピアリングの変更を防ぐ
次の例では、異なるクラウドプロバイダー( AWS 、Google Cloud、 Azure )にわたるVPCピアリング接続の変更を防止しています。
各クラウドプロバイダーはVPCピアリングに異なる詳細を必要とします。クラウドプロバイダーの次の詳細を収集し、例ではそれを置き換えます。
AWS: aws:<AWS_ACCOUNT_ID>:<VPC_ID>:<VPC_CIDR>
AWS_ACCOUNT_ID
: AWSアカウント番号。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プロジェクトのID 。VPC_NAME
: Google Cloud 内の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"]};
プライベートエンドポイントへの変更を防ぐ
次の例では、クラウドプロバイダー( AWS 、Google Cloud、 Azure )間のプライベートエンドポイント接続の変更を防止しています。
各クラウドプロバイダーには、プライベートエンドポイントの異なる詳細が必要です。クラウドプロバイダーの次の詳細を収集し、例ではそれを置き換えます。
AWS: aws:<VPC_ENDPOINT_ID>
VPC_ENDPOINT_ID
: AWS 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プロジェクトのID 。VPC_NAME
: 接続に関連付けられた Google Cloud 内の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"]};