Menu Docs

Políticas de recursos do Atlas

As Políticas de Recursos do Atlas são controles que permitem Organization Owners restringir as opções de configuração específicas disponíveis aos desenvolvedores quando eles criam ou configuram Atlas clusters.

Com políticas de recursos, você pode:

  • Limite o sistema de cluster a plataformas de nuvem específicas (Amazon Web Services, Google Cloud Platform, Azure).

  • Restringir o sistema de clusters a regiões designadas dentro de um provedor de nuvem. Por exemplo, aws:us-east-1.

  • Proiba o uso do IP curinga (0.0.0.0/0) para impor controles de rede mais rigorosos.

  • Impedir que os usuários provisionem, atualizem ou façam o auto-scaling de clusters para um nível acima ou abaixo de um limite especificado.

  • Exigir que um projeto tenha uma período de manutenção configurada.

  • Impeça modificações no emparelhamento de VPC e nas conexões de endpoints privados em provedores de nuvem.

Você cria as Políticas de Recursos do Atlas no nível da organização e elas se aplicam a todos os projetos e clusters dentro dessa organização.

Além da UI do Atlas e da API de administração do Atlas , você pode usar o HashiCorp Terraform MongoDB Atlas Provider, osrecursos do MongoDB Atlas Amazon Web Services CloudFormation ou Amazon Web Services CloudFormation para configurar e gerenciar as Políticas de recursos do Atlas .

  • As Políticas de Recursos do Atlas são allow-by-padrão. Se não existirem Políticas de Recursos do Atlas , os usuários poderão executar todas as ações nos clusters do Atlas que seu papel de usuário do Atlas permitir.

  • As Políticas de Recursos do Atlas garantem a conformidade com os objetivos definidos, mas não impõem estados intermediários ou de transição. Por exemplo, se um componente downstream falhar, a política poderá entrar temporariamente em um estado intermediário não compatível. Você deve monitorar proativamente sua lista de recursos não compatíveis usando o endpoint /orgs/{ORG-ID}/nonCompliantResources.

  • Nossa versão implementada da linguagem das políticas do Cedar suporta apenas uma política do Cedar por .cedar arquivo, mas você pode listar várias políticas do Cedar.cedar (arquivos) em sua Política de Recursos do Atlas . Cada .cedar arquivo é identificado na resposta da API de administração do Atlas como uma cadeia exclusiva de 24caracteres hexadecimal policies.id após.

  • Cada Política de Recursos do Atlas deve ter um nome exclusivo. Se você tentar criar uma Política de Recursos do Atlas com um nome existente, o servidor responderá com um código de status 400 (Bad Request).

  • Se os limites de auto-scaling em seu cluster existente não corresponderem à nova Política de Recursos do Atlas, o cluster poderá exceder os limites definidos pela política. Para resolver esse problema, use o endpoint /orgs/{ORG-ID}/nonCompliantResources para identificar e monitorar recursos não compatíveis e atualizá-los para atender aos requisitos da política.

  • Antes de ativar os controles de camada de rede, revise sua lista de acesso IP existente para garantir que ela contenha todos os pontos de acesso necessários.

  • As definições de endpoints privados na linguagem de políticas do Cedar exigem que você insira endereços IP individuais, pois operações curingas não são suportadas.

O MongoDB usa a linguagem de política de código aberto do Cedar para definir as políticas de recursos do Atlas . O design do Cedar equilibra a expressão com a simplicidade, empregando uma sintaxe concisa que simplifica a escrita e a compreensão das políticas de recursos.

Para criar rapidamente uma Política de Recursos do Atlas, adapte os exemplos e adicione ao Atlas usando a UI do Atlas ou a API de Administração do Atlas, seguindo para Criar uma Configuração da Política de Recursos do Atlas.

Para saber mais sobre a linguagem da política da Cedar, consulte:

Cedar Element
Descripton
Opções da política de recursos do Atlas

forbid

Nega a ação especificada se as condições na cláusula when forem atendidas. O elemento inverso, permit, não é permitido nas Políticas de Recursos do Atlas .

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

principal

Define o usuário afetado pela política.

Aplicado universalmente por padrão. Não altere ou omita.

action

Representa a ação que está sendo controlada na política.

Ações disponíveis:

  • Restringir lista de acesso IP: ResourcePolicy::Action::"project.ipAccessList.modify"

  • Restringir atributos do cluster: ResourcePolicy::Action::"cluster.modify"

  • Modificar período de manutenção: ResourcePolicy::Action::"project.maintenanceWindow.modify"

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

Refere-se a um cluster específico

Para localizar seu ID de cluster, use a API de Administração do Atlas para retornar todos os clusters em um projeto.

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

Refere-se a um projeto específico. Por exemplo, ResourcePolicy::Project::"6217f7fff7957854e2d09179"

Para localizar seu ID do projeto, consulte Gerenciar configurações de projeto.

context.cluster.project

Especifica o projeto ao qual o cluster pertence.

Para localizar seu ID do projeto, consulte Gerenciar configurações de projeto.

context.cluster.cloudProviders

Especifica os fornecedores de nuvem permitidos.

Opções disponíveis:

  • ResourcePolicy::CloudProvider::"aws"

  • ResourcePolicy::CloudProvider::"azure"

  • ResourcePolicy::CloudProvider::"gcp"

context.cluster.regions

Limita o acesso com base nas regiões de implantação.

Por exemplo, ResourcePolicy::Region::"aws:us-east-1". Para obter uma lista das regiões disponíveis por provedor de nuvem,consulte Amazon Web Services (Amazon Web Services), Google Cloud Platform (GCP) ou Microsoft Azure.

context.cluster has <PROPERTY>

Verifica se existe uma propriedade específica dentro do contexto do cluster.

Propriedades disponíveis:

  • camada do cluster de classe Geral: minGeneralClassInstanceSizeValue

  • camada do cluster de classe Geral : maxGeneralClassInstanceSizeValue

context.cluster.minGeneralClassInstanceSizeValue

Define a camada do cluster para a qual reduzir o cluster.

Por exemplo, context.cluster.minGeneralClassInstanceSizeValue < 30 corresponde a clusters cujo nível atual ou tamanho mínimo de auto-scaling é menor que M30.

context.cluster.maxGeneralClassInstanceSizeValue

Define a camada do cluster para escalar o cluster.

Por exemplo, context.cluster.maxGeneralClassInstanceSizeValue < 60 corresponde a clusters cujo nível atual ou tamanho máximo de auto-scaling é menor que M60.

context.project.hasDefinedMaintenanceWindow

Requer que um projeto tenha uma período de manutenção configurada.

Por exemplo, o context.project.hasDefinedMaintenanceWindow == false verifica se o projeto não tem nenhuma período de manutenção configurada.

context.project.ipAccessList

Especifica os endereços IP que podem acessar o cluster.

Você pode bloquear um IP curinga ip("0.0.0.0/0") para aumentar a segurança.

context.project.peeringConnections

Refere-se a uma conexão de emparelhamento VPC específica.

Para formatar para seu provedor de nuvem específico, consulte Impedir modificações no emparelhamento.

context.project.privateEndpoints

Refere-se a um endpoint privado específico.

Para formatar para seu provedor de nuvem específico, consulte Impedir modificações em endpoints privados.

containsAny e a containsAll

Verifica a inclusão de um ou mais elementos (containsAny) ou todos os elementos (containsAll) de uma lista.

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

unless

Especifica exceções a uma política. As ações são proibidas a menos que determinadas condições sejam atendidas.

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

Operadores lógicos (&&, ||)

Combine várias condições em uma política.

Opções disponíveis:

  • && (E): Exige que todas as condições sejam verdadeiras.

  • || (OU): exige que pelo menos uma condição seja verdadeira.

Endereçamento IP (ip)

Refere-se a endereços IP ou faixas específicas em políticas.

Opções disponíveis:

  • ip("0.0.0.0/0") para IP curinga.

  • ip("1.2.3.4/32") para endereços IP específicos.

Para criar uma Política de Recursos do Atlas, use o procedimento a seguir para criar uma política usando a linguagem de política Cedar e adicionar ao Atlas usando a UI do Atlas ou a API de Administração do Atlas.

Aviso

Recomendamos que você teste esse recurso em um ambiente que não seja de produção, criando uma nova organização com um cluster novo. Isso garante que você possa avaliar o recurso com segurança sem afetar seus sistemas existentes à medida que você aprimora suas habilidades.

Para criar uma Política de Recursos do Atlas usando a API de Administração do Atlas, crie uma política usando a linguagem de política do Cedar e passe-a para a API de Administração do Atlas por meio de uma solicitação POST usando o parâmetro policies.

1

Especifique as regras para restringir recursos usando a linguagem da política da Cedar. Você pode copiar e modificar as seguintes políticas de exemplo para sua organização:

Observação

Recomendamos a criação de várias políticas simples de recursos do Atlas para facilitar o rastreamento. Por exemplo, se você quiser restringir o provedor de nuvem e várias regiões, considere a criação de uma Política de Recursos do Atlas que restrinja o provedor de nuvem e outra Política de Recursos do Atlas que restrinja as regiões.

2

Utilize o verbo POST para criar uma Política de Recursos do Atlas para sua organização. A solicitação deve incluir:

  • name: O nome da Política de Recursos do Atlas .

  • policies: as restrições de cluster que você definiu no idioma da política do Cedar na etapa anterior. Se você usar aspas (") em policies.body, escape com uma barra invertida (\).

Exemplo de solicitação 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\")};"
}
]
}'

Resposta de exemplo:

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"

Para criar uma Política de Recursos do Atlas usando o novo editor de UI do Atlas , use o procedimento a seguir para copiar e colar um exemplo de política no editor e, em seguida, modifique-o para sua organização.

1
  1. Se ainda não estiver exibido, selecione sua organização desejada no Menu Organizations na barra de navegação.

  2. Clique no ícone Organization Settings próximo ao menu Organizations.

    A página Configurações da organização é exibida.

2

Clique em Resource Policy na barra lateral.

A página Políticas de recursos é exibida.

3
4
  1. Dê um nome exclusivo à sua Política de recursos do Atlas .

  2. (Opcional) Adicione uma descrição.

  3. Copie e modifique as seguintes políticas de exemplo para sua organização e, em seguida, cole o código no campo Cedar Policy.

    Observação

    Recomendamos a criação de várias políticas simples de recursos do Atlas para facilitar o rastreamento. Por exemplo, se você quiser restringir o provedor de nuvem e várias regiões, considere a criação de uma Política de Recursos do Atlas que restrinja o provedor de nuvem e outra Política de Recursos do Atlas que restrinja as regiões.

5

Esta Política de Recursos do Atlas se aplica a todos os novos clusters. Para clusters existentes que não estão em conformidade com a Política de Recursos do Atlas , o Atlas permite apenas que os usuários façam alterações no cluster que o tornem compatível. Por exemplo, se cluster0 o for executado no Amazon Web Services e você aplicar uma Política de Recursos do Atlas que bloqueia clusters no Amazon Web Services, a única alteração que os usuários poderão fazer no cluster0 enquanto ele não estiver em conformidade será mudar o provedor de nuvem para o Azure ou Google Cloud Platform.

Para retornar uma lista de clusters existentes que não estão em conformidade com sua Política de Recursos do Atlas , use o recurso GET /orgs/{ORG-ID}/nonCompliantResources.

O Atlas gera um evento de feed de atividades quando você cria, atualiza ou exclui uma Política de Recursos do Atlas. Para ajudar a identificar seus eventos de feed de atividades e facilitar o rastreamento, recomendamos a criação de várias Políticas de Recursos Atlas simples. Por exemplo, se você quiser restringir o uso de um provedor de nuvem e várias regiões, considere criar uma Política de Recursos do Atlas que restrinja o provedor de nuvem e outra Política de Recursos do Atlas que restrinja as regiões.

Copie e modifique o exemplo a seguir de políticas a serem usadas em sua organização. Todos os exemplos usam a linguagem de política do Cedar, mas, para a API de administração do Atlas, os exemplos são agrupados em JSON para que você possa colá-los diretamente em suas chamadas de API. Para saber mais, consulte Criar uma Configuração da Política de Recursos do Atlas.

O exemplo a seguir impede que os usuários criem um cluster no 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\") };"
}
]
}

O exemplo a seguir usa a unless cláusula para permitir que os usuários criem clusters somente na 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\"] };"
}
]
}

O exemplo a seguir usa a cláusula when para impedir que os usuários criem ou editem um cluster no projeto com ID 6217f7fff7957854e2d09179, a menos que a Google Cloud Platform seja o único provedor de nuvem:

{
"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\"] };"
}
]
}

O exemplo a seguir evita modificações no cluster com ID 3217e2gdf79a4c54e2d0827 quando o Google Cloud Platform é o provedor de nuvem:

{
"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\"]};"
}
]
}

O exemplo a seguir impede que os usuários criem ou editem um cluster na região 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\")};"
{
]
}

O exemplo a seguir impede que os usuários criem um cluster na região 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\") };"
}
]
}

O exemplo a seguir impede que os usuários criem um cluster nas regiões aws:us-east-1, aws:us-west-1 ou 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\"]) };"
}
]
}

O exemplo a seguir usa a unless cláusula para permitir que os usuários criem clusters somente nas regiões aws:us-east-1 e: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) };"
}
]
{

O exemplo a seguir usa a cláusula when para restringir os usuários de editar o cluster com ID 3217e2gdf79a4c54e2d0827 nas regiões aws:us-east-1 e aws:us-west-1:

{
"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\"]) };"
}
]
}

O exemplo a seguir restringe os usuários do Atlas de criarem clusters do Atlas no Google Cloud Platform ou nas regiões ou do Amazon Web Services. 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\"])};"}]
}

O exemplo a seguir impede que os usuários editem um projeto a partir de um IP curinga (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\")) };"
}
]
}

O exemplo a seguir usa a unless cláusula para permitir que os usuários editem projetos somente a partir dos endereços 1.2.3.4/32 IP, 8.8.8.8/32 4.4.4.4/32e:

{
"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) };"
}
]
}

O exemplo a seguir usa a cláusula when para restringir o Atlas de provisionar ou dimensionar clusters para menores que M30 ou maiores que M60:

Observação

Esta política não restringe clusters com uma classificação do cluster de baixa CPU ou 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) };"
}
]
}

O exemplo a seguir exige que um projeto tenha uma período de manutenção configurada:

{
"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};"
}
]
}

O exemplo a seguir impede modificações nas conexões de emparelhamento da VPC em diferentes provedores de nuvem (Amazon Web Services, Google Cloud Platform, Azure).

Cada provedor de nuvem exige detalhes diferentes para o emparelhamento VPC. Reúna os seguintes detalhes do seu provedor de nuvem e substitua-os no exemplo:

Amazon web services: aws:<AWS_ACCOUNT_ID>:<VPC_ID>:<VPC_CIDR>

  • AWS_ACCOUNT_ID: O número da sua conta do Amazon Web Services.

  • VPC_ID: A ID do VPC.

  • VPC_CIDR: O bloco CIDR da VPC.

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

  • SUBSCRIPTION_ID: Sua ID de assinatura do Azure.

  • RESOURCE_GROUP_NAME: O grupo de recursos no qual sua rede virtual (VNet) existe.

  • VNET_NAME: O nome da sua VNet.

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

  • GCP_PROJECT_ID: O ID do seu projeto da Google Cloud Platform .

  • VPC_NAME: o nome da VPC no Google Cloud Platform.

{
"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\"]};"
}
]
}

O exemplo a seguir impede modificações em conexões de endpoints privados em provedores de nuvem (Amazon Web Services, Google Cloud Platform, Azure).

Cada provedor de nuvem requer detalhes diferentes para endpoints privados. Reúna os seguintes detalhes do seu provedor de nuvem e substitua-os no exemplo:

Amazon web services: aws:<VPC_ENDPOINT_ID>

  • VPC_ENDPOINT_ID: A ID do endpoint da VPC do Amazon Web Services.

Azure: azure:<PRIVATE_ENDPOINT_RESOURCE_ID>:<PRIVATE_ENDPOINT_IP_ADDRESS>

  • PRIVATE_ENDPOINT_RESOURCE_ID: O caminho completo da ID do recurso do endpoint privado do Azure.

  • PRIVATE_ENDPOINT_IP_ADDRESS: o endereço IP atribuído ao endpoint privado.

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

  • GCP_PROJECT_ID: O ID do seu projeto da Google Cloud Platform .

  • VPC_NAME: o nome da VPC no Google Cloud Platform associado à conexão.

{
"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\"]};"
}
]
}

O exemplo a seguir impede que os usuários criem um cluster no Google Cloud Platform:

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

O exemplo a seguir usa a unless cláusula para permitir que os usuários criem clusters somente na Google Cloud Platform:

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

O exemplo a seguir usa a cláusula when para impedir que os usuários criem ou editem um cluster no projeto com ID 6217f7fff7957854e2d09179, a menos que a Google Cloud Platform seja o único provedor de nuvem:

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

O exemplo a seguir evita modificações no cluster com ID 3217e2gdf79a4c54e2d0827 quando o Google Cloud Platform é o provedor de nuvem:

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

O exemplo a seguir impede que os usuários criem ou editem um cluster na região aws:us-east-1:

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

O exemplo a seguir impede que os usuários criem um cluster na região aws:us-west-1:

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

O exemplo a seguir impede que os usuários criem um cluster nas regiões aws:us-east-1, aws:us-west-1 ou 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"]) };

O exemplo a seguir usa a unless cláusula para permitir que os usuários criem clusters somente nas regiões aws:us-east-1 e: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) };

O exemplo a seguir usa a cláusula when para restringir os usuários de editar o cluster com ID 3217e2gdf79a4c54e2d0827 nas regiões aws:us-east-1 e aws:us-west-1:

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"]) };

O exemplo a seguir impede que os usuários editem um projeto a partir de um IP curinga (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")) };

O exemplo a seguir usa a unless cláusula para permitir que os usuários editem projetos somente a partir dos endereços 1.2.3.4/32 IP, 8.8.8.8/32 4.4.4.4/32e:

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

O exemplo a seguir usa a cláusula when para restringir o Atlas de provisionar ou dimensionar clusters para menores que M30 ou maiores que M60:

Observação

Esta política não restringe clusters com uma classificação do cluster de baixa CPU ou 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) };

O exemplo a seguir exige que um projeto tenha uma período de manutenção configurada:

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

O exemplo a seguir impede modificações nas conexões de emparelhamento da VPC em diferentes provedores de nuvem (Amazon Web Services, Google Cloud Platform, Azure).

Cada provedor de nuvem exige detalhes diferentes para o emparelhamento VPC. Reúna os seguintes detalhes do seu provedor de nuvem e substitua-os no exemplo:

Amazon web services: aws:<AWS_ACCOUNT_ID>:<VPC_ID>:<VPC_CIDR>

  • AWS_ACCOUNT_ID: O número da sua conta do Amazon Web Services.

  • VPC_ID: A ID do VPC.

  • VPC_CIDR: O bloco CIDR da VPC.

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

  • SUBSCRIPTION_ID: Sua ID de assinatura do Azure.

  • RESOURCE_GROUP_NAME: O grupo de recursos no qual sua rede virtual (VNet) existe.

  • VNET_NAME: O nome da sua VNet.

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

  • GCP_PROJECT_ID: O ID do seu projeto da Google Cloud Platform .

  • VPC_NAME: o nome da VPC no Google Cloud Platform.

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

O exemplo a seguir impede modificações em conexões de endpoints privados em provedores de nuvem (Amazon Web Services, Google Cloud Platform, Azure).

Cada provedor de nuvem requer detalhes diferentes para endpoints privados. Reúna os seguintes detalhes do seu provedor de nuvem e substitua-os no exemplo:

Amazon web services: aws:<VPC_ENDPOINT_ID>

  • VPC_ENDPOINT_ID: A ID do endpoint da VPC do Amazon Web Services.

Azure: azure:<PRIVATE_ENDPOINT_RESOURCE_ID>:<PRIVATE_ENDPOINT_IP_ADDRESS>

  • PRIVATE_ENDPOINT_RESOURCE_ID: O caminho completo da ID do recurso do endpoint privado do Azure.

  • PRIVATE_ENDPOINT_IP_ADDRESS: o endereço IP atribuído ao endpoint privado.

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

  • GCP_PROJECT_ID: O ID do seu projeto da Google Cloud Platform .

  • VPC_NAME: o nome da VPC no Google Cloud Platform associado à conexão.

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