ci(S15P11A705-154): runtime Secret 봉인 계약을 정렬한다 - #39
Conversation
colosair
left a comment
There was a problem hiding this comment.
승인합니다. ai#34가 세운 안전장치가 전부 보존됐고 몇 가지는 더 강해졌습니다. action 내부(84458bf)를 직접 읽고 확인했습니다.
ai#34에서 우리가 세운 것 |
action |
|---|---|
kubeseal --raw로 평문 YAML 미생성 |
:256 --raw --scope strict --namespace --name --cert |
| 인증서 SHA-256 지문 대조 | :383~385 openssl 대조, 불일치 시 예외 |
| 산출물 평문 미포함 검사 | :237 plaintext material is forbidden |
| scope strict | :157 secretType != Opaque or scope != strict 거부 |
여기에 manifest 구조 정확 일치 검증(:242~246)과 cert-fingerprint provenance annotation(:198)이 더해졌습니다. kubeseal 설치도 릴리스 체크섬 파일이 아니라 해시를 직접 고정하는 방식이라 저희 것보다 낫습니다.
저희 workflow 223줄을 30줄로 줄이면서 잃은 것이 없습니다. 같은 판단을 공용 자산으로 옮긴 것이라 이견 없습니다.
키 집합 — (B)안 채택 확인
GMS_API_KEY·GMS_BASE_URL·INTERNAL_SHARED_SECRET 셋으로 좁히고 PINLOG_INFRA_SECRET_PR_TOKEN을 더한 구성으로 이해했습니다. PINLOG_EMBEDDING_* 넷을 뺀 것이 맞습니다 — ai#36(463cad5)로 app/core/config.py에 기본값이 들어가 이미지에 포함되므로 주입할 것이 없습니다.
어제 저희가 인프라 계약을 먼저 깨고 나중에 알린 순서가 됐는데, 그쪽으로 맞춰 주셔서 감사합니다.
하나만 — implements 기록 75줄 삭제
docs/implements/2026-07-29-sealed-secret-handoff.md에서 설계 근거가 지워졌습니다.
"봉인 대상 7종" 표와 EMBEDDING 넷의 성격 분류
kubeseal --raw 를 택한 이유 (kubectl --dry-run 경로의 중간 평문 YAML)
heredoc 을 쓸 수 없었던 이유
봉인 시점에 앱 기동 검사를 미리 도는 근거
현행화가 필요하다는 판단은 맞습니다 — 그 workflow는 이제 없습니다. 다만 docs/implements/는 보존 구역이고, 이 판단들이 그대로 action에 들어가 있어 지우면 왜 그렇게 만들었는지가 사라집니다. 특히 --raw 선택 근거는 action의 :256을 설명하는 유일한 기록입니다.
이 PR을 막지 않겠습니다. 배포가 걸려 있고 기능과 무관한 지점입니다. 저희가 후속 PR로 상태 노트 형태로 복원하겠습니다 — 원문을 되살리되 머리말에 *"이 구현은 S15P11A705-154에서 Infra 공용 action으로 대체됐다. 아래 판단은 그 action에 반영돼 있다"*를 붙이는 방식입니다. 그쪽에서 처리하실 생각이면 알려 주십시오.
확인 부탁드릴 것
PINLOG_INFRA_SECRET_PR_TOKEN의 권한 범위를 알려 주시면 등록하겠습니다. contents:write + pull_requests:write(fine-grained, Team-PinLog/infra 한정)면 충분한지, 만료를 어떻게 두실지입니다. 어제 여쭀던 그 토큰이 이 자리에 들어가는 것으로 이해했습니다.
pinlog-secrets-dev Environment의 보호 규칙(승인자·브랜치 제한)도 설정해 두신 것이 있으면 알려 주십시오 — 저희 쪽에서 workflow_dispatch를 누를 때 무엇이 요구되는지 알아야 합니다.
|
상세 검토와 승인 감사합니다. 두 가지로 답변드립니다. 1.
|
|
등록을 마치면서 관측한 사실을 남깁니다. 처분은 인프라 판단에 맡깁니다. AI 쪽 완료 사항
이 PR 의 계약과 infra 검증기가 어긋나는 지점이 PR 의 workflow 와 contract test 는 Environment Secret 이름 4개(위 3개 + PR 토큰)를 고정하고, 실제 봉인 대상은 3개입니다.
EMBEDDING 넷은 #36 과 P45 에서 Flyway 파일 집합
질문위 두 문서와 검증기가 3키 기준으로 갱신될 예정인지만 알려주시면 됩니다. 등록을 마친 뒤에도 workload gate 가 열리지 않는 이유를 모르는 상태를 피하려는 것입니다. |
요약
.github/workflows/seal-runtime-secrets.yml하나로 정렬합니다.pinlog-secrets-devEnvironment와 immutable Infra PR action 사이의 최소 계약만 유지합니다.repository_dispatch경로와 AI 레포의 runtime placeholder 계약 복제를 제거합니다.Jira (필수)
변경 사항
seal-ai-secrets.yml을 canonicalseal-runtime-secrets.yml로 교체contents: read,id-token: write,pinlog-secrets-dev및 exact 4-key Environment 전달 계약 적용84458bf35e341b79e91ce21a3667e9d3f7454068에 고정하고policy=ai-dev,revision=github.sha만 전달테스트 / 검증
RED
.venv/bin/python -m pytest -q tests/test_runtime_secret_contract.pyGREEN
.venv/bin/python -m pytest -q tests/test_runtime_secret_contract.pyRegression
.venv/bin/ruff check .— passed.venv/bin/python -m compileall -q app tools— passed.venv/bin/python -m pytest -q tests/test_ci_image_publish_contract.py tests/test_runtime_secret_contract.py— 11 passedai-ci / check에서 검증리뷰 포인트
revision=${{ github.sha }}가 source provenance 경계를 충족하는지리스크
ai-devpolicy에 의존합니다. 원본 action의 inputs가policy,revision임을 GitHub API로 확인했습니다.범위 밖 / 후속
영구 문서
docs/implements/2026-07-29-sealed-secret-handoff.mddocs/proposals/P45-public-config-in-code.mddocs/WORKLOG.md관련 GitHub Issue (선택)