Kubernetes中部署Dependency-Track 并对接 EAuth OIDC 认证
Dependency-Track 简介
Dependency-Track 是 OWASP 的持续 SBOM 分析平台,它不是一次性扫描工具,而是“软件供应链风险持续治理平台”,核心能力是:
- 接收 CycloneDX SBOM(来自构建流程或供应商)。
- 持续分析组件漏洞、许可证和策略风险。
- 通过通知与集成,把风险结果推送到研发与安全流程。
易认证(EAuth)介绍
易认证(EAuth)是一款开源的企业级的OIDC认证平台,使用golang+react(ant design pro框架)开发的,提供多种认证方式,包括人脸识别、OpenID Connect(OIDC)、Web身份认证等,支持多因素认证(MFA), 灵活的令牌(Token)生成设置,可以实现不同应用间的一账通,能为企业提供精细化的认证管理,帮助企业快速完成认证流程,提高认证效率。
开源地址
https://github.com/efucloud/eauth
OIDC认证能力支持
Dependency-Track支持使用第三方OIDC认证,同时能够通过令牌中的groups信息实现Dependency-Track中不同项目的权限控制,这样能够简化Dependency-Track对用户的管理
Dependency-Track部署
本文通过kube-keeper来部署,首先通过kube-keeper创建两个命名空间,一个为dtrack用于部署dependency-track,另一个为postgres用于部署数据库postgres
- eauth中应用创建dependency-track应用,其中的回调地址为https://dtrack.efucloud.com//static/oidc-callback.html
- 如果使用集群外的数据库则不需要创建命名空间postgres和部署postgres服务
---# Source: dependency-track/templates/serviceaccount.yamlapiVersion:v1kind:ServiceAccountmetadata:name:dtrack-dependency-tracknamespace:dtracklabels:app.kubernetes.io/part-of:dependency-trackannotations:{}automountServiceAccountToken:false---# Source: custom/database-secret.yamlapiVersion:v1kind:Secretmetadata:name:dtrack-database-secretnamespace:dtracklabels:app.kubernetes.io/part-of:dependency-trackapp.kubernetes.io/instance:dtrackapp.kubernetes.io/component:api-servertype:OpaquestringData:ALPINE_DATABASE_USERNAME:postgresALPINE_DATABASE_PASSWORD:EfuCloud@pwd---# Source: dependency-track/templates/api-server/service.yamlapiVersion:v1kind:Servicemetadata:name:dtrack-dependency-track-api-servernamespace:dtracklabels:app.kubernetes.io/part-of:dependency-trackapp.kubernetes.io/instance:dtrackapp.kubernetes.io/name:dependency-track-api-serverapp.kubernetes.io/component:api-serverapp.kubernetes.io/version:4.14.0spec:type:"ClusterIP"ports:-name:webport:8080targetPort:webselector:app.kubernetes.io/instance:dtrackapp.kubernetes.io/name:dependency-track-api-serverapp.kubernetes.io/component:api-server---# Source: dependency-track/templates/frontend/service.yamlapiVersion:v1kind:Servicemetadata:name:dtrack-dependency-track-frontendnamespace:dtracklabels:app.kubernetes.io/part-of:dependency-trackapp.kubernetes.io/instance:dtrackapp.kubernetes.io/name:dependency-track-frontendapp.kubernetes.io/component:frontendapp.kubernetes.io/version:4.14.0spec:type:"ClusterIP"ports:-name:webport:8080targetPort:webselector:app.kubernetes.io/instance:dtrackapp.kubernetes.io/name:dependency-track-frontendapp.kubernetes.io/component:frontend---# Source: dependency-track/templates/api-server/deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:dtrack-dependency-track-api-servernamespace:dtracklabels:app.kubernetes.io/part-of:dependency-trackapp.kubernetes.io/instance:dtrackapp.kubernetes.io/name:dependency-track-api-serverapp.kubernetes.io/component:api-serverapp.kubernetes.io/version:4.14.0spec:replicas:1selector:matchLabels:app.kubernetes.io/instance:dtrackapp.kubernetes.io/name:dependency-track-api-serverapp.kubernetes.io/component:api-servertemplate:metadata:labels:app.kubernetes.io/instance:dtrackapp.kubernetes.io/name:dependency-track-api-serverapp.kubernetes.io/component:api-serverannotations:prometheus.io/scrape:"true"prometheus.io/path:/metricsspec:enableServiceLinks:trueinitContainers:serviceAccountName:dtrack-dependency-tracksecurityContext:fsGroup:1000containers:-name:dependency-track-api-serverimage:registry.cn-shenzhen.aliyuncs.com/efucloud-public/dependencytrack-apiserver:4.14.0imagePullPolicy:IfNotPresentsecurityContext:allowPrivilegeEscalation:falsecapabilities:drop:-ALLreadOnlyRootFilesystem:truerunAsNonRoot:trueseccompProfile:type:RuntimeDefaultresources:limits:memory:5Girequests:cpu:"1"memory:1Gienv:-name:ALPINE_METRICS_ENABLEDvalue:"true"-name:ALPINE_DATABASE_MODEvalue:"external"-name:ALPINE_DATABASE_URLvalue:"jdbc:postgresql://postgres.postgres.svc.cluster.local:5432/dependencytrack"-name:ALPINE_DATABASE_DRIVERvalue:"org.postgresql.Driver"-name:ALPINE_DATABASE_USERNAMEvalueFrom:secretKeyRef:name:dtrack-database-secretkey:ALPINE_DATABASE_USERNAME-name:ALPINE_DATABASE_PASSWORDvalueFrom:secretKeyRef:name:dtrack-database-secretkey:ALPINE_DATABASE_PASSWORD# OIDC configuration placeholders (fill values as needed)-name:ALPINE_OIDC_ENABLEDvalue:"true"-name:ALPINE_OIDC_CLIENT_IDvalue:"rot7giyv32yy5kkfpmemvlu56"-name:ALPINE_OIDC_ISSUERvalue:"https://eauth-demo.efucloud.com"-name:ALPINE_OIDC_USERNAME_CLAIMvalue:"username"-name:ALPINE_OIDC_USER_PROVISIONINGvalue:"true"-name:ALPINE_OIDC_TEAM_SYNCHRONIZATIONvalue:"false"-name:ALPINE_OIDC_TEAMS_CLAIMvalue:"groups"-name:ALPINE_OIDC_TEAMS_DEFAULTvalue:"Administrators"ports:-name:webcontainerPort:8080protocol:TCPvolumeMounts:-name:datamountPath:/data-name:tmpmountPath:/tmpstartupProbe:httpGet:scheme:HTTPport:webpath:/health/startedfailureThreshold:30initialDelaySeconds:10periodSeconds:10successThreshold:1timeoutSeconds:5livenessProbe:httpGet:scheme:HTTPport:webpath:/health/livefailureThreshold:3initialDelaySeconds:10periodSeconds:15successThreshold:1timeoutSeconds:5readinessProbe:httpGet:scheme:HTTPport:webpath:/health/readyfailureThreshold:3initialDelaySeconds:10periodSeconds:15successThreshold:1timeoutSeconds:5volumes:-name:dataemptyDir:{}-name:tmpemptyDir:{}---# Source: dependency-track/templates/frontend/deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:dtrack-dependency-track-frontendnamespace:dtracklabels:app.kubernetes.io/part-of:dependency-trackapp.kubernetes.io/instance:dtrackapp.kubernetes.io/name:dependency-track-frontendapp.kubernetes.io/component:frontendapp.kubernetes.io/version:4.14.0spec:replicas:1selector:matchLabels:app.kubernetes.io/instance:dtrackapp.kubernetes.io/name:dependency-track-frontendapp.kubernetes.io/component:frontendtemplate:metadata:labels:app.kubernetes.io/instance:dtrackapp.kubernetes.io/name:dependency-track-frontendapp.kubernetes.io/component:frontendspec:enableServiceLinks:trueinitContainers:serviceAccountName:dtrack-dependency-tracksecurityContext:fsGroup:1000containers:-name:dependency-track-frontendimage:registry.cn-shenzhen.aliyuncs.com/efucloud-public/dependencytrack-frontend:4.14.0imagePullPolicy:IfNotPresentsecurityContext:allowPrivilegeEscalation:falsecapabilities:drop:-ALLreadOnlyRootFilesystem:falserunAsNonRoot:trueseccompProfile:type:RuntimeDefaultresources:limits:memory:128Mirequests:cpu:150mmemory:64Mienv:-name:API_BASE_URLvalue:""# OIDC configuration placeholders (fill values as needed)-name:OIDC_ISSUERvalue:"https://eauth-demo.efucloud.com"-name:OIDC_CLIENT_IDvalue:"rot7giyv32yy5kkfpmemvlu56"-name:OIDC_SCOPEvalue:"openid profile email"-name:OIDC_FLOWvalue:""-name:OIDC_LOGIN_BUTTON_TEXTvalue:""ports:-name:webcontainerPort:8080protocol:TCPvolumeMounts:-name:tmpmountPath:/tmplivenessProbe:httpGet:scheme:HTTPport:webpath:/failureThreshold:3initialDelaySeconds:5periodSeconds:15successThreshold:1timeoutSeconds:5readinessProbe:httpGet:scheme:HTTPport:webpath:/failureThreshold:3initialDelaySeconds:5periodSeconds:15successThreshold:1timeoutSeconds:5volumes:-name:tmpemptyDir:{}---# Source: custom/ingress.yamlapiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:dtrack-dependency-tracknamespace:dtracklabels:app.kubernetes.io/part-of:dependency-trackapp.kubernetes.io/instance:dtrackspec:ingressClassName:nginxtls:-hosts:-dtrack.efucloud.comsecretName:dtrack-tlsrules:-host:dtrack.efucloud.comhttp:paths:-path:/apipathType:Prefixbackend:service:name:dtrack-dependency-track-api-serverport:number:8080-path:/pathType:Prefixbackend:service:name:dtrack-dependency-track-frontendport:number:8080Dependency-Track访问
- 浏览器打开https://dtrack.efucloud.com/ ,点击更多的选择,先使用
admin/admin登录,若直接使用OIDC登录则会出现下图的情形。
配置完成后,使用oidc登录后的页面如下
配置完成后,使用oidc登录后的页面如下
