지금 막히는 지점은 “무슨 값이 실제로 앱에 들어오느냐”가 계속 뒤섞여서 그래요.
한 번에 정리해서 더는 base64 에러가 못 나오게 만들자는 플랜입니다. (이미 헬스체크는 OK)
지금부터 이렇게만 하세요 (깨끗이 초기화 → 단일 파일 마운트)
-
코드는 ‘파일만 읽기’로 고정 (이미 했다면 스킵)
-
경로:
/etc/gsa/sa.json(변경 금지)
-
Cloud Run에서 꼬인 설정 전부 제거
-
(선택) 기존 시크릿을 지우지 말고, “정상 JSON”으로 새 버전 추가
삭제는 다른 서비스 의존성 깨질 수 있어요. 그냥 새 버전 추가가 안전.
-
Cloud Run에 ‘딱 1개’ 시크릿 파일 마운트만 연결
-
describe로 volumes/volumeMounts 확인 시/etc/gsa/sa.json만 보여야 합니다.
(다른 경로로 마운트된 시크릿이 있으면 제거 필요)
-
권한 확인 (가장 자주 놓침)
-
시트 ID만 단일 ENV로 설정 (PowerShell이면 반드시 “한 줄씩”)
-
배포 리비전에 트래픽 100% 고정
-
검증 포인트 (필수)
-
ENV에
GOOGLE_SHEETS_SERVICE_ACCOUNT_JSON없어야 함 (파일만 쓰니까). -
volumeMounts에/etc/gsa/sa.json하나만 있어야 함.
이렇게 하면:
-
base64/평문/쉼표/타입 충돌 → 원천 차단
-
Secret 값이 무엇이든 앱은 파일만 읽음
-
권한 없어서 파일을 못 읽는 경우만 남는데, 위 ⑤로 해결
진행하시다가 describe 출력 두 줄(ENV, volumeMounts)만 캡처 주시면, 바로 추가 체크로 마무리 도와드릴게요.