Docs Menu

Atlas リソース ポリシー

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 リソース ポリシーを表示するには、AtlasOrganization Read OnlyOrganization 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アドレスを入力する必要があります。

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>

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

利用可能なプロパティ:

  • 一般クラスのクラスター層:minGeneralClassInstanceSizeValue

  • 一般クラスのクラスター層:maxGeneralClassInstanceSizeValue

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 };

論理演算子(&&||

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

利用可能なオプション:

  • && (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を使用して Atlas に追加します。

警告

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

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

1

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

注意

追跡を容易にするために、複数の単純な 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
  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 リソース ポリシーを作成することを検討してください。

次の例のポリシーをコピーして変更して、組織で使用します。すべての例では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 または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 (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) };"
}
]
}

次の例では、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};"
}
]
}

次の例では、異なるクラウドプロバイダー( 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: 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プロジェクトの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-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) };

次の例では、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};

次の例では、異なるクラウドプロバイダー( 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: 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プロジェクトの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"]};