【1Password移行⑧】「最後の砦」を間違えると何が起きるか
Series C では、SSHキー以外のシークレット──APIキー、DBパスワード、各種トークン──の移行をやっていきます。
まず最初に「なぜCredentialの管理が難しいか」という話をします。
目次
「どこかに書かないと使えない」という問題
SSHキーは移行がシンプルでした。
「鍵ファイルをなくして1Password SSH agentに任せる」という明確な答えがあるので。
一方でAPIキーや環境変数は、どこかに「書いて」おかないとアプリやスクリプトが使えません。
これが難しいところです。
よくある対処として .env ファイルに書いて .gitignore に入れる、というパターンがあります。
でもこれ、Gitには上がらないけどディスクには残ります。
Claude Codeのような「ファイルシステムを読めるツール」には、.gitignore は関係ありません。
ディスクにあれば読めてしまいます。
「最後の砦」とは何か
機密情報の管理において、「最後にここだけ守れていれば全部安全」という場所があります。
これが「最後の砦」です。
この砦を間違えると、他をどれだけ頑張っても意味がなくなります。
よくある間違いを挙げます。
パターン①:.env をディスクに置いておく
「.gitignore に入れてるから大丈夫」と思いがちですが、ディスク上にある限りリスクがあります。
Gitに上がらないだけで、ローカルのファイルはツールからもマルウェアからも見えます。
パターン②:シェルの設定ファイルにベタ書きする
~/.zshrc や ~/.bashrc に export API_KEY=xxxxx と書いてしまうパターンです。
毎回入力しなくて済むのは便利なんですが、ホームディレクトリにあるファイルに平文で書いてあります。
パターン③:スクリプトにハードコードする
「このスクリプトだけで使うから」とシェルスクリプトや設定ファイルに直接書いてしまうケース。
Gitに入れる予定がなくても、ファイルとして存在している以上は読まれます。
全部洗い出す
まず自分の環境にどんなシークレットがあるか棚卸しします。
探す場所はこのあたりです。
- プロジェクトごとの
.env、.env.local、.env.production ~/.zshrc、~/.bashrc(exportされている変数)~/.config/配下のツール設定(GitHub CLI、Google Cloud SDK等)- 自作スクリプト内のハードコード
- MakefileやDockerfileの中
網羅的に探すにはこんな方法もあります。
# ホームディレクトリ内で APIキーっぽい文字列を検索
grep -r "API_KEY\|api_key\|SECRET\|PASSWORD\|TOKEN" ~/.zshrc ~/.bashrc ~/.profile 2>/dev/nullプロジェクトディレクトリも確認します。
# .envファイルを一覧表示
find ~/projects -name ".env*" -not -path "*/.git/*" 2>/dev/null「1行でも残ってたら意味がない」
移行で気をつけないといけないのは、全部消さないと意味がない ということです。
OpenAI APIキーを1Passwordに移行して .env を削除しても、~/.zshrc に同じキーが書いてあったら意味がありません。
棚卸しで全部見つけて、全部消す。
これが Series C のテーマです。
次回 C-2「移行=ローテーション」では、安全な移行手順と op run を使った環境変数注入の方法を書きます。
今回は以上です!