Files
service-catalog/manifests/helm/apisix/2.16.0/custom-values.yaml
T
wbsong111 7746570ec0 자체 빌드 이미지 프레임워크를 security-images 레포로 이관하고 카탈로그 쪽을 정리한다
images/·scripts/build/build-hardened-image.sh·suggest-go-upgrades.py·
build-image.yml·.claude/image-authoring.md·이미지 ADR(0001·0002·0004)을 삭제했다 —
전부 별도 public 레포 security-images 로 이미 이관됐다.

카탈로그 쪽에는 "무엇을 배포 중인가"를 아는 부분만 남긴다:
- catalog/image-map/<image>.env — 옛 catalog.env 의 카탈로그 레이아웃 정보만 뗀 것
- scripts/build/check-rebuild-needed.py — 드리프트 탐지(A 파트)만 남기고 핀 판단
  (B 파트: pin_changes/apply_changes/parse_module_specs)은 제거
- scripts/build/apply-published-tags.py(신규) — security-images 의 published.json
  을 읽어 카탈로그 values 를 패치
- .github/workflows/{self-build-drift-check,catalog-tag-update}.yml(신규) — 각각
  드리프트 스캔+트리거, 발행 태그 반영

effective_severity 를 cve-gate.py 로 옮겼다 — check-rebuild-needed.py 가 핀 도구를
거치지 않고 게이트를 직접 로드하게 하기 위한 선행 작업이다.

두 레포의 계약은 published.json 스키마 하나뿐이다 — security-images 는 이 카탈로그를
모른다(단방향 의존). 이관 배경·결합점 전체는
doc/migrations/self-build-images-to-security-images.md.

부수 수정: 자체 빌드 이미지를 참조하는 차트 values/README 의 죽은 링크(images/**,
doc/decisions/000{1,2,4}, .claude/image-authoring.md)를 security-images 레포를
가리키는 서술로 교체. deploy-test 스크립트·CUSTOM-README 의 개인 Docker Hub 계정
(docker.io/wbsong111) 을 docker.io/paasup 로 교체.

pitfalls.md 의 "스캐너 결과를 그대로 믿지 말 것" 절은 sbom-cve-gate skill 이 차트
축 설명에 실제로 참조하고 있어 남겼다 — "이미지 태그의 베이스 OS" 절만 제거했다
(다른 참조 없음, security-images 문서로 이관 완료).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-24 15:21:29 +09:00

219 lines
7.1 KiB
YAML

# 차트 2.16.0 의 appVersion 은 3.17.0 이다.
#
# 기존엔 dataup experiment/apisix/apisix-plugin 레포에서 apache/apisix:3.17.0-debian
# 기반으로 keycloak-authz 커스텀 플러그인만 얹어 빌드했다. 이 베이스(Debian) 자체가
# CVE 게이트를 다수 차단 — 이미 최신 apache/apisix 태그라 태그 교체로도 안 없어지는
# Debian 베이스 OS 패키지 CVE라, 자체 빌드(SUSE BCI 위에 APISIX-Runtime 전체를 소스에서
# 재현 + keycloak-authz 오버레이)로 교체했다. 빌드 정의·근거는 별도 레포 security-images
# 의 images/apisix/(README.md 포함) — 이 레포에는 없다.
#
# 차트 업그레이드 시 이 태그도 새 appVersion 에 맞춰 security-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 게이트를 다수 차단(정적 링크된 Go 모듈 다수 — 태그 교체로도
# 해소 안 됨) — 자체 빌드(취약 모듈만 강제 업그레이드)로 교체해 게이트 PASS. 빌드
# 정의·근거는 별도 레포 security-images 의 images/apisix-ingress-controller/(이 레포에는 없다).
#
# adc 사이드카 — 태그 교체는 유효한 부분 조치였지만 완전 해소는 아니었다(벤더 등급만
# 보면 통과지만 max(벤더,NVD) 로는 여전히 차단 — Debian 이 "affected, 수정 없음"으로
# 영구 고정해둔 벤더 하향 등급 사례, cnpg-postgresql 때와 같은 패턴). 자체 빌드
# (distroless 대신 SUSE BCI + nodejs24, 빌더 스테이지는 업스트림 그대로)로 교체해
# 게이트 PASS. 빌드 정의·근거는 별도 레포 security-images 의 images/adc/(이 레포에는 없다).
deployment:
image:
repository: docker.io/paasup/apisix-ingress-controller
tag: "2.1.0-security-hardened-20260820"
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"