0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

dotenvxの導入でやらかした話

0
Posted at

前置き

開発エージェントAIとしてPJに導入する際の要件として、".env"の中身をエージェントに読み取られないようにすることというものがありました。

そこでdotenvxを導入したのですが、完全に私のミスで秘密鍵の漏洩をやらかしてしまいましたのでここで供養を行います。

要約

dotenvx encryptで暗号化を行う際に、同名の環境変数があった場合、二つ目の変数は暗号化されません

.env
secretkey=hoge 
secretkey=fuga
another_secretkey=piyo
// another_secretkey=piyo2

これをdotenvx encryptで暗号化すると...

.env
secretkey=hoge // 暗号化されていない!!
secretkey=encrypted:~~~~~~~~~~~~~~
another_secretkey=encrypted:~~~~~~~~~~~~
// another_secretkey=piyo2 // これも暗号化されない!!
  • 同名の環境変数がある場合
  • 環境変数がコメントアウトされている場合

は暗号化が行われないため注意が必要です。
無論、そもそも同名の環境変数やコメントアウトによる管理そのものが良くないのですが...

対策で作ったlefthook

check-env-encryption.sh
#!bin/bash

set -e

echo "Checking for unencrypted secrets in .env..."

# .env ファイルが存在しなければスキップ
if [ ! -f ".env" ]; then
  echo ".env file not found, skipping check"
  exit 0
fi

# コメント行、空行、公開鍵、暗号化済みの行をスキップ
unencrypted_lines=$(grep -v "^#" .env | \
                    grep -v "^$" | \
                    grep -v "^DOTENV_PUBLIC_KEY" | \
                    grep -v "encrypted:" | \
                    grep "=" || true)

if [-n "$unecrypted_lines" ]; then
  echo "ERROR: Unecrypted secrets detected in .env file!"
  echo "Please encrypt using: dotenvx encrypt"
  exit 1
fi

echo "All .env values are properly encrypted!"
exit 0
lefthook.yml
pre-commit:
  commands:
    env-encryption-check:
      glob: ".env"
      run: bash .githooks/check-env-encryption.sh
      fail_text: ".env file must be encrypted with dotenv encrypt!"
0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?