# 차트 2.16.0 의 appVersion 은 3.17.0 이다. # # 기존엔 dataup experiment/apisix/apisix-plugin 레포에서 apache/apisix:3.17.0-debian # 기반으로 keycloak-authz 커스텀 플러그인만 얹어 빌드했다. 이 베이스(Debian) 자체가 # CVE 게이트 차단 26건(2026-08-11 실측) — 이미 최신 apache/apisix 태그라 태그 교체로도 # 안 없어지는 Debian 베이스 OS 패키지 CVE라, images/apisix 자체 빌드(SUSE BCI 위에 # APISIX-Runtime 전체를 소스에서 재현 + keycloak-authz 오버레이)로 교체했다. # 게이트 PASS(실효 CRITICAL/HIGH 0/0, 2026-08-12 실측). 근거: images/apisix/README.md. # # 차트 업그레이드 시 이 태그도 새 appVersion 에 맞춰 images/apisix 를 다시 빌드해 갱신할 것 — # dataup 레포 쪽은 더 이상 이 카탈로그가 참조하지 않는다(그 레포 자체는 그대로 둠). image: repository: docker.io/paasup/apisix tag: "3.17.0-security-hardened-20260813" pullPolicy: IfNotPresent replicaCount: 1 resources: limits: cpu: "1000m" memory: "1Gi" requests: cpu: "250m" memory: "512Mi" apisix: enableIPv6: false # 기본값: true # apisix.plugins 명시 시 기본 플러그인 목록을 완전히 대체한다. 전체 목록 유지 필수. plugins: - ai - ai-aliyun-content-moderation - ai-aws-content-moderation - ai-prompt-decorator - ai-prompt-guard - ai-prompt-template - ai-proxy - ai-proxy-multi - ai-rag - ai-rate-limiting - ai-request-rewrite - api-breaker - attach-consumer-label - authz-casbin - authz-casdoor - authz-keycloak - aws-lambda - azure-functions - basic-auth - body-transformer - cas-auth - chaitin-waf - clickhouse-logger - client-control - consumer-restriction - cors - csrf - datadog - degraphql - echo - elasticsearch-logger - example-plugin - ext-plugin-post-req - ext-plugin-post-resp - ext-plugin-pre-req - fault-injection - file-logger - forward-auth - google-cloud-logging - grpc-transcode - grpc-web - gzip - hmac-auth - http-dubbo - http-logger - inspect - ip-restriction - jwe-decrypt - jwt-auth - kafka-logger - kafka-proxy - key-auth - lago - ldap-auth - limit-conn - limit-count - limit-req - loggly - loki-logger - mcp-bridge - mocking - multi-auth - opa - openfunction - openid-connect - openwhisk - prometheus - proxy-cache - proxy-control - proxy-mirror - proxy-rewrite - public-api - real-ip - redirect - referer-restriction - request-id - request-validation - response-rewrite - rocketmq-logger - serverless-post-function - serverless-pre-function - skywalking-logger - sls-logger - splunk-hec-logging - syslog - tcp-logger - tencent-cloud-cls - traffic-split - ua-restriction - udp-logger - uri-blocker - wolf-rbac - workflow - zipkin - keycloak-authz # 커스텀 플러그인 — Kong 포팅 # Kong keycloak-authz 포팅: X-Access-Token JWT → preferred_username → 외부 API 권한 확인 customPlugins: enabled: true luaPath: "/opts/custom_plugins/?.lua" plugins: - name: keycloak-authz attrs: {} configMap: name: keycloak-authz-plugin mounts: - key: keycloak-authz.lua path: /opts/custom_plugins/apisix/plugins/keycloak-authz.lua ssl: enabled: true # 기본값: false containerPort: 9443 admin: # SECURITY: 기본 어드민 키 반드시 교체. 운영 배포 전 Secret 또는 Vault로 주입할 것. # 키 생성: openssl rand -hex 16 credentials: admin: "edd1c9f034335f136f87ad84b625c8f1" # 기본값 — 운영 전 변경 필수 service: type: LoadBalancer # 기본값: NodePort — MetalLB에서 IP 자동 할당 http: enabled: true servicePort: 80 containerPort: 9080 tls: servicePort: 443 stream: enabled: true # 기본값: false — proxy_mode: http&stream 활성화 트리거 tcp: [] udp: [] # 내장 etcd(bitnami 서브차트)는 기본 비활성. bitnamilegacy/etcd:latest 가 CVE 게이트를 # 차단(실효 CRITICAL/HIGH 65건, 2026-08-11 실측)하는데 업스트림이 latest 태그만 제공해 # 태그 교체로 해소가 안 된다(bitnami/containers#83267). 카탈로그의 하드닝된 별도 etcd # 차트(manifests/helm/etcd/1.1.12)를 externalEtcd 로 쓴다 — 개발/테스트에서 내장 etcd가 # 필요하면 enabled: true 로 되돌리되 그 CVE 노출은 그대로 남는다. etcd: enabled: false # 기본 배포 대상: manifests/helm/etcd/1.1.12 를 릴리스명 "etcd", 네임스페이스 # "etcd-system" 으로 배포했을 때의 서비스(포트 2379, 평문). 다른 네임스페이스/릴리스명으로 # 배포했거나 dip-values.yaml 로 TLS(autoTls)를 켰다면 host/tls 설정을 맞게 바꾼다. externalEtcd: host: - http://etcd.etcd-system.svc.cluster.local:2379 user: "" password: "" ingress-controller: enabled: true ingressClass: apisix # Kong의 'kong' class와 분리 # apisix-ingress-controller 서브차트 기본값(2.1.0, apache/apisix-ingress-controller)이 # 이미 최신 태그인데도 CVE 게이트 차단 25건(정적 링크된 Go 모듈 21건 — 태그 교체로도 # 해소 안 됨) — images/apisix-ingress-controller 자체 빌드(취약 모듈만 강제 업그레이드) # 로 교체해 게이트 PASS(실효 CRITICAL/HIGH 0건, 2026-08-11 실측). 근거: images/ # apisix-ingress-controller/README.md. # # adc 사이드카 — 0.27.1 → 0.29.0 태그 교체는 유효한 부분 조치였지만 완전 해소는 # 아니었다(2026-08-12 게이트 재검증에서 정정 — 벤더 등급만 보면 0/0 이지만 # max(벤더,NVD) 로는 glibc regex/collating 스택오버플로 4건이 실효 CRITICAL/HIGH 로 # 차단. Debian 이 "affected, 수정 없음"으로 영구 고정해둔 벤더 하향 등급 사례 — # cnpg-postgresql 때와 같은 패턴). images/adc 자체 빌드(distroless 대신 SUSE BCI + # nodejs24, 빌더 스테이지는 업스트림 그대로)로 교체해 게이트 PASS(실효 CRITICAL/HIGH # 0/0, 2026-08-12 실측). 근거: images/adc/README.md. deployment: image: repository: paasup/apisix-ingress-controller tag: "2.1.0-security-hardened-20260811" adcContainer: image: repository: docker.io/paasup/adc tag: "0.29.0-security-hardened-20260813" gatewayProxy: createDefault: true # 기본값: false — v2.0.1+에서 미설정 시 라우트 등록 안 됨 publishService: apisix/apisix-gateway # Ingress STATUS에 External IP 반영 provider: type: ControlPlane controlPlane: endpoints: - http://apisix-admin.apisix.svc.cluster.local:9180 auth: type: AdminKey adminKey: # SECURITY: admin.credentials.admin과 동일 키 — 운영 전 변경 필수 # 키 생성: openssl rand -hex 16 value: "edd1c9f034335f136f87ad84b625c8f1"