Políticas de recursos do Atlas
Nesta página
- Imponha uma versão mínima do TLS para conexões do cluster.
- Exigir uma configuração específica do conjunto de cifras TLS para conexões de cluster.
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.Proiba o tráfego através de redes públicas exigindo que a lista de acesso IP permaneça vazia ou impedindo adições a uma lista de acesso IP existente.
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.
Imponha uma versão mínima do TLS ou exija uma configuração específica do conjunto de cifras do TLS para conexões de cluster.
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 .
Observação
Para o HashiCorp Terraform MongoDB Atlas Provider, use 1.33.0 ou posterior para impor uma versão mínima do TLS ou exigir uma configuração específica do conjunto de cifras do TLS para conexões de cluster. O Atlas pode bloquear conexões de versões anteriores do Terraform.
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
É altamente recomendável monitorar proativamente sua lista de recursos não compatíveis usando o endpoint /orgs/{ORG-ID}/nonCompliantResources. 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.
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 retornará um código de status
400 (Bad Request)
.É possível criar Políticas de Recursos do Atlas idênticas com nomes diferentes. Embora isso não cause conflitos funcionais, pode levar a redundância e confusão no gerenciamento de políticas.
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.
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.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 de rede. |
| 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: |
| Verifica se uma lista está vazia. Por exemplo, a imposição de nenhum acesso em redes públicas exige que a lista de acesso IP esteja vazia. |
|
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, utilize o seguinte procedimento para construir uma política utilizando a linguagem de política do Cedar e adicionar ao Atlas utilizando a UI do Atlas, a API de Administração do Atlas ou Terraform.
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.
Aviso
Melhorias na navegação em andamento
No momento, estamos lançando uma experiência de navegação nova e aprimorada. Se as etapas a seguir não corresponderem à sua visualização na UI do Atlas, consulte a documentação de visualização.
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.
Observação
Pré-requisitos adicionais
Conclua as etapas a seguir antes de continuar com este guia:
Crie uma chave de API para sua organização pagadora e armazene suas chaves de API como variáveis de ambiente executando os seguintes comandos:
export MONGODB_ATLAS_PUBLIC_KEY="<your public key>" export MONGODB_ATLAS_PRIVATE_KEY="<your private key>"
Para criar uma Política de Recursos do Atlas usando o Terraform, configure o MongoDB Atlas Terraform Provider e, em seguida, crie uma política usando a linguagem de política do Cedar e especificando-a em seu arquivo main.tf
Terraform.
Configure o provedor de Terraformes do MongoDB Atlas .
Crie um novo arquivo no seu diretório de projeto denominado main.tf
. Cole o seguinte código, que configura o MongoDB Atlas Provider e especifica suas chaves públicas e privadas:
terraform { required_version = ">=1.4" required_providers { mongodbatlas = { source = "mongodb/mongodbatlas" version = "~>1.31" } } } provider "mongodbatlas" {} variable "org_id" { type = string description = "<Organization ID>" }
Depois de criar o arquivo, execute o seguinte comando para baixar a versão mais recente do provedor e inicializar o Terraform:
terraform init -upgrade
Defina 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.
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 do provedor de nuvem
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) };" } ] }
O exemplo a seguir garante que todo o tráfego para o cluster seja proibido em redes públicas, exigindo que a lista de acesso IP esteja vazia.
{ "name": "Policy Preventing Access Over Public Networks", "policies": [ { "body": "forbid (principal, action == ResourcePolicy::Action::\"project.ipAccessList.modify\", resource) unless {context.project.ipAccessList.isEmpty() };" } ] }
Restringir tamanhos de camada 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 de rede
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 Private Endpoints 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 conjuntos de protocolo e criptografia TLS
O exemplo a seguir restringe a versão mínima de TLS que seu cluster aceita para conexões de entrada com o TLS 1.2.
Os valores possíveis para minTLSVersion
incluem:
TLS 1.0:
ResourcePolicy::TLSVersion::\"tls1_0\"
TLS 1.1:
ResourcePolicy::TLSVersion::\"tls1_1\"
TLS 1.2:
ResourcePolicy::TLSVersion::\"tls1_2\"
{ "name": "Policy Restricting Cluster Connections to Minimum TLS 1.2", "policies": [ { "body": "forbid (principal, action == ResourcePolicy::Action::\"cluster.modify\", resource)unless {context.cluster.minTLSVersion == ResourcePolicy::TLSVersion::\"tls1_2\"};" } ] }
O exemplo a seguir exige que os clusters usem a configuração personalizada do conjunto de cifras TLS TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
definindo ResourcePolicy::CipherConfigMode::\"custom\"
.
Os valores possíveis para configurações personalizadas do conjunto de cifras TLS são:
ResourcePolicy::CipherSuite::\"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\"
ResourcePolicy::CipherSuite::\"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\"
{ "name": "Policy Requiring Specific TLS Cipher Suite", "policies": [ { "body": "forbid (principal, action == ResourcePolicy::Action::\"cluster.modify\", resource) unless {context.cluster.cipherConfigMode == ResourcePolicy::CipherConfigMode::\"custom\" && context.cluster.cipherSuites == [ResourcePolicy::CipherSuite::\"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\"]};" } ] }
O exemplo a seguir exige que os clusters usem a configuração padrão do conjunto de cifras TLS.
{ "name": "Policy Requiring Default TLS Cipher Suite", "policies": [ { "body": "forbid (principal, action == ResourcePolicy::Action::\"cluster.modify\", resource) unless {context.cluster.cipherConfigMode == ResourcePolicy::CipherConfigMode::\"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 do provedor de nuvem
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) };
O exemplo a seguir garante que todo o tráfego para o cluster seja proibido em redes públicas, exigindo que a lista de acesso IP esteja vazia.
forbid ( principal, action == ResourcePolicy::Action::"project.ipAccessList.modify", resource ) unless { context.project.ipAccessList.isEmpty() };
Restringir tamanhos de camada 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 de rede
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"]};
Restringir conjuntos de protocolo e criptografia TLS
O exemplo a seguir restringe a versão mínima de TLS que seu cluster aceita para conexões de entrada com o TLS 1.2.
Os valores possíveis para minTLSVersion
incluem:
TLS 1.0:
ResourcePolicy::TLSVersion::"tls1_0"
TLS 1.1:
ResourcePolicy::TLSVersion::"tls1_1"
TLS 1.2:
ResourcePolicy::TLSVersion::"tls1_2"
forbid ( principal, action == ResourcePolicy::Action::"cluster.modify", resource ) unless { context.cluster.minTLSVersion == ResourcePolicy::TLSVersion::"tls1_2" };
O exemplo a seguir exige que os clusters usem a configuração personalizada do conjunto de cifras TLS TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
definindo ResourcePolicy::CipherConfigMode::"custom"
.
Os valores possíveis para configurações personalizadas do conjunto de cifras TLS são:
ResourcePolicy::CipherSuite::"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
ResourcePolicy::CipherSuite::"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
forbid ( principal, action == ResourcePolicy::Action::"cluster.modify", resource ) unless { context.cluster.cipherConfigMode == ResourcePolicy::CipherConfigMode::"custom" && context.cluster.cipherSuites == [ResourcePolicy::CipherSuite::"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"] };
O exemplo a seguir exige que os clusters usem a configuração padrão do conjunto de cifras TLS.
forbid ( principal, action == ResourcePolicy::Action::"cluster.modify", resource ) unless { context.cluster.cipherConfigMode == ResourcePolicy::CipherConfigMode::"default" };
Restringir provedor de nuvem
O exemplo a seguir impede que os usuários criem um cluster em todos os fornecedores de nuvem, exceto AWS:
resource "mongodbatlas_resource_policy" "allow_only_aws_cloud_provider" { org_id = var.org_id name = "cluster-allow-only-aws-cloud-provider" policies = [ { body = <<EOF forbid ( principal, action == ResourcePolicy::Action::"cluster.modify", resource ) unless { context.cluster.cloudProviders == [ResourcePolicy::CloudProvider::"aws"] }; EOF }] }
Restringir região
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:aws:eu-central-1
resource "mongodbatlas_resource_policy" "allow_only_regions" { org_id = var.org_id name = "cluster-allow-only-regions" policies = [ { body = <<EOF forbid ( principal, action == ResourcePolicy::Action::"cluster.modify", resource ) unless { [ResourcePolicy::Region::"aws:eu-west-1", ResourcePolicy::Region::"aws:eu-central-1"] .containsAll(context.cluster.regions)}; EOF }, ] }
Restringir provedor de nuvem e região
O exemplo a seguir usa a cláusula unless
para permitir que os usuários criem clusters somente no Google Cloud ou nas regiões aws:us-east-1
e aws:eu-central-1
:
resource "mongodbatlas_resource_policy" "allow_only_provider_regions" { org_id = var.org_id name = "cluster-allow-only-provider-regions" policies = [ { body = <<EOF forbid ( principal, action == ResourcePolicy::Action::"cluster.modify", resource ) unless { context.cluster.cloudProviders == [ResourcePolicy::CloudProvider::"gcp"] || [ResourcePolicy::Region::"aws:eu-west-1", ResourcePolicy::Region::"aws:eu-central-1"] .containsAll(context.cluster.regions)}; EOF }, ] }
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
):
resource "mongodbatlas_resource_policy" "forbid_project_access_anywhere" { org_id = var.org_id name = "forbid-project-access-anywhere" policies = [ { body = <<EOF forbid ( principal, action == ResourcePolicy::Action::"project.ipAccessList.modify", resource ) when {context.project.ipAccessList.contains(ip("0.0.0.0/0"))}; EOF }, ] }