用語集 最終更新 2026.08.10

Secrets

Secrets は、パスワードやAPIキー、トークンなど、コードに書いてはいけない機密の値と、それを安全に扱う仕組みの総称です。 GitHub Actions をはじめ、多くのCI/CDサービスが同名の機能を持っています。

なぜコードに書いてはいけないのか

「private リポジトリだから大丈夫」は成り立ちません。理由は3つあります。

  1. 履歴に残る。あとで削除しても、過去のコミットから取り出せる
  2. 公開範囲は変わる。private を public にした瞬間に全部出る
  3. アクセスできる人が増える。外注・退職者・フォークにも渡る

Git の履歴からの完全削除は、履歴の書き換えが必要で非常に手間がかかります。入れないことが唯一の現実的な対策です。

入ってしまったらどうするか

万一コミットしてしまった場合、優先順位はこうです。

  1. まず値を無効化する(ローテーション)。履歴の掃除より先
  2. 新しい値を発行して Secrets へ登録する
  3. そのうえで履歴の扱いを検討する

削除だけして無効化しないのが最悪の対応です。値が生きている限り、履歴を見た誰でも使えます。

CI で使うときの注意点

Secrets はログ上でマスクされますが、万能ではありません。

  • Base64 などで加工して出力するとマスクをすり抜けます
  • 環境変数として渡した先のプロセスからは普通に読めます
  • フォークからのプルリクエストには渡されないのが既定。ここを緩めると、外部の人が書いたコードに機密が渡ります

3つ目はrunnerの安全設計と直結する話です。緩める前に何が起きるかを理解してください。

実務で見るポイント

  • 権限は最小に。「全権限のトークン1本」ではなく用途ごとに分ける
  • 有効期限を設定できるものは設定する。無期限のトークンは事故の温床
  • スキャンツールをCIに入れ、機密が混入したコミットを検知する