Kubernetes中部署Dependency-Track 并对接 EAuth OIDC 认证

Dependency-Track 简介

Dependency-Track 是 OWASP 的持续 SBOM 分析平台,它不是一次性扫描工具,而是"软件供应链风险持续治理平台",核心能力是:

  1. 接收 CycloneDX SBOM(来自构建流程或供应商)。
  2. 持续分析组件漏洞、许可证和策略风险。
  3. 通过通知与集成,把风险结果推送到研发与安全流程。

OIDC认证能力支持

Dependency-Track支持使用第三方OIDC认证,同时能够通过令牌中的groups信息实现Dependency-Track中不同项目的权限控制,这样能够简化Dependency-Track对用户的管理

Dependency-Track部署

本文通过kube-keeper来部署,首先通过kube-keeper创建两个命名空间,一个为dtrack用于部署dependency-track,另一个为postgres用于部署数据库postgres

  1. eauth中应用创建dependency-track应用,其中的回调地址为dtrack.efucloud.com//static/oid...
  2. 如果使用集群外的数据库则不需要创建命名空间postgres和部署postgres服务
yaml 复制代码
---
# Source: dependency-track/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dtrack-dependency-track
  namespace: dtrack
  labels:
    app.kubernetes.io/part-of: dependency-track
  annotations: {}
automountServiceAccountToken: false
---
# Source: custom/database-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: dtrack-database-secret
  namespace: dtrack
  labels:
    app.kubernetes.io/part-of: dependency-track
    app.kubernetes.io/instance: dtrack
    app.kubernetes.io/component: api-server
type: Opaque
stringData:
  ALPINE_DATABASE_USERNAME: postgres
  ALPINE_DATABASE_PASSWORD: EfuCloud@pwd
---
# Source: dependency-track/templates/api-server/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: dtrack-dependency-track-api-server
  namespace: dtrack
  labels:
    app.kubernetes.io/part-of: dependency-track
    app.kubernetes.io/instance: dtrack
    app.kubernetes.io/name: dependency-track-api-server
    app.kubernetes.io/component: api-server
    app.kubernetes.io/version: 4.14.0
spec:
  type: "ClusterIP"
  ports:
    - name: web
      port: 8080
      targetPort: web
  selector:
    app.kubernetes.io/instance: dtrack
    app.kubernetes.io/name: dependency-track-api-server
    app.kubernetes.io/component: api-server
---
# Source: dependency-track/templates/frontend/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: dtrack-dependency-track-frontend
  namespace: dtrack
  labels:
    app.kubernetes.io/part-of: dependency-track

    app.kubernetes.io/instance: dtrack
    app.kubernetes.io/name: dependency-track-frontend
    app.kubernetes.io/component: frontend
    app.kubernetes.io/version: 4.14.0
spec:
  type: "ClusterIP"
  ports:
    - name: web
      port: 8080
      targetPort: web
  selector:
    app.kubernetes.io/instance: dtrack
    app.kubernetes.io/name: dependency-track-frontend
    app.kubernetes.io/component: frontend
---
# Source: dependency-track/templates/api-server/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dtrack-dependency-track-api-server
  namespace: dtrack
  labels:
    app.kubernetes.io/part-of: dependency-track

    app.kubernetes.io/instance: dtrack
    app.kubernetes.io/name: dependency-track-api-server
    app.kubernetes.io/component: api-server
    app.kubernetes.io/version: 4.14.0
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/instance: dtrack
      app.kubernetes.io/name: dependency-track-api-server
      app.kubernetes.io/component: api-server
  template:
    metadata:
      labels:
        app.kubernetes.io/instance: dtrack
        app.kubernetes.io/name: dependency-track-api-server
        app.kubernetes.io/component: api-server
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/path: /metrics
    spec:
      enableServiceLinks: true
      initContainers:
      serviceAccountName: dtrack-dependency-track
      securityContext:
        fsGroup: 1000
      containers:
        - name: dependency-track-api-server
          image: registry.cn-shenzhen.aliyuncs.com/efucloud-public/dependencytrack-apiserver:4.14.0
          imagePullPolicy: IfNotPresent
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
                - ALL
            readOnlyRootFilesystem: true
            runAsNonRoot: true
            seccompProfile:
              type: RuntimeDefault
          resources:
            limits:
              memory: 5Gi
            requests:
              cpu: "1"
              memory: 1Gi
          env:
            - name: ALPINE_METRICS_ENABLED
              value: "true"
            - name: ALPINE_DATABASE_MODE
              value: "external"
            - name: ALPINE_DATABASE_URL
              value: "jdbc:postgresql://postgres.postgres.svc.cluster.local:5432/dependencytrack"
            - name: ALPINE_DATABASE_DRIVER
              value: "org.postgresql.Driver"
            - name: ALPINE_DATABASE_USERNAME
              valueFrom:
                secretKeyRef:
                  name: dtrack-database-secret
                  key: ALPINE_DATABASE_USERNAME
            - name: ALPINE_DATABASE_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: dtrack-database-secret
                  key: ALPINE_DATABASE_PASSWORD
            # OIDC configuration placeholders (fill values as needed)
            - name: ALPINE_OIDC_ENABLED
              value: "true"
            - name: ALPINE_OIDC_CLIENT_ID
              value: "rot7giyv32yy5kkfpmemvlu56"
            - name: ALPINE_OIDC_ISSUER
              value: "https://eauth-demo.efucloud.com"
            - name: ALPINE_OIDC_USERNAME_CLAIM
              value: "username"
            - name: ALPINE_OIDC_USER_PROVISIONING
              value: "true"
            - name: ALPINE_OIDC_TEAM_SYNCHRONIZATION
              value: "false"
            - name: ALPINE_OIDC_TEAMS_CLAIM
              value: "groups"
            - name: ALPINE_OIDC_TEAMS_DEFAULT
              value: "Administrators"
          ports:
            - name: web
              containerPort: 8080
              protocol: TCP
          volumeMounts:
            - name: data
              mountPath: /data
            - name: tmp
              mountPath: /tmp
          startupProbe:
            httpGet:
              scheme: HTTP
              port: web
              path: /health/started
            failureThreshold: 30
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 5
          livenessProbe:
            httpGet:
              scheme: HTTP
              port: web
              path: /health/live
            failureThreshold: 3
            initialDelaySeconds: 10
            periodSeconds: 15
            successThreshold: 1
            timeoutSeconds: 5
          readinessProbe:
            httpGet:
              scheme: HTTP
              port: web
              path: /health/ready
            failureThreshold: 3
            initialDelaySeconds: 10
            periodSeconds: 15
            successThreshold: 1
            timeoutSeconds: 5
      volumes:
        - name: data
          emptyDir: {}
        - name: tmp
          emptyDir: {}
---
# Source: dependency-track/templates/frontend/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dtrack-dependency-track-frontend
  namespace: dtrack
  labels:
    app.kubernetes.io/part-of: dependency-track
    app.kubernetes.io/instance: dtrack
    app.kubernetes.io/name: dependency-track-frontend
    app.kubernetes.io/component: frontend
    app.kubernetes.io/version: 4.14.0
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/instance: dtrack
      app.kubernetes.io/name: dependency-track-frontend
      app.kubernetes.io/component: frontend
  template:
    metadata:
      labels:
        app.kubernetes.io/instance: dtrack
        app.kubernetes.io/name: dependency-track-frontend
        app.kubernetes.io/component: frontend
    spec:
      enableServiceLinks: true
      initContainers:
      serviceAccountName: dtrack-dependency-track
      securityContext:
        fsGroup: 1000
      containers:
        - name: dependency-track-frontend
          image: registry.cn-shenzhen.aliyuncs.com/efucloud-public/dependencytrack-frontend:4.14.0
          imagePullPolicy: IfNotPresent
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
                - ALL
            readOnlyRootFilesystem: false
            runAsNonRoot: true
            seccompProfile:
              type: RuntimeDefault
          resources:
            limits:
              memory: 128Mi
            requests:
              cpu: 150m
              memory: 64Mi
          env:
            - name: API_BASE_URL
              value: ""
            # OIDC configuration placeholders (fill values as needed)
            - name: OIDC_ISSUER
              value: "https://eauth-demo.efucloud.com"
            - name: OIDC_CLIENT_ID
              value: "rot7giyv32yy5kkfpmemvlu56"
            - name: OIDC_SCOPE
              value: "openid profile email"
            - name: OIDC_FLOW
              value: ""
            - name: OIDC_LOGIN_BUTTON_TEXT
              value: ""
          ports:
            - name: web
              containerPort: 8080
              protocol: TCP
          volumeMounts:
            - name: tmp
              mountPath: /tmp
          livenessProbe:
            httpGet:
              scheme: HTTP
              port: web
              path: /
            failureThreshold: 3
            initialDelaySeconds: 5
            periodSeconds: 15
            successThreshold: 1
            timeoutSeconds: 5
          readinessProbe:
            httpGet:
              scheme: HTTP
              port: web
              path: /
            failureThreshold: 3
            initialDelaySeconds: 5
            periodSeconds: 15
            successThreshold: 1
            timeoutSeconds: 5
      volumes:
        - name: tmp
          emptyDir: {}
---
# Source: custom/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dtrack-dependency-track
  namespace: dtrack
  labels:
    app.kubernetes.io/part-of: dependency-track
    app.kubernetes.io/instance: dtrack
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - dtrack.efucloud.com
      secretName: dtrack-tls
  rules:
    - host: dtrack.efucloud.com
      http:
        paths:
          - path: /api
            pathType: Prefix
            backend:
              service:
                name: dtrack-dependency-track-api-server
                port:
                  number: 8080
          - path: /
            pathType: Prefix
            backend:
              service:
                name: dtrack-dependency-track-frontend
                port:
                  number: 8080

Dependency-Track访问

  1. 浏览器打开dtrack.efucloud.com/ ,点击更多的选择,先使用admin/admin登录,若直接使用OIDC登录则会出现下图的情形。

配置完成后,使用oidc登录后的页面如下

相关推荐
Likeadust9 小时前
私有化视频会议系统/智能会议管理系统EasyDSS集群通话助力各行业安全高效远程协作
安全
审判长烧鸡11 小时前
【Go工具】go-playground是什么组织?官方的?
开发语言·安全·go
JiaWen技术圈11 小时前
网站用户注册行为验证码方案
运维·安全
百度智能云技术站12 小时前
百度 Agent 安全中心:构筑企业智能体的安全底座
人工智能·安全·dubbo
视觉&物联智能12 小时前
【杂谈】-企业人工智能超越实验:安全拓展的实践路径
人工智能·安全·aigc·agent·agi
KnowSafe13 小时前
2026年SSL证书市场便宜且安全的SSL证书调研
网络协议·安全·ssl
@insist12313 小时前
信息安全工程师-云计算安全核心知识框架
安全·云计算·软考·信息安全工程师·软件水平考试
GMH7896615 小时前
1600W防水型对流电散热器,实用又安全吗?
安全·冀明昊暖气片·暖气片厂家·河北暖气片厂家·对流电散热器
志栋智能15 小时前
超自动化巡检:为智能运维(AIOps)铺平道路
运维·安全·自动化
幽络源小助理15 小时前
全新UI 阅后即焚V2正式版系统源码_全开源_安全加密传输
安全·ui·开源·php源码