Skip to content

Resource: proxmox_realm_ldap

Manages an LDAP authentication realm in Proxmox VE.

LDAP realms allow Proxmox to authenticate users against an LDAP directory service.

Privileges Required

Path Attribute
/access/domains Realm.Allocate

Schema

Required

  • base_dn (String) LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com').
  • realm (String) Realm identifier (e.g., 'example.com').
  • server1 (String) Primary LDAP server hostname or IP address.

Optional

  • bind_dn (String) LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com').
  • bind_password (String, Sensitive) Password for the bind DN. Note: stored in Proxmox but not returned by API.
  • ca_path (String) Path to CA certificate file for SSL verification.
  • case_sensitive (Boolean) Enable case-sensitive username matching.
  • cert_key_path (String) Path to client certificate key.
  • cert_path (String) Path to client certificate for SSL authentication.
  • comment (String) Description of the realm.
  • default (Boolean) Use this realm as the default for login.
  • filter (String) LDAP filter for user searches.
  • group_classes (String) LDAP objectClasses for groups (comma-separated).
  • group_dn (String) LDAP base DN for group searches.
  • group_filter (String) LDAP filter for group searches.
  • group_name_attr (String) LDAP attribute representing the group name.
  • mode (String) LDAP connection mode (ldap, ldaps, ldap+starttls).
  • port (Number) LDAP server port. Default: 389 (LDAP) or 636 (LDAPS).
  • secure (Boolean, Deprecated) Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP.
  • server2 (String) Fallback LDAP server hostname or IP address.
  • ssl_version (String) SSL/TLS version (tlsv1, tlsv1_1, tlsv1_2, tlsv1_3).
  • sync_attributes (String) Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName').
  • sync_defaults_options (String) Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'.
  • user_attr (String) LDAP attribute representing the username.
  • user_classes (String) LDAP objectClasses for users (comma-separated).
  • verify (Boolean) Verify LDAP server SSL certificate.

Read-Only

  • id (String) Realm identifier (same as realm)

Notes

Password Security

The bind_password is sent to Proxmox and stored securely, but it's never returned by the API. This means: - Terraform cannot detect if the password was changed outside of Terraform - You must maintain the password in your Terraform configuration or use a variable - The password will be marked as sensitive in Terraform state

LDAP vs LDAPS

  • LDAP (port 389): Unencrypted connection. Not recommended for production.
  • LDAPS (port 636): Encrypted connection using SSL/TLS. Recommended for production.
  • LDAP+StartTLS: Upgrades plain LDAP connection to TLS. Alternative to LDAPS.

User Synchronization

To trigger synchronization, use the proxmox_realm_sync resource.

Common Configuration Scenarios

Anonymous Binding

For testing or public LDAP servers, omit bind_dn and bind_password to use anonymous binding:

resource "proxmox_realm_ldap" "anonymous" {
  realm     = "public-ldap"
  server1   = "ldap.example.com"
  base_dn   = "ou=users,dc=example,dc=com"
  user_attr = "uid"
}

Secure LDAPS with Failover

resource "proxmox_realm_ldap" "secure" {
  realm         = "secure-ldap"
  server1       = "ldap1.example.com"
  server2       = "ldap2.example.com"  # Failover server
  port          = 636
  base_dn       = "ou=users,dc=example,dc=com"
  bind_dn       = "cn=readonly,dc=example,dc=com"
  bind_password = var.ldap_password
  mode          = "ldaps"
  verify        = true
  ca_path       = "/etc/pve/priv/ca.crt"
}

With Group Synchronization

resource "proxmox_realm_ldap" "with_groups" {
  realm                 = "corporate-ldap"
  server1               = "ldap.corp.example.com"
  base_dn               = "ou=users,dc=corp,dc=example,dc=com"
  bind_dn               = "cn=svc_ldap,ou=services,dc=corp,dc=example,dc=com"
  bind_password         = var.ldap_password
  mode                  = "ldap+starttls"

  # Group settings
  group_dn              = "ou=groups,dc=corp,dc=example,dc=com"
  group_filter          = "(objectClass=groupOfNames)"
  group_name_attr       = "cn"

  # Sync configuration
  sync_attributes       = "email=mail,firstname=givenName,lastname=sn"
  sync_defaults_options = "scope=both,enable-new=1"
}

See Also