セキュリティ 2026年4月27日

レンタル Mac mini:ログイン・キーチェーンと SSH セッション・キーチェーンの署名と公証——2026 VmMac マトリクス

VmMac エンジニアリングチーム 2026年4月27日 約22分で読了

VmMac で Apple Silicon Mac mini を借り受けて iOS リリースを回すエンジニアは、だいたい同じ壁に当たります。VNC 上の Xcode では codesign が成功するのに、SSH から実行すると errSecInternalComponent になったり、キーチェーンのダイアログが描画されず黙って失敗します。本稿は 2026 年版のログイン・キーチェーンセッション/ファイル・キーチェーンの比較表、9 ステップの導入手順、香港・日本・韓国・シンガポール・アメリカ各リージョンでの失敗しきい値を整理します。LaunchAgent plist と秘密情報のレイヤリングマルチアカウントと高速ユーザー切り替えの隔離と併読し、テナント間で署名アイデンティティが混線しないようにしてください。

SSH の初期セットアップは ヘルプ、ビルド専用と署名専用ホストを分ける場合のコストは 料金、稀な「常に許可」クリックは VNC に閉じ込め、無人 CI には持ち込まないのが安全です。

ゴールデン VM イメージが証明書を焼き込んでいた理由と、ベアメタル macOS での代替

ハイパーバイザのスナップショットは、サービスアカウントのキーチェーンに証明書を解錠済みで載せて配布する文化がありました。VmMac では素の macOS 既定に戻るため、login.keychain-db は最初に GUI ログインした人に紐づき、SSH 自動化は別のセキュリティ文脈で動きます。明示的な security コマンド、決め打ちのパス、GUI プロンプトゼロの運用で、ゴールデンイメージ級の再現性を取り戻してください。

さらに、クラウド Mac を「短命 VM」として扱うチームほど、キーチェーンの寿命設計が曖昧になりがちです。チェックアウトごとにユーザーを作り替えるほうがクリーンでも、証明書のインポート/削除を自動化しないと、古い ACL がディスクに残り続けます。ティアダウン・スクリプトに「該当ファイル・キーチェーンを必ず削除し、検索リストを既定へ戻す」ステップを入れ、VmMac の各リージョンで同じ順序を守ってください。

また、codesign の前後で security find-identity -v -p codesigning を必ず記録すると、「証明書はあるのに署名だけ失敗」系の切り分けが速くなります。ログにはホスト名・ユーザー名・キーチェーンの絶対パスを含め、ダッシュボードではリリースブランチと突き合わせられるようにしてください。

  • アイデンティティ分離:対話開発者と launchd エージェントでキーチェーンと検索順を分ける。
  • ハードウェアバウンド鍵:YubiKey 方針があるなら CI に秘密鍵をエクスポートしない。
  • 公証用資格情報:App Store Connect API Key のローテを忘れるとスプリント途中で期限切れになる。

SSH 非対話の痛み:errSecInternalComponent と消えた GUI プロンプト

ssh ci@host xcodebuild が WindowServer に付けないとき、「常に許可」を前提にしたポリシーはデッドロックになります。ACL のキャッシュで症状が間欠化することもあります。パイプラインの構造化ログにキーチェーンのパスpartition IDcodesign 呼び出し ID を必ず出し、ホスト差分を分単位で潰してください。

VNC 経由でインポートした証明書は GUI 文脈の ACL が残り、非対話 codesign が拒否されることがあります。-T /usr/bin/codesign で再インポートする衛生手順を必須化し、生の SSH セッションで再検証してから本番宣言してください。Apple Distribution を期中でローテするなら、各 VmMac リージョンに短いメンテ窓を置き、ナイトリービルドと競合させないでください。

notarytoolaltool の資格情報は署名証明書とは別物です。ローカル署名は成功しても、ASC API Key が別ファイルにあったりサービスアカウントに Developer ロールが無ければアップロードは失敗します。保管庫を分け、どの自動化ユーザーがどのファイルを読むかを文書化し、共有 mini のログイン・キーチェーンへ適当な .p12 をドラッグする「救急処置」を禁止してください。

ヒント:security unlock-keychain -p/usr/local/bin の封じたラッパーからだけ記録し、YAML に平文パスワードを書かないでください。

マトリクス:ログイン vs ファイル vs 一時キーチェーン

モデル 向いている用途 SSH リスク ローテコスト
既定のログイン・キーチェーン VNC 上の対話 Xcode 高い—GUI 解錠履歴に依存 侵害まで低い
CI 専用ファイル・キーチェーン 無人ビルド 低い—-k パス明示で抑止 中—四半期ローテ推奨
ジョブ毎の一時キーチェーン 極端に慎重な PR 検証 非常に低い 高い—毎回インポートが CPU を食う

署名・公証・Fastlane:秘密の置き場所

Fastlane Match は git 暗号化が既定です。そこに ci ユーザーのみが読めるファイル・キーチェーンを重ねます。公証は KMS から短寿命環境変数で流し込む App Store Connect API Key を優先し、OpenClaw を使わなくても plist のレイヤリング パターンを流用してください。xcrun notarytool は極力ディスクに残さず、必要なら RAM ディスクに置き、24 時間以内に消すジョナーを用意します。

CI で match を叩く前に、ラッパで必ず security default-keychain と実際の検索リストをログへ吐き、期待とズレていないかを検証します。Fastlane の verbose ログだけではキーチェーン側の異常が埋もれやすいため、署名フェーズの標準エラーを別ストリームに分離して保存すると、後追い調査が楽になります。

配布パイプラインが複数のチーム ID を扱う場合は、環境変数 CODE_SIGN_IDENTITY と実際にインポートされた証明書のサムプリントを突き合わせるガードを入れてください。VmMac 上で「昨日まで動いていたのに今日から別チームで署名される」事故は、検索順の先頭が意図せず入れ替わったときに起こりがちです。

security list-keychains -s ~/Library/Keychains/ci-build.keychain-db login.keychain-db

セキュリティ分離:ビルドプールと対話型署名ステーション

コンパイル農場と署名ステーションで既定の検索リストを共有しないでください。VmMac ではミニを2 台借り、1 台をコンパイルと単体試験に特化、もう 1 台は VNC を許可して Apple がまだ完全自動化しにくい配布証明書を扱う、という分割が典型です。新人がデスクトップの同一性をビルド機へコピーして CI を「直す」事故を防ぐため、社内 Wiki に境界を明記します。

レッドライン:リポジトリ書き込み権を持つ全エンジニアが SSH できるホストに配布用秘密鍵を置かない—ロール別プールで隔離してください。

2026 年 9 ステップ導入

  1. GUI 自動ログイン無しの ci-build ユーザーを作成。
  2. 強ランダムパスワードの ci-build.keychain-db を生成し、Vault に保存。
  3. codesignproductsign のみに絞った ACL で証明書をインポート。
  4. SSH forced command ラッパで security list-keychains を固定。
  5. パスワードは argv ではなく FD 3 から読む UnlockKeychain ヘルパを追加。
  6. launchd の標準出力/エラーを相関 ID 付き構造化ログへ。
  7. 再起動リハーサル:人手無しで署名できるか確認。
  8. HK/JP/KR/SG/US で同じ plist とキーチェーン絶対パスをミラー。
  9. 四半期ごとに証明書を 1 枚失効させ、各リージョンの復旧時間を測定。

VmMac 五リージョン整合(HK / JP / KR / SG / US)

レイテンシはキーチェーン API を変えませんが、時刻ずれは公証タイムスタンプを壊します。全ホストで同一 NTP 方針を取り、macOS メジャーアップグレード後は sntp -d をログに残してください。リージョンごとに別の App Store Connect サービスアカウントを使うなら manifest に明示—静かな分岐が誤った Team ID 署名を出荷します。

運用整合には検索順ラッパの絶対パスの一致が必要です。東京が ~/Library/Keychains/ci.keychain-db を symlink し、シンガポールが /var/lib/ci/keychains/prod.keychain-db というアンチパターンは Ansible を分岐させ、インシデントで時間を浪費します。環境階層ごとに絶対パスを一つに決め、ラッパのチェックサムと Vault 版で昇格ゲートを掛けてください。

notarytool アップロードは外向き経路の影響を強く受けます。指数バックオフは必須ですが、キーチェーン解錠の系統的失敗を隠さないでください。ログに region=HK|JP|KR|SG|US を付け、Apple API 本障害とローカル偽陽性を切り分けます。

解錠失敗の数値しきい値

シグナル しきい値 アクション
キーチェーン起因の codesign 失敗 1 時間に 2 回超 プラットフォームへページ;リリース凍結
アンロック・ヘルパ遅延 p95 > 800 ms Vault かディスク競合を調査
配布証明書の期限 残り 21 日未満 自動ローテ工票

FAQ:レンタル Mac mini のキーチェーンと codesign

iCloud キーチェーンを CI で使える? いいえ—可変同期は再現性を壊します。

VmMac がキーチェーンを解錠する? いいえ—秘密は顧客側、VmMac はハードウェアとネットワークを提供します。

Developer ID Application 証明書は? 同じマトリクス—ファイル・キーチェーン優先、方針次第でハードウェアトークン。

CI ログに security set-key-partition-list が出るべき? インポート後に意図的に再封印するときだけ。想定外なら手動 ACL 変更の疑いでレビュー。

漏えい疑い後にホストを安全と証明するには? 鍵ローテ、旧ファイル削除、Vault から再作成、自動化ユーザーのパスワードもリセット—共有レンタル機では安い保険です。

Mac mini M4 と VmMac が署名プールを簡素化する理由

Mac mini M4 は単スレッド署名遅延が低く、PR ごとの一時キーチェーン運用でもコストが許容されます。VmMac は香港・日本・韓国・シンガポール・アメリカに署名ホストを近づけつつ、コンパイルのバーストは別マシンへ—ノート PC を増やしてダイアログ待ちをしないで済みます。漏えいを疑ったホストは減価償却資産を気にせず退役できます。

物理 Mac をレンタルするモデルは、キーチェーンの「誰が最初に触ったか」という運用上の曖昧さを残します。その曖昧さを運用で潰すほど、チームは VmMac の複数リージョンへ同じ手順を水平展開しやすくなります。結果として、障害時の切り分けは「スクリプト差分」と「証明書バージョン差」に収束し、属人化したノート PC 依存から脱却できます。

最後に、署名ホストの監視はコンパイルホストと同じダッシュボードに混ぜないでください。SLO が異なるため、アラートのノイズが相互に増幅します。署名専用のワークスペースを分け、ページ条件も別に設計すると、夜間の誤検知が減り、本当のキーチェーン障害だけが残ります。

署名専用ホストを追加

コンパイル専用の Mac mini と VNC 署名ステーションを別プランで分離します。