手を振るまもるくんゆるふわサイバーセキュリティ
OKサインのまもるくん

シークレット管理をPythonで実践|APIキーをコードに書かない

2026-09-20実践

#シークレット管理#APIキー#環境変数#Python#実践

「APIキーをコードに直書きしてGitHubにpush → 数分で悪用」——これは実際に頻発している事故です。シークレット(秘密情報)をコードから切り離すのは、エンジニアの基本作法。Pythonでの正しい扱い方をまとめます。

原則:秘密はコードに書かない

APIキー・パスワード・トークンは、ソースコードにもGit履歴にも残してはいけません。環境変数専用の管理サービスから実行時に読み込むのが鉄則です。

⚠️

一度pushしたら『漏れた』とみなす

GitHubに秘密を上げてしまったら、履歴から消しても手遅れです。ボットが公開リポジトリを常時監視しており、数分で拾われます。該当キーは即座に無効化・再発行するのが唯一の正解。「消したから大丈夫」は通用しません。

① 環境変数から読む

コードにはキーを書かず、環境変数を参照します。

import os

api_key = os.environ.get("MY_API_KEY")
if not api_key:
    raise RuntimeError("環境変数 MY_API_KEY が未設定です")

print("キーを読み込めました(先頭だけ表示):", api_key[:4] + "...")

実行時に export MY_API_KEY=xxxx で渡すか、.env ファイルから読み込みます。

② .env ファイルと .gitignore

開発中は .env に秘密をまとめ、必ず.gitignoreで除外します。

# .env(Gitには絶対に含めない)
#   MY_API_KEY=sk-xxxxxxxx
#   DB_PASSWORD=xxxxxxxx

# 簡易パーサ(実務ではpython-dotenv推奨)
def load_env(path=".env"):
    with open(path) as f:
        for line in f:
            line = line.strip()
            if line and not line.startswith("#") and "=" in line:
                k, v = line.split("=", 1)
                os.environ.setdefault(k, v)

# .gitignore に次を必ず書く:
#   .env

③ 安全な秘密そのものを作る

トークンやパスワードを生成するときは、randomではなく**secrets**を使います。

import secrets

print("APIトークン:", secrets.token_urlsafe(32))
print("一時パスワード:", secrets.token_hex(16))
⚠️

random モジュールは暗号用途に使わない

random は再現可能な擬似乱数で、予測されるリスクがあります。トークン・パスワード・ソルトなどセキュリティ用途は必ずsecrets(またはos.urandom)を使ってください。

本番でのシークレット管理

💡

スケールしたら専用サービスへ

チーム・本番では .env の手渡しも限界が来ます。AWS Secrets Manager、HashiCorp Vault、クラウドの環境変数機能などで、アクセス権限・ローテーション・監査ログを一元管理するのが定石です。まず「コードに書かない」から始め、規模に応じて仕組みを足していきます。

まとめ

  • 秘密はコードにもGit履歴にも書かない。環境変数から読む
  • .envにまとめ、.gitignoreで必ず除外する
  • トークン生成はsecretsrandomは暗号用途NG)
  • 漏らしたら即無効化・再発行。本番は専用の管理サービスへ

もう少し詳しく(背景と理論)

APIキーやパスワードなどのシークレットは、コードに直書きせず設定として分離するのが原則です。The Twelve-Factor App の「設定は環境変数に」という指針が土台になっています1。最大の事故源がシークレットのコード混入——一度 Git にコミットすると履歴に残り、公開リポジトリなら数分でボットに拾われます。.gitignore と、コミット前に検出する仕組み(git-secrets 等)で防ぎます2。本番運用では、環境変数より一段進んだ専用のシークレット管理サービス(HashiCorp Vault、クラウドの Secrets Manager 等)で、暗号化保管・アクセス制御・定期ローテーション・監査ログを備えるのが定石です3。漏洩時に即座に無効化・再発行できる設計が重要です。

次の一歩 🌸

鍵で暗号化するAES実装、パスワード保存のハッシュ実装、更新管理のアップデートとパッチへどうぞ。

Footnotes

  1. The Twelve-Factor App の Config 原則。環境ごとに変わる値(鍵・接続情報)はコードから分離し、環境変数などで注入する。

  2. シークレットは一度コミットすると履歴に永久に残る。公開リポジトリでは自動収集される。.gitignore・pre-commit フック・秘密検出ツールで混入を防ぐ。

  3. Vault / クラウドの Secrets Manager は暗号化保管・きめ細かなアクセス制御・自動ローテーション・監査ログを提供する。漏洩時の失効も迅速。

🔥 この分野の最新トレンドをチェック →

あわせて読みたい