2026 運用CI/CDOIDCSFTP

2026年 CI/CD でリモートMacへ SFTP/rsync 配布:OIDC・デプロイ鍵・最小権限の意思決定マトリクス

GitHub ActionsGitLab CI から リモートMac のSFTPへ成果物を送る際、ローテーションされない deploy key は手早い一方、監査とインシデントで攻撃面を一気に広げます。本稿は OIDC 由来の短命SSH資格情報、運用規律のある deploy key、PATの落とし穴、SSHユーザ証明書 を対比し、Chroot並行セッション原子リリース と整合する秘密管理・ログ方針を整理します。締めに SFTPMAC ホスト型リモートMac が入口安定とテナント分離で DIY をどう補うかを述べます。

GitHub ActionsOIDCdeploy keySFTPrsyncリモートMac
CI/CD からリモートMacへ安全に成果物を転送するSSH資格情報のイメージ

三つの痛み:永続鍵はブラスト半径を静かに拡大する

第一に、アイデンティティがパイプライン寿命から乖離する。リポジトリ改名やフォーク継承で古い秘密が残り、監査で「どのワークフローが sftp_prod になるのか」を掘らねばならなくなる。複数チームが同一Unixアカウントを共有する リモートMac では、OpenSSH ログは publickey 成功しか示さず、Organization や Group まで追えない。

第二に、シークレット平面が肥大化し最小権限を壊す。organization シークレットは便利だが、実験ワークフローまで本番アップロード経路に触れうる。base64 鍵を echo すればランナーログやキャッシュに残る。ディレクトリ境界と同じ厳しさでスコープを設計する。

第三に、ローテーションカレンダーは事故まで延ばされる。短命トークンは期限を日常化するが、静的鍵は四半期作業として忘れがち。チェックサムゲート や原子リリースと同じ変更管理に憑依管理を置くべきである。

補足:コンプライアンスは失効可能性と職務分離を求める。OIDCクレームで staging/production を境界化し、run id・issuer・principal を証明書拡張と突合せよ。高並列で同一秘密を使い回すと漏えい時の半径が拡大するため、アカウントまたは鍵を分割せよ。

資格モデル:OIDC、deploy key、PAT、SSH証明書

GitHub Actions OIDC / GitLab JWT はランナーがトークン交換サービスに身元を示し、短命SSH鍵やユーザ証明書を発行させる。信頼の根を静的ファイルから監査可能な連鎖へ移す。発行基盤にはMFA・パッチ・レート制限・SIEM連携が要る。発行失敗を黙殺すると開発者PCへの手動アップロードというシャドウITに戻る。

deploy key は単一リポ・単一目標プレフィックスで規律ある小チーム向き。読み取り専用と書き込みを分離し、公開鍵コメントにワークフローと責任者を書く。PAT は主にHTTPS Git向けでSFTPと同一secret名に置くな。SSH証明書 はTTLとPrincipalを運び、chroot と相性が良い。

交換エンドポイントと署名鍵も高価値資産であり、失敗時アラートと手動フォールバック手順を用意する。

意思決定マトリクス

ファイアウォール変更チケットと同じ文書に結論を残す。

モデル向く場面露出時間運用負荷
長寿命 deploy key最小チーム・低頻度リリース初期低・長期高
OIDC→短命SSH中規模・規制・クレーム境界低(分単位)中高(HA)
SSHユーザ証明書既存CA中低
Unix分割のみ移行中低中

資格を細かくしても MaxSessions 圧力は残る。

実装:GitHub Actions から sshd まで六段以上

ステージングで検証し、sshd リロード時は二系統シェルを維持する。

# 1 OIDC を有効化(公式手順に従う)
# 2 JWT 検証後、RUNNER_TEMP に短命 ed25519 またはユーザ証明書を書き込み
Host mac-ci-prod
  HostName 10.0.50.20
  User sftp_ci_prod
  IdentityFile "$RUNNER_TEMP/ci_ed25519"
  StrictHostKeyChecking accept-new
  ServerAliveInterval 60
# RSYNC_RSH="ssh -F ~/.ssh/config_ci -o BatchMode=yes"
# Match User + internal-sftp + ChrootDirectory
# authorized_keys コメント例 gh:org/repo:workflow:environment

production environment とレビュアを結びつけ、ログはフィンガープリントと RUN_ID のみ。アップロードは 原子リリース ディレクトリへ。

定量基準:二重鍵・SIEM

静的鍵は本番Macビルダーで30日ごとレビュー。二重鍵は72時間重複、ロールバック用に24時間読み取りのみ保持。発行KMSは14日以内に復旧訓練。SIEM は github_actor・run_id・environment・key_fp・Unixアカウントを結合する。

ランナー衛生:マネージド短命ディスクは鍵退避に有利。セルフホストはtmpfsと再イメージで残留ファイルを減らす。握手P95が800msを超えたらバスチョンCPUとFWセッションを先に疑う。

発行鍵の四半期テーブルトップ演習でエスクロー漏れを可視化し、Terraform と同じリポジトリに教訓を残す。

FAQ とホスト型リモートMac

OIDCだけで deploy key は消えるか

sshdが信頼できる材料を返す発行コンポーネントが必要。

ログに絶対出してはいけないもの

PEM本文、生シークレット、パスフレーズ付き対話コマンド。

トークンが短くてもUnix分割は必要か

認証とディレクトリPOSIX分離は別層である。

まとめ:短命でクレーム境界されたCI認証を chroot・並行・原子配布と揃えよ。限界:発行・プロキシ・ログは自前運用が残る。SFTPMAC のホスト型 リモートMac は入口とテナント分離を束ね、コンパイラと配布に集中できる。

自前Macは電源・予備部品・リモートハンズコストを抱え、憑依管理の遅れと相乗する。経営層には恒久秘密削減と監査準備時間短縮を数値で語れ。

入口とディレクトリを一体で任せたいチームは SFTPMAC プランを参照。