Authentik
Jump to navigation
Jump to search
Authentik
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
- 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?
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
Setupas naudoajamas apsaugoti lokalaus tinklo kritinius taškus pakavotus po Traefik reverse proxy.
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