Files
ansible-role-dex/playbooks/deploy-eom.yml
T
ericandClaude Opus 5.5 fa17989fed Dex: send LDAP groups, accept membership accounts, gate Mastodon
- Match groups by DN so the groups claim is populated
- Use cn for names; membership-created accounts have no givenName
- Add a mastodon connector that only admits Mastodon Users, and pin
  every client to its connector via allowedConnectors
- Register Nextcloud's user_oidc callback without index.php

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 17:54:59 -05:00

127 lines
5.2 KiB
YAML
Executable File

---
# Run on the controller with its existing kubeconfig; no SSH target is required.
# Supply credentials via inventory/group_vars or a Vault-encrypted vars file.
- name: Deploy eom.dev Dex with Catppuccin branding
hosts: alpha-control-plane
vars_files:
~/Desktop/secrets.yaml
become: true
vars:
dex_namespace: dex
dex_release_name: dex
dex_chart_version: "0.26.0"
dex_issuer: https://dex.eom.dev/
dex_hostname: dex.eom.dev
dex_ingress_class: nginx
dex_cluster_issuer: ca-issuer
dex_tls_secret_name: dex
dex_theme_enabled: true
dex_brand_name: eom.dev
dex_theme_configmap_name: dex-catppuccin
# Preserve the existing DB release and data; do not upgrade it by default.
dex_postgres_manage: false
dex_postgres_release_name: postgresql
dex_postgres_host: postgresql
dex_postgres_port: 5432
dex_postgres_database: dex
dex_postgres_user: dex
dex_postgres_storage_size: 256Gi
dex_postgres_ssl_mode: disable
dex_postgres_password: "{{ dex_admin_password }}"
dex_postgres_admin_password: "{{ postgresql_admin_password | default('') }}"
# Keep the existing connector ID and UID subject mapping. The filter also
# admits website inetOrgPerson accounts so there is one Dex login option.
dex_ldap_host: openldap.openldap.svc.cluster.local
dex_ldap_insecure_no_ssl: true
dex_ldap_start_tls: false
dex_ldap_bind_dn: cn=readonly,dc=eom,dc=dev
dex_ldap_bind_password: "{{ openldap_readonly_password }}"
dex_ldap_connector_id: ldap
dex_ldap_connector_name: eom.dev account
dex_ldap_user_base_dn: dc=eom,dc=dev
dex_ldap_user_filter: "(|(&(objectClass=posixAccount)(memberOf=cn=Dex Users,ou=Dex,ou=Services,dc=eom,dc=dev))(objectClass=inetOrgPerson))"
dex_ldap_id_attribute: uid
dex_ldap_name_attribute: cn
dex_ldap_group_base_dn: dc=eom,dc=dev
dex_ldap_group_user_attribute: DN
dex_ldap_group_filter: "(objectClass=groupOfUniqueNames)"
# All clients are declared once below; don't also emit the convenience client.
dex_matrix_client_enabled: false
# Credentials are separate Vault/inventory variables, shared only with the
# corresponding application. No secret is generated or rotated by this play.
dex_static_clients:
- id: "{{ matrix_dex_oidc_client_id }}"
name: Matrix Auth Service
secret: "{{ matrix_dex_oidc_client_secret }}"
allowedConnectors: [ldap]
redirectURIs:
- https://mas.eom.dev/upstream/callback/01K96AQEZKKABW34PY3R6BVNJ4
- id: www-membership
name: eom.dev Membership
secret: "{{ www_dex_client_secret }}"
allowedConnectors: [ldap]
redirectURIs:
- https://www.eom.dev/members/oidc/callback/
- id: gitea
name: Gitea
secret: "{{ gitea_dex_client_secret }}"
# Authentication source in Gitea must be named exactly "Dex".
allowedConnectors: [ldap]
redirectURIs:
- https://gitea.eom.dev/user/oauth2/Dex/callback
- id: discourse
name: Discourse
secret: "{{ discourse_dex_client_secret }}"
# discourse-openid-connect strategy name is oidc.
allowedConnectors: [ldap]
redirectURIs:
- https://discourse.eom.dev/auth/oidc/callback
- id: peertube
name: PeerTube
secret: "{{ peertube_dex_client_secret }}"
# Requires peertube-plugin-auth-openid-connect.
allowedConnectors: [ldap]
redirectURIs:
- https://peertube.eom.dev/plugins/oidc-cnr/router/code-cb
- id: mastodon
name: Mastodon
secret: "{{ mastodon_dex_client_secret }}"
# Tier gate: only the connector that admits Mastodon Users.
allowedConnectors: [mastodon]
# Matches OIDC_REDIRECT_URI in the existing Mastodon deployment.
redirectURIs:
- https://mastodon.eom.dev/auth/auth/openid_connect/callback
- id: nextcloud
name: Nextcloud
secret: "{{ nextcloud_dex_client_secret }}"
# This chooses the user_oidc app, not oidc_login or the OIDC provider app.
# Override from its admin screen if your installation rewrites index.php.
allowedConnectors: [ldap]
redirectURIs:
- https://nextcloud.eom.dev/apps/user_oidc/code
- https://nextcloud.eom.dev/index.php/apps/user_oidc/code
# Per-service gate for clients that cannot check group claims themselves.
# Same idAttr as the main connector; subjects differ per connector ID.
dex_additional_connectors:
- type: ldap
id: mastodon
name: eom.dev account
config:
host: openldap.openldap.svc.cluster.local
insecureNoSSL: true
bindDN: cn=readonly,dc=eom,dc=dev
bindPW: "{{ openldap_readonly_password }}"
userSearch:
baseDN: dc=eom,dc=dev
filter: "(&(objectClass=inetOrgPerson)(memberOf=cn=Mastodon Users,ou=Mastodon,ou=Services,dc=eom,dc=dev))"
username: uid
idAttr: uid
emailAttr: mail
nameAttr: cn
preferredUsernameAttr: uid
roles:
- roles/ericomeehan.dex