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 Cómo empezar con Terraform y el proveedor de MongoDB Atlas y la Docs de Terraform del proveedor MongoDB Atlas.
Atlas UI
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 de 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, utiliza 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, consulta Configurar autenticación federada.
Acceso a la base de datos
Acceso del personal (humano)
Para acceder a la base de datos de la fuerza laboral:
Utiliza el comando atlas-dbusers-certs-create para crear certificados X.509 client de MFA (Autenticación multifactor) gestionados por Atlas.
Nota
Para usar certificados autogestionados, primero debes configurar X.509:
atlas dbusers certs create --username <USERNAME> --projectId <PROJECT_ID> [--monthsUntilExpiration <MONTHS>] [--output json]
Acceso a la carga de trabajo (máquina)
Para el acceso a la carga de trabajo (máquina), utilice Federación de identidad de carga de trabajo.
Acceso a la API
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 prueba, también puedes usar claves de 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:
Crea tu organización pagadora y crea una clave de API para la organización pagadora. Guarde su clave API como variables de entorno ejecutando el siguiente comando en el terminal:
export MONGODB_ATLAS_PUBLIC_KEY="<insert your public key here>" export MONGODB_ATLAS_PRIVATE_KEY="<insert your private key here>"
Archivos comunes
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.
azure.tf
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] } }
variables.tf
# 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" }
terraform.tfvars
org_id = "32b6e34b3d91647abb20e7b8" project_id = "67212db237c5766221eb6ad9" project_name = "My Project" connection_strings = token_audience = "https://management.azure.com/"
salidas.tf
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" }
Configure la configuración federada para el proveedor de identidad
Utiliza lo siguiente para configurar un OIDC proveedor de identidad federado en Atlas, para utilizarlo con Azure. Permite el acceso mediante el uso de 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] }
Use 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" } }
Configurar rol personalizado
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 ejemplos de Terraform que aplican nuestras recomendaciones en todos los pilares, consulta uno de los siguientes ejemplos en GitHub:
Para ver un ejemplo de un proyecto de Atlas con el rol de Atlas asignado a un grupo específico, consulta Ejemplos.