チームメンバーにAPIキーとシークレットを安全に共有する方法
開発チームでAPIキー、シークレットキー、環境変数を安全に共有する方法を解説。危険な共有方法と安全な代替策、シークレット管理のベストプラクティスを紹介します。
チームメンバーにAPIキーとシークレットを安全に共有する方法
開発の現場では、チームメンバーにAPIキー、シークレットキー、データベースパスワード、サーバー接続情報などを渡す場面が頻繁に発生します。問題は、こうした機密情報をどうやって安全に共有するかです。
危険な共有方法
まず、絶対にやってはいけない方法を確認しましょう。驚くことに、多くの開発チームが今なおこうした方法を使っています。
1. Gitリポジトリにコミットする
.envファイルをGitにコミットするのは、最も一般的で最も危険なミスです。
# 絶対にやらないでください
git add .env
git commit -m "環境変数を追加"
git push origin main
一度Gitの履歴に入ったシークレットは、git rmで削除しても履歴に残り続けます。パブリックリポジトリなら、ボットが数秒以内に検知します。
2. Slack/Discordに貼り付ける
メッセンジャーにAPIキーをそのまま貼り付けるのも非常に危険です。
- チャンネルにアクセスできる全員が見られます
- メッセージ検索で後から発見できます
- 退職者がいてもメッセージは残ります
- Slackの場合、ワークスペース管理者がDMを含む全メッセージを閲覧可能です
3. メールで送信する
メールはデフォルトでは暗号化されていません。メールサーバーを経由する間に傍受される可能性があり、受信者の受信箱に永久に残ります。
APIキー漏洩の実際の被害
APIキー漏洩は単なるセキュリティインシデントではありません。直接的な金銭的被害につながります。
AWSキー漏洩の事例
| 事例 | 被害規模 |
|---|---|
| 個人開発者のAWSキー露出 | 一晩で$6,000の請求 |
| スタートアップのGitHub公開リポジトリ | 3日間で$50,000以上の請求 |
| 企業内部Wikiからの漏洩 | 数百万ドル規模のデータ漏洩 |
AWS、GCP、Azureなどのクラウドサービスのキーが漏洩すると、攻撃者は数分以内に大規模なリソースを作成し、暗号通貨のマイニングなどに悪用します。
安全なAPIキー共有方法
方法1: LOCK.PUB秘密メモ(即時共有)
チームメンバーにすぐキーを渡す必要がある場合、最も実用的な方法です。
ワークフロー:
- LOCK.PUBで秘密メモを作成します
- APIキーと必要な情報を記入します
- パスワードを設定し、短い有効期限を指定します(例: 1時間)
- リンクをSlackで、パスワードをDMで別途送ります
# 秘密メモの内容例
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI...
AWS_REGION=ap-northeast-1
注意: このキーはステージング環境専用です。
本番キーは別途リクエストしてください。
メリット:
- 有効期限後に自動削除されます
- パスワードがないと閲覧できません
- サーバーに暗号化して保存されます
- Slackの履歴にキーの原文が残りません
方法2: シークレット管理ツール(チーム全体管理)
チーム規模が大きくなったら、専門のシークレット管理ツールの導入が必要です。
| ツール | 特徴 | 適したチーム |
|---|---|---|
| HashiCorp Vault | 最強のシークレット管理 | 大規模エンタープライズ |
| AWS Secrets Manager | AWSエコシステム統合 | AWS中心のインフラ |
| 1Password Teams | 開発者に優しいUI | スタートアップ、中小チーム |
| Doppler | 環境変数の自動同期 | DevOps中心チーム |
方法3: 環境変数管理(.env.exampleパターン)
プロジェクトに.env.exampleファイルを含めるのは標準的な慣行です。
# .env.example(Gitにコミット可)
DATABASE_URL=
API_KEY=
SECRET_KEY=
STRIPE_SECRET=
# .env(Gitにコミット不可)
DATABASE_URL=postgresql://user:pass@host:5432/db
API_KEY=sk-abc123...
SECRET_KEY=mysecret...
STRIPE_SECRET=sk_live_...
.gitignoreに.envを必ず追加しましょう。
シークレット管理のベストプラクティス
1. 定期的なキーローテーション
APIキーは定期的に交換すべきです。万が一漏洩した場合の被害を最小限に抑えられます。
| キーの種類 | 推奨ローテーション周期 |
|---|---|
| 本番APIキー | 90日 |
| データベースパスワード | 60日 |
| サービストークン | 30日 |
| 開発/テストキー | 退職者発生時に即時 |
2. 環境ごとにキーを分離
開発、ステージング、本番環境ごとに異なるキーを使いましょう。
3. 最小権限の原則
各APIキーには必要最小限の権限のみを付与しましょう。
- 読み取り専用の操作には読み取り専用キーを使用
- 特定のサービスにのみアクセスできるキーを発行
- 管理者キーは最少人数にのみアクセスを制限
4. 漏洩検知の自動化
GitHub Secret Scanning、GitGuardian、TruffleHogなどのツールを活用して、コードリポジトリにシークレットがコミットされるのを自動検知しましょう。
LOCK.PUBを活用したクイック共有ワークフロー
開発現場で最も頻繁に起こるシナリオ別のワークフローです。
新メンバーのオンボーディング
新しい開発者が参加した際、必要な環境変数を一括で渡します。秘密メモに情報をまとめ、24時間の有効期限を設定して共有します。
外部パートナーへのキー共有
外部ベンダーにAPIキーを共有する際は、専用キーを発行し、短い有効期限の秘密メモで渡し、使用終了後にキーを無効化します。
障害対応時の緊急キー共有
サーバー障害で別のメンバーに緊急でアクセス情報を渡す必要がある場合、1時間の有効期限で秘密メモを作成し、障害解決後にキーをローテーションします。
まとめ
APIキーとシークレット管理は開発セキュリティの基本中の基本です。Slackにキーを貼り付けたりメールで送ったりする習慣は、一度の漏洩で数百万円の被害につながる可能性があります。
今すぐチームメンバーにキーを渡す必要があるなら、秘密メモを活用してみてください。