Authentik

Iš Žinynas.
Jump to navigation Jump to search

Authentik[keisti]

Authentik yra atvirojo kodo tapatybės ir prieigos valdymo (IAM) sprendimas, skirtas centralizuotai valdyti vartotojų autentifikavimą ir autorizavimą įvairiose sistemose bei aplikacijose. Jis yra galingas ir lankstus įrankis, sukurtas taip, kad patenkintų šiuolaikinių organizacijų poreikius, ypač dėmesį skiriant saugumui ir integracijai su įvairiais IT ekosistemos komponentais.

Pagrindinės savybės[keisti]

  • Vartotojų autentifikavimas:
    • Palaiko kelis autentifikavimo metodus, įskaitant OAuth2, SAML, OIDC (OpenID Connect), LDAP ir Duo MFA.
    • Galimybė naudoti daugiafaktorinį autentifikavimą (MFA) didesniam saugumui.
  • Autorizacijos valdymas:
    • Lankstus vartotojų grupių ir rolės pagrįstas prieigos valdymas.
    • Kiekvienai aplikacijai gali būti pritaikomos specifinės taisyklės ir politiniai nustatymai.
  • Centralizuota tapatybės valdymo platforma:
    • Integruojasi su trečiųjų šalių sistemomis, tokiomis kaip Active Directory (AD), Google Workspace, Azure AD, ir kitomis.
    • Užtikrina centralizuotą vartotojų valdymą ir loginimąsi į kelias sistemas per vieną sąsają (Single Sign-On, SSO).
  • Administratoriaus įrankiai:
    • Išsamūs stebėjimo ir analizės įrankiai.
    • Vartotojui draugiška žiniatinklio sąsaja, leidžianti lengvai valdyti paslaugas, vartotojus ir politikos taisykles.
  • Atvirojo kodo pranašumas:
    • Galimybė pritaikyti sprendimą pagal specifinius poreikius.
    • Aktyvi bendruomenė, kuri prisideda prie projekto tobulinimo.
  • Modulinė architektūra:
    • Leidžia naudoti tik reikalingus komponentus, taip sumažinant sistemos sudėtingumą.

Kam skirtas?[keisti]

Authentik yra tinkamas:

  • Organizacijoms, kurios nori turėti vieningą tapatybės valdymo sprendimą.
  • IT administratoriams, siekiantiems centralizuoti prieigos valdymą ir autentifikavimą.
  • Debesų infrastruktūros ir mikroservisų aplinkoms, kur reikalingas lankstus ir integruotas IAM sprendimas.

Authentik yra puiki alternatyva komerciniams IAM sprendimams, nes suteikia aukštą saugumo lygį ir galimybę pilnai kontroliuoti savo infrastruktūrą be didelių licencijavimo išlaidų.


Docker[keisti]

Setupas naudoajamas apsaugoti lokalaus tinklo kritinius taškus pakavotus po Traefik reverse proxy. Taip pat naudojamas standartinis .env failas.

services:
  postgresql:
    image: docker.io/library/postgres:16-alpine
    restart: unless-stopped
    labels:
      - traefik.enable=false
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
      start_period: 20s
      interval: 30s
      retries: 5
      timeout: 5s
    mem_limit: 1G
    cpus: 2.0
    networks:
      - internal
    volumes:
      - /srv/dockers/authentik/db:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: "post"
      POSTGRES_USER: ${PG_USER:-authentik}
      POSTGRES_DB: ${PG_DB:-authentik}
  redis:
    image: docker.io/library/redis:alpine
    command: --save 60 1 --loglevel warning
    restart: unless-stopped
    labels:
      - traefik.enable=false
    healthcheck:
      test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
      start_period: 20s
      interval: 30s
      retries: 5
      timeout: 3s
    volumes:
      - /srv/dockers/authentik/redis:/data
    mem_limit: 1G
    cpus: 2.0
    networks:
      - internal
  server:
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.10.4}
    restart: unless-stopped
    command: server
    environment:
      AUTHENTIK_REDIS__HOST: redis
      AUTHENTIK_POSTGRESQL__HOST: postgresql
      AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
      AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
      AUTHENTIK_POSTGRESQL__PASSWORD: "post"
      AUTHENTIK_DISABLE_STARTUP_ANALYTICS: "true"
      AUTHENTIK_DISABLE_UPDATE_CHECK: "false"
      AUTHENTIK_ERROR_REPORTING__ENABLED: "true"
      AUTHENTIK_LOG_LEVEL: "info"
      AUTHENTIK_SECRET_KEY: "secret"
      AUTHENTIK_COOKIE_DOMAIN: ${DOMAINNAME}
    volumes:
      - /srv/dockers/authentik/media:/media
      - /srv/dockers/authentik/custom-templates:/templates
    depends_on:
      - postgresql
      - redis
    mem_limit: 1G
    cpus: 2.0
    networks:
     - traefik
     - internal
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.authentik-rtr.rule=Host(`authentik.${DOMAINNAME}`)"
      ## Individual Application forwardAuth regex (catch any subdomain using individual application forwardAuth)  
      - "traefik.http.routers.authentik-output-rtr.rule=HostRegexp(`{subdomain:[a-z0-9-]+}.${DOMAINNAME}`) && PathPrefix(`/outpost.goauthentik.io/`)"
      ## HTTP Services
      - "traefik.http.routers.authentik-rtr.service=authentik-svc"
      - "traefik.http.services.authentik-svc.loadBalancer.server.port=9000"
  worker:
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.10.4}
    restart: unless-stopped
    command: worker
    environment:
      AUTHENTIK_REDIS__HOST: redis
      AUTHENTIK_POSTGRESQL__HOST: postgresql
      AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
      AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
      AUTHENTIK_POSTGRESQL__PASSWORD: "post"
      AUTHENTIK_DISABLE_STARTUP_ANALYTICS: "true"
      AUTHENTIK_DISABLE_UPDATE_CHECK: "false"
      AUTHENTIK_ERROR_REPORTING__ENABLED: "true"
      AUTHENTIK_SECRET_KEY: "secret"
      AUTHENTIK_COOKIE_DOMAIN: ${DOMAINNAME}
      AUTHENTIK_LOG_LEVEL: "info"
      AUTHENTIK_EMAIL__HOST: "localhost"
      AUTHENTIK_EMAIL__PORT: "25"
      AUTHENTIK_EMAIL__USERNAME: ""
      AUTHENTIK_EMAIL__PASSWORD: ""
      AUTHENTIK_EMAIL__USE_TLS: "false"
      AUTHENTIK_EMAIL__USE_SSL: "false"
      AUTHENTIK_EMAIL__TIMEOUT: "10"
      AUTHENTIK_EMAIL__FROM: "authentik@domenas.lt"
    labels:
      - traefik.enable=false
    mem_limit: 1G
    cpus: 2.0
    user: root
    networks:
      - internal
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /srv/dockers/authentik/media:/media
      - /srv/dockers/authentik/certs:/certs
      - /srv/dockers/authentik/custom-templates:/templates
    depends_on:
      - postgresql
      - redis
  whoami-individual:
    image: traefik/whoami:latest
    container_name: whoami-individual
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    depends_on:
      - server
      - worker
    networks:
      - traefik
    environment:
      - TZ
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.whoami-individual-rtr.rule=Host(`whoami-individual.${DOMAINNAME}`)"
      ## Middlewares
      - "traefik.http.routers.whoami-individual-rtr.middlewares=middlewares-authentik@file"
  whoami-catchall:
    image: traefik/whoami:latest
    container_name: whoami-catchall
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    depends_on:
      - server
      - worker
    networks:
      - traefik
    environment:
      - TZ
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.whoami-catchall-rtr.rule=Host(`whoami-catchall.${DOMAINNAME}`)"
      ## Middlewares
      - "traefik.http.routers.whoami-catchall-rtr.middlewares=middlewares-authentik@file"
networks:
  traefik:
    external: true
  internal:
    internal: true