Docs Menu
Docs Home
/ /

Ejemplos de autorización y autenticación

Los siguientes ejemplos muestran cómo implementar nuestras recomendaciones de autenticación y autorización para diferentes tipos de acceso. Los ejemplos muestran cómo implementar las recomendaciones utilizando la CLI de Atlas y Terraform.

Para obtener más información sobre Terraform, consulte Introducción a Terraform y al proveedor MongoDB Atlas y la documentación de Terraform del proveedor MongoDB Atlas.

Para acceder a la interfaz de usuario de Atlas:

  • Implementar listas de acceso IP. Por ejemplo,

    atlas organizations apiKeys accessLists create --apiKey <API_KEY_ID> --ip <IP_ADDRESS>
  • Implementar Autenticación federada o credenciales Atlas y autenticación multifactor (MFA).

    Para configurar la autenticación federada, use atlas-federatedAuthentication y los comandos relacionados. Después, puede usar el comando atlas-users-invite para invitar a usuarios a su organización y proyectos.

    Para comenzar, utilice el siguiente comando:

    atlas federatedAuthentication --help

    Nota

    Para los usuarios que se autentican con SSO, también será necesario configurar el Proveedor de Identidad SSO.

    Para obtener más información, consulte Configurar la autenticación federada.

Para acceder a la base de datos de la fuerza laboral:

  • Utilice Federación de identidad de la fuerza laboral.

  • Utilice el comando atlas-dbusers-certs-create para crear certificados de cliente X. de509 MFA (autenticación multifactor) administrados por Atlas.

    Nota

    Para utilizar certificados autoadministrados, primero debe configurar X.:509

    atlas dbusers certs create --username <USERNAME> --projectId <PROJECT_ID> [--monthsUntilExpiration <MONTHS>] [--output json]

Para acceder a la carga de trabajo (máquina), utilice la federación de identidad de carga de trabajo.

Utiliza los comandos serviceAccounts y los relacionados para crear y gestionar Cuentas de Servicio. Por ejemplo,

atlas api serviceAccounts createServiceAccount [options]

Para entornos de desarrollo y pruebas, también puedes usar claves API. Por ejemplo,

atlas organizations apiKeys create [options]

Los siguientes ejemplos muestran cómo configurar la autenticación y la autorización. Para crear recursos con Terraform, debe:

  • Cree su organización pagadora y genere una clave API para ella. Guarde su clave API como variables de entorno ejecutando el siguiente comando en la terminal:

    export MONGODB_ATLAS_PUBLIC_KEY="<insert your public key here>"
    export MONGODB_ATLAS_PRIVATE_KEY="<insert your private key here>"
  • Instalar Terraform

Debe crear los siguientes archivos para cada ejemplo. Coloque los archivos de cada ejemplo en su propio directorio. Cambie los ID y los nombres para usar sus valores. A continuación, ejecute los comandos para inicializar Terraform, ver el plan de Terraform y aplicar los cambios.

locals {
tags = {
CreatedBy = "Terraform"
Owner = var.owner
Module = "tf-example-oidc-azure"
Name = var.project_name
}
}
resource "azurerm_resource_group" "this" {
name = var.project_name
location = var.location
tags = local.tags
}
resource "azurerm_virtual_network" "this" {
name = var.project_name
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.this.location
resource_group_name = azurerm_resource_group.this.name
tags = local.tags
}
resource "azurerm_subnet" "internal" {
name = "internal"
resource_group_name = azurerm_resource_group.this.name
virtual_network_name = azurerm_virtual_network.this.name
address_prefixes = ["10.0.2.0/24"]
}
resource "azurerm_public_ip" "vm-public-ip" {
name = "public-ip-${var.project_name}"
location = var.location
resource_group_name = azurerm_resource_group.this.name
allocation_method = "Dynamic"
domain_name_label = var.project_name
tags = local.tags
}
resource "azurerm_network_interface" "this" {
name = "ip-${var.project_name}"
location = var.location
resource_group_name = azurerm_resource_group.this.name
tags = local.tags
ip_configuration {
subnet_id = azurerm_subnet.internal.id
name = "public"
private_ip_address_allocation = "Dynamic"
public_ip_address_id = azurerm_public_ip.vm-public-ip.id
}
}
resource "azurerm_user_assigned_identity" "this" {
location = var.location
name = var.project_name
resource_group_name = azurerm_resource_group.this.name
tags = local.tags
}
resource "azurerm_linux_virtual_machine" "this" {
name = var.project_name
resource_group_name = azurerm_resource_group.this.name
location = var.location
size = "Standard_F2"
admin_username = var.vm_admin_username
custom_data = data.cloudinit_config.this.rendered
network_interface_ids = [azurerm_network_interface.this.id]
tags = local.tags
admin_ssh_key {
username = var.vm_admin_username
public_key = var.ssh_public_key
}
source_image_reference {
publisher = "Canonical"
offer = "0001-com-ubuntu-server-jammy"
sku = "22_04-lts"
version = "latest"
}
os_disk {
storage_account_type = "Standard_LRS"
caching = "ReadWrite"
disk_size_gb = 30
}
identity {
type = "UserAssigned"
identity_ids = [azurerm_user_assigned_identity.this.id]
}
}
# Azure Variables
variable "token_audience" {
type = string
default = "https://management.azure.com/"
description = "Used as resource when getting the access token. See more in the [Azure documentation](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token#get-a-token-using-http)"
}
# MongoDB Atlas variables
variable "org_id" {
type = string
description = "MongoDB Atlas Organization ID"
}
variable "project_id" {
type = string
description = "MongoDB Atlas Project ID"
}
variable "project_name" {
type = string
description = "MongoDB Atlas Project Name"
}
variable "connection_strings" {
type = list(string)
description = "MongoDB Atlas Cluster Standard Connection Strings"
}
org_id = "32b6e34b3d91647abb20e7b8"
project_id = "67212db237c5766221eb6ad9"
project_name = "My Project"
connection_strings =
token_audience = "https://management.azure.com/"
output "vm_fqdn" {
value = azurerm_public_ip.vm-public-ip.fqdn
description = "Fully Qualified Domain Name (FQDN) of the Virtual Machine (VM)"
}
output "ssh_connection_string" {
value = "ssh ${var.vm_admin_username}@${azurerm_public_ip.vm-public-ip.fqdn}"
description = "Useful for connecting to the instance"
}
output "user_test_conn_string" {
value = "mongodb+srv://${local.test_user_username}:${local.test_user_password}@${replace(mongodbatlas_advanced_cluster.this.connection_strings[0].standard_srv, "mongodb+srv://", "")}/?retryWrites=true"
sensitive = true
description = "Useful for connecting to the database from Compass or other tool to validate data"
}
output "user_oidc_conn_string" {
value = local.mongodb_oidc_uri
sensitive = true
description = "Useful to see the format of the OIDC connection string"
}

Utilice lo siguiente para configurar un Proveedor de identidad federada OIDC en Atlas, para su uso con Azure. Permite el acceso mediante tokens OIDC emitidos por Azure Active Directory.

# Connection string to use in this configuration
locals {
mongodb_uri = var.connection_strings[0]
}
# Atlas organization details to use in the configuration
data "mongodbatlas_federated_settings" "this" {
org_id = var.org_id
name = var.project_name
project_id = var.project_id
}
# Configure an identity provider for federated authentication
resource "mongodbatlas_federated_settings_identity_provider" "oidc" {
federation_settings_id = data.mongodbatlas_federated_settings.this.id
audience = var.token_audience
authorization_type = "USER"
description = "oidc-for-azure"
# e.g. "https://sts.windows.net/91405384-d71e-47f5-92dd-759e272cdc1c/"
issuer_uri = "https://sts.windows.net/${azurerm_user_assigned_identity.this.tenant_id}/"
idp_type = "WORKLOAD"
name = "OIDC-for-azure"
protocol = "OIDC"
# groups_claim = null
user_claim = "sub"
}
resource "mongodbatlas_federated_settings_org_config" "this" {
federation_settings_id = data.mongodbatlas_federated_settings.this.id
org_id = var.org_id
domain_restriction_enabled = false
domain_allow_list = []
data_access_identity_provider_ids = [mongodbatlas_federated_settings_identity_provider.oidc.idp_id]
}

Utilice lo siguiente para crear un usuario de autenticación federada OIDC.

resource "mongodbatlas_database_user" "oidc" {
project_id = var.project_id
username = "${mongodbatlas_federated_settings_identity_provider.oidc.idp_id}/${azurerm_user_assigned_identity.this.principal_id}"
oidc_auth_type = "USER"
auth_database_name = "$external" # required when using OIDC USER authentication
roles {
role_name = "atlasAdmin"
database_name = "admin"
}
}

Utilice lo siguiente para crear un rol personalizado llamado my_custom_role que permite realizar operaciones de actualización, adición y eliminación en cualquier colección en la base de datos denominada myDb.

resource "mongodbatlas_custom_db_role" "create_role" {
project_id = var.project_id
role_name = "my_custom_role"
actions {
action = "UPDATE"
resources {
database_name = "myDb"
}
}
actions {
action = "INSERT"
resources {
database_name = "myDb"
}
}
actions {
action = "REMOVE"
resources {
database_name = "myDb"
}
}
}

Tip

Para ver ejemplos de Terraform que aplican nuestras recomendaciones en todos los pilares, consulte uno de los siguientes ejemplos en GitHub:

Para ver un ejemplo de un proyecto Atlas con el rol Atlas asignado a un grupo específico, consulte Ejemplos.

Volver

Autorización