Docs 菜单

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用户界面和Atlas Administration API之外,您还可以使用 HashiCorp Terraform MongoDB Atlas提供程序、 MongoDB Atlas Amazon Web Services CloudFormation 资源或 Amazon Web Services CloudFormation 来配置和管理Atlas资源策略。

  • Atlas资源策略默认为允许。 如果不存在Atlas资源策略,则用户可以在Atlas集群上执行其Atlas 用户角色允许的所有操作。

  • Atlas资源策略确保合规既定目标,但不实施中间或过渡状态。 示例,如果下游组件发生故障,策略可能会暂时进入不合规中间状态。 您应使用 /orgs/{ORG- ID }/nonCompliantResources 端点主动监控不合规资源列表。

  • 我们实施的 Cedar 策略语言版本仅支持每个 文件一个 Cedar.cedar 策略,但您可以在Atlas资源策略中列出多个 Cedar 策略(.cedar 文件)。每个.cedar 文件在Atlas Administration API响应中都被标识为 之后的唯一24 policies.id-十六进制字符串。

  • 每个Atlas资源策略都必须有一个唯一名称。 如果您尝试使用现有名称创建Atlas资源策略,服务器将使用 400 (Bad Request) 状态代码进行响应。

  • 如果现有集群的自动伸缩限制与新的Atlas资源策略不匹配,则集群可能会超出策略定义的边界。要解决此问题,请使用 /orgs/{ORG-ID}/nonCompliantResources 端点识别和监控不合规资源,以便对其更新以满足策略要求。

  • 在启用网络层控制之前,查看现有的IP访问列表,确保其中包含所有必要的访问权限点。

  • Cedar 策略语言 中的私有端点定义要求您输入单个IP地址,因为不支持通配符操作。

MongoDB使用开源 Cedar 策略语言来定义Atlas资源策略。Cedar 的设计平衡了表现力和简单性,采用简洁的语法,简化了资源策略的编写和理解。

要快速创建Atlas资源策略,请调整示例并使用Atlas用户界面或Atlas管理API添加到Atlas ,具体方法请参阅创建Atlas资源策略配置。

要学习;了解有关 Cedar 策略语言的更多信息,请参阅:

Cedar Element
Descripton
Atlas资源策略选项

forbid

如果满足 when 子句中的条件,则拒绝指定的动作。 Atlas资源策略中不允许使用反向元素 permit

示例: 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

根据部署区域限制访问权限。

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

指特定的私有端点。

要针对特定云提供商进行格式化,请参阅防止修改私有端点。

containsAnycontainsAll

检查是否包含列表中的一个或多个元素 (containsAny) 或所有元素 (containsAll)。

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

unless

指定策略的例外情况。 除非满足某些条件,否则禁止采取行动。

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

逻辑操作符(&&||

在一项策略中组合多个条件。

可用选项:

  • && (AND):要求所有条件都为 true。

  • || (OR):要求至少有一个条件为 true。

IP寻址 (ip)

指策略中的特定IP地址或范围。

可用选项:

  • ip("0.0.0.0/0") 用于通配符IP。

  • ip("1.2.3.4/32") 用于特定IP地址。

要创建 Atlas 资源策略,请按照以下过程使用 Cedar 策略语言 构建策略,并使用 Atlas 用户界面或 Atlas 管理 API 将其添加到 Atlas。

警告

我们建议您在非生产环境中测试此功能,方法是使用新集群创建新组织。 这可确保您可以安全地评估该功能,而在提高技能时不会影响现有系统。

要使用 Atlas Administration API 创建 Atlas 资源策略,请使用Cedar 策略语言构建策略,并通过使用 policies 参数的 POST 请求将其传递给 Atlas Administration API。

1

使用 Cedar 策略语言 指定限制资源的规则。您可以复制并修改组织的以下示例策略:

注意

我们建议创建多个简单的Atlas资源策略,以便更轻松地进行跟踪。 示例,如果您想限制云提供商和多个地区,请考虑创建一个限制云提供商的Atlas资源策略和另一个限制地区的Atlas资源策略。

2

使用 POST 动词为您的组织创建Atlas资源策略。 该请求必须包括:

  • 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用户界面编辑器创建Atlas资源策略,请使用以下过程将示例策略复制并粘贴到编辑器中,然后根据您的组织对其进行修改。

1
  1. 如果尚未显示,组织从导航栏中的Organizations菜单。

  2. 单击 Organizations 菜单旁边的 Organization Settings 图标。

    显示“组织设置”页面。

2

单击侧边栏中的 Resource Policy(支持)。

显示“资源策略”页面。

3
4
  1. 为您的Atlas资源策略指定一个唯一名称。

  2. (可选)添加说明。

  3. 复制并修改组织的以下示例策略,然后将代码粘贴到 Cedar Policy字段中。

    注意

    我们建议创建多个简单的Atlas资源策略,以便更轻松地进行跟踪。 示例,如果您想限制云提供商和多个地区,请考虑创建一个限制云提供商的Atlas资源策略和另一个限制地区的Atlas资源策略。

5

此Atlas资源策略适用于所有新集群。 对于不符合Atlas资源策略的现有集群, Atlas只允许用户对集群进行更改,以使集群合规。 示例,如果cluster0 在Amazon Web Services上运行,而您应用了阻止Amazon Web Services上的集群的Atlas资源策略,则在 cluster0不合规时,用户可以对它进行的唯一更改就是将云提供商切换到Azure或Google Cloud Platform。

要返回不符合Atlas资源策略的现有集群列表,请使用GET /orgs/{ORG- ID}/nonCompliantResources资源。

当您创建、更新或删除Atlas资源策略时, Atlas会生成操作日志事件。为了帮助识别操作日志事件并简化跟踪,我们建议创建多个简单的Atlas资源策略。示例,如果您想限制云提供商和多个区域的使用,可以考虑创建一个限制云提供商的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 子句防止用户在ID为 6217f7fff7957854e2d09179 的项目中创建或编辑集群,除非Google Cloud Platform是唯一的云提供商:

{
"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-1azure: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区域 aws:us-east-1aws:us-west-1 中创建Atlas集群。

{
"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

注意

此策略不限制集群类别为 Low CPU NVMe 固态硬盘的集群类。

{
"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_IDVPC的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: 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_IDAmazon Web Services VPC端点的ID 。

Azure: azure:<PRIVATE_ENDPOINT_RESOURCE_ID>:<PRIVATE_ENDPOINT_IP_ADDRESS>

  • PRIVATE_ENDPOINT_RESOURCE_IDAzure私有端点的完整资源ID路径。

  • PRIVATE_ENDPOINT_IP_ADDRESS:分配给私有端点的IP解决。

Google Cloud: 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.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 子句防止用户在ID为 6217f7fff7957854e2d09179 的项目中创建或编辑集群,除非Google Cloud Platform是唯一的云提供商:

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-1azure: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

注意

此策略不限制集群类别为 Low CPU NVMe 固态硬盘的集群类。

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_IDVPC的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: 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_IDAmazon Web Services VPC端点的ID 。

Azure: azure:<PRIVATE_ENDPOINT_RESOURCE_ID>:<PRIVATE_ENDPOINT_IP_ADDRESS>

  • PRIVATE_ENDPOINT_RESOURCE_IDAzure私有端点的完整资源ID路径。

  • PRIVATE_ENDPOINT_IP_ADDRESS:分配给私有端点的IP解决。

Google Cloud: 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"]};