Políticas de recursos do Atlas
Nesta página
- Impedir modificações nas conexões de peering da VPC.
- Impedir modificações em conexões de endpoints privados.
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 .
Pré-requisitos
Verifique se o usuário do Atlas tem o role de organização apropriado:
Para visualizar as Políticas de recursos do Atlas , você deve ter pelo menos
Organization Read Only
ouOrganization Member
acesso ao Atlas.Para criar, atualizar ou excluir uma Política de Recursos do Atlas , você deve ter acesso ao
Organization Owner
Atlas.
Para usar a API de administração do Atlas para criar ou gerenciar políticas de recursos do Atlas, localize suas chaves de API públicas e privadas para poder se autenticar na API de administração do Atlas. Para saber mais, consulte Introdução à API Atlas Administration.
Limitações
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 hexadecimalpolicies.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.
Usando o idioma da política da Cedar
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:
Elementos de sintaxe do Key Cedar para Atlas
Cedar Element | Descripton | Opções da política de recursos do Atlas |
---|---|---|
| Nega a ação especificada se as condições na cláusula | Exemplo: |
| Define o usuário afetado pela política. | Aplicado universalmente por padrão. Não altere ou omita. |
| Representa a ação que está sendo controlada na política. | Ações disponíveis:
|
| 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. |
| Refere-se a um projeto específico. Por exemplo, | Para localizar seu ID do projeto, consulte Gerenciar configurações de projeto. |
| Especifica o projeto ao qual o cluster pertence. | Para localizar seu ID do projeto, consulte Gerenciar configurações de projeto. |
| Especifica os fornecedores de nuvem permitidos. | Opções disponíveis:
|
| Limita o acesso com base nas regiões de implantação. | Por exemplo, |
| Verifica se existe uma propriedade específica dentro do contexto do cluster. | |
| Define a camada do cluster para a qual reduzir o cluster. | Por exemplo, |
| Define a camada do cluster para escalar o cluster. | Por exemplo, |
| Requer que um projeto tenha uma período de manutenção configurada. | Por exemplo, o |
| Especifica os endereços IP que podem acessar o cluster. | Você pode bloquear um IP curinga |
| 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. |
| Refere-se a um endpoint privado específico. | Para formatar para seu provedor de nuvem específico, consulte Impedir modificações em endpoints privados. |
| Verifica a inclusão de um ou mais elementos ( | Exemplo: |
| Especifica exceções a uma política. As ações são proibidas a menos que determinadas condições sejam atendidas. | Exemplo: |
Operadores lógicos ( | Combine várias condições em uma política. | Opções disponíveis:
|
Endereçamento IP ( | Refere-se a endereços IP ou faixas específicas em políticas. | Opções disponíveis:
|
Criar uma configuração da Política de Recursos do Atlas
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
.
Construa a política no idioma da política da Cedar.
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.
Envie uma solicitação POST
.
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 ("
) empolicies.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.
No Atlas, acesse a página Organization Settings.
Se ainda não estiver exibido, selecione sua organização desejada no Menu Organizations na barra de navegação.
Clique no ícone Organization Settings próximo ao menu Organizations.
A página Configurações da organização é exibida.
Acesse a página Resource Policies.
Clique em Resource Policy na barra lateral.
A página Políticas de recursos é exibida.
Nomeie, descreva e defina sua Política de Recursos do Atlas .
Dê um nome exclusivo à sua Política de recursos do Atlas .
(Opcional) Adicione uma descrição.
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.
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.
Exemplos da Política de Recursos do Atlas
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.
Restringir provedor de nuvem
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\"]};" } ] }
Restringir região
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\"]) };" } ] }
Restringir provedor de nuvem e região
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\"])};"}] }
Restringir endereços IP
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/32
e:
{ "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) };" } ] }
Restringir nível de cluster
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) };" } ] }
Exigir janelas de manutenção do projeto
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};" } ] }
Impedir modificações no emparelhamento
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\"]};" } ] }
Impedir modificações em endpoints privados
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\"]};" } ] }
Restringir provedor de nuvem
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"]};
Restringir região
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"]) };
Restringir endereços IP
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/32
e:
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) };
Restringir nível de cluster
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) };
Exigir janelas de manutenção do projeto
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};
Impedir modificações no emparelhamento
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"]};
Impedir modificações em endpoints privados
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"]};