feat: credentials 認証モードとトークン自動リフレッシュ CronJob を追加 (v2.1.263-b)
Helm Chart Release / release-chart (push) Successful in 9s
Build Session Image / build-push (push) Successful in 2m8s

トークンが定期的に失効・ローテーションしても再デプロイ不要にする。

- anthropic.authMode: credentials(新既定)
  ~/.claude/.credentials.json 全体(refreshToken 込み)を Secret に格納。
  セッション Pod にはファイルとしてマウントし $HOME/.claude へコピー(書き込み可)、
  セッション内 claude が refreshToken で自己更新
- anthropic.refresher CronJob(credentials 時・既定有効, files/token-refresher.py)
  Secret 内 refreshToken で OAuth トークンを更新し Secret を書き戻す。
  専用 SA + resourceNames 限定 Role で該当 Secret の get/patch のみ。
  tokenUrl/clientId は Claude Code CLI の非公式値(values 上書き可)
- manager.py build_pod: credentials は envFrom を使わずファイルマウント +
  SEED_CREDENTIALS_FILE。apiKey/oauth は従来どおり envFrom
- Secret に helm.sh/resource-policy: keep(credentials 時)で refresher の書込を保持
- fix: values.schema.json の $schema 行を削除(一部の Helm で
  "no schema with key or ref https://json-schema.org/draft-07/schema#" エラー)
- helm lint / template(credentials/apiKey/oauth)検証済み
This commit is contained in:
2026-09-08 15:18:21 +09:00
parent cd7092be17
commit 528a48b667
15 changed files with 503 additions and 46 deletions
+19
View File
@@ -114,6 +114,25 @@ if ! command -v claude >/dev/null 2>&1; then
fi
log "claude: $(claude --version 2>/dev/null || echo 'unknown')"
# --------------------------------------------------------------------------
# 3b. Claude 認証情報(credentials モード)
# --------------------------------------------------------------------------
# Secret からマウントした .credentials.json を書き込み可能な $HOME/.claude へコピーする。
# claude はアクセストークン失効時に refreshToken でこのファイルを自己更新する
# (セッション中のみ有効。クラスタ全体の更新は refresher CronJob が担当)。
if [ -n "${SEED_CREDENTIALS_FILE:-}" ] && [ -r "$SEED_CREDENTIALS_FILE" ]; then
mkdir -p "$HOME/.claude"
chmod 700 "$HOME/.claude"
install -m 600 "$SEED_CREDENTIALS_FILE" "$HOME/.claude/.credentials.json"
if command -v jq >/dev/null 2>&1; then
_exp="$(jq -r '.claudeAiOauth.expiresAt // empty' "$HOME/.claude/.credentials.json" 2>/dev/null)"
[ -n "$_exp" ] && log "Claude 認証情報を配置(accessToken 期限: $(date -u -d "@$(( _exp / 1000 ))" 2>/dev/null || echo "$_exp"))"
else
log "Claude 認証情報を $HOME/.claude/.credentials.json に配置しました"
fi
unset ANTHROPIC_API_KEY CLAUDE_CODE_OAUTH_TOKEN
fi
# 追加 apk(root 権限がある事前ビルドイメージのみ有効。非 root では警告のみ)
if [ -n "${EXTRA_APK_PACKAGES:-}" ]; then
if [ "$(id -u)" = "0" ]; then