0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

環境設定ファイル(.envファイル)運用とセキュリティの考え方

0
Posted at

フロントエンドとAPIの.envファイル運用とセキュリティの考え方

Webアプリ開発では、環境変数(.env)の扱いを誤ると重大な情報漏洩につながります。
この記事では、フロントエンドとAPIそれぞれの.envの役割と、安全な運用方法を整理します。


① そもそも.envファイルとは?

.envファイルは、アプリの設定値(環境変数)を管理する仕組みです。

例:

DATABASE_URL=postgres://xxx
API_URL=https://api.example.com

② フロントエンドとAPIでの決定的な違い

まず一番重要な前提です👇

👉 フロントの.envは「公開される前提」
👉 APIの.envは「絶対に外に出してはいけない」


③ フロントエンドの.env(公開情報)

フロントエンド(React / Next.jsなど)の.envは、ビルド時にJSへ埋め込まれます。

つまり:

👉 ブラウザから誰でも見える


フロントで扱ってよいもの

  • APIのURL
  • 公開前提のID(例:Cognito Client ID)
  • フラグ(feature flagなど)

例:

NEXT_PUBLIC_API_URL=https://api.example.com
NEXT_PUBLIC_COGNITO_CLIENT_ID=xxxx

フロントで絶対NGなもの

  • DB接続情報
  • APIシークレットキー
  • JWT秘密鍵
  • AWSシークレットキー

👉 これを入れた瞬間に漏洩確定です


④ API(バックエンド)の.env(秘密情報)

API側(Node.js / NestJSなど)の.envはサーバー内でのみ使われます。

👉 外部から直接見えない
👉 だから秘密情報を持てる


APIで扱うもの

DATABASE_URL=postgres://xxx
JWT_SECRET=super-secret
AWS_SECRET_ACCESS_KEY=xxxx

セキュリティの本質

APIは「秘密を守る壁」です。

フロント:
👉 ユーザーの手元(信用できない)

API:
👉 サーバー内(信用できる)


⑤ よくある勘違い(かなり重要)

❌ Client IDは秘密?

結論👇

👉 秘密ではない(フロントに置いてOK)

例えば Amazon Cognito の Client ID は公開前提です。

理由:

  • それ単体では認証できない
  • 実際の認証はリダイレクトやトークンで行う

❌ APIキーは全部秘密?

👉 サービスによる

  • 公開用キー(例:Google Maps) → OK
  • サーバー用キー → NG

⑥ よくある事故パターン

① フロントに秘密を書く

NEXT_PUBLIC_API_SECRET=xxxx ←アウト

② Gitにコミット

.env ← pushしてしまう

③ ログに出す

console.log(process.env.JWT_SECRET)

⑦ 安全な運用ルール

① .envはGit管理しない

.env
.env.local

👉 .gitignore に追加


② サンプルファイルを用意

.env.example
DATABASE_URL=
JWT_SECRET=

③ 環境ごとに分ける

.env.development
.env.staging
.env.production

④ 本番は.envを使わない(理想)

本番では:

  • AWS Parameter Store
  • Secrets Manager
  • CI/CD環境変数

などを使う


⑧ フロントとAPIの責務分離(重要)

設計としてはこうなります👇

[フロント]
  ↓(公開情報のみ)
[API]
  ↓(秘密情報使用)
[DB / 外部サービス]

具体例

フロント

fetch('/api/user')

API

const user = db.find(...)

👉 DB情報はフロントに一切渡らない


⑨ 実務での判断基準

迷ったらこれ👇

👉 「その値をブラウザで見られて困るか?」

  • YES → API側に置く
  • NO → フロントでもOK

まとめ

項目 フロント API
公開されるか される されない
秘密情報 ❌ NG ✅ OK
役割 表示・操作 認証・データ管理

補足

.envの扱いのコツ

  • フロントは信用しない
  • APIに責務を寄せる
  • 秘密はサーバーに閉じる
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?