「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Secrets Loader を使用した Laravel および JS プロジェクトのシークレット管理が簡単に

Secrets Loader を使用した Laravel および JS プロジェクトのシークレット管理が簡単に

2024 年 11 月 8 日に公開
ブラウズ:361

Effortless Secret Management for Laravel & JS Projects with Secrets Loader

API キー、トークン、資格情報などの機密データをさまざまな環境で管理することは、特にアプリケーションの開発とデプロイの場合に非常に難しい場合があります。シークレットをバージョン管理にハードコードせずに、安全に保存し、必要なときに取得できるようにすることは、セキュリティを維持するために非常に重要です。

そこで私は Secrets Loader を作成しました。これは、AWS SSM と CloudFormation から .env ファイルに直接シークレットを動的に取得する Bash スクリプトで、ローカルでの開発とデプロイメントをより簡単、安全、効率的に行うことができます。


シークレットローダーとは何ですか?

Secrets Loader は、.env ファイル内のカスタム構文に基づいて、AWS SSM パラメータ ストアおよび AWS CloudFormation 出力からシークレットを自動的に取得するように設計されたシンプルなツールです。バージョン管理で機密情報を公開することなく、プレースホルダーを実際のシークレットに置き換えます。

たとえば、API キーや認証情報をハードコーディングする代わりに、次のように .env ファイルで定義します。

THIRD_PARTY_API_KEY="ssm:/third-party/api/key"
AWS_ACCESS_KEY_ID="cf:my-stack:AccessKeyId"

1 つのコマンドで、Secrets Loader は AWS から実際の値をフェッチし、.env ファイルを更新して、機密情報を安全に保ち、管理しやすくします。


作った理由

ローカルでの開発と展開中に、プロジェクト ファイルにハードコーディングしたくない機密の認証情報を扱っていることに気づきました。 AWS のサービスを広範囲に使用してきたので、それほど手間をかけずにシークレット管理を既存の開発ワークフローに統合する方法を必要としていました。

Secrets Loader が解決する主な課題は次のとおりです:

  1. ハードコードされたシークレットの回避: シークレットをバージョン管理にコミットする必要はもうありません。プレースホルダーを安全に使用して、AWS SSM と CloudFormation から実際の値を動的に取得できます。
  2. 手動作業の削減: シークレット値を手動でコピーして貼り付ける代わりに、それらを .env ファイル内で 1 回定義するだけで、スクリプトに取得を実行させます。
  3. シークレット管理の簡素化: ローカル開発、ステージング、本番環境のいずれで作業している場合でも、Secrets Loader を使用すると、シークレットが安全かつ自動的にロードされます。

特徴

Secrets Loader には、ローカル開発環境と運用環境の両方で便利なツールとなるいくつかの重要な機能が付属しています。

  • 自動シークレット読み込み: .env ファイルでパスを指定して、AWS SSM パラメータ ストアと CloudFormation からシークレットを取得します。
  • セキュリティ第一のアプローチ: 実行時に機密データを安全にロードすることで、バージョン管理の対象外にします。
  • 単純な構文: .env ファイルでカスタム構文 (ssm: SSM パラメーターの場合、cf: CloudFormation 出力の場合) を使用して、シークレットの取得元を指定します。
  • エラー処理: スクリプトは、1 つの取得が失敗した場合でも他のシークレットの処理を続行し、ワークフローを停止することなく警告を記録します。

仕組み

Secrets Loader の魅力は、特定のプレフィックス (ssm: および cf:) に基づいて AWS からシークレットをフェッチできる機能にあります。ワークフローの例は次のとおりです:

  1. .env ファイルを設定します:

SSM パラメーターの場合は ssm: プレフィックス、または CloudFormation 出力の場合は cf: プレフィックスを使用して、.env ファイルにシークレットのプレースホルダーを追加します:

   THIRD_PARTY_API_KEY="ssm:/third-party/api/key"
   AWS_SECRET_ACCESS_KEY="cf:my-stack:SecretAccessKey"
  1. スクリプトを実行します:

次のコマンドを使用してスクリプトを実行し、シークレットを取得します:

   ./secrets.sh
  1. 更新された .env ファイル:

スクリプトを実行すると、.env ファイルが AWS から取得した実際の値で更新されます:

   THIRD_PARTY_API_KEY=actual-api-key-value
   AWS_SECRET_ACCESS_KEY=actual-access-key-value

シークレットをハードコーディングしたり、手動で検索したりする必要はもうありません!


インストールとセットアップ

始める準備はできましたか?プロジェクトで Secrets Loader をセットアップする方法は次のとおりです:

  1. リポジトリのクローンを作成します:
   git clone https://github.com/Thavarshan/secretst-loader.git
   cd secretst-loader
  1. スクリプトを実行可能にします:
   chmod  x secrets.sh
  1. AWS CLI がインストールされ、設定されていることを確認してください:

AWS CLI がインストールされていない場合は、AWS CLI インストールガイドに従ってください。インストール後、AWS 認証情報を構成します:

   aws configure
  1. .env でシークレットを定義します:

ssm: および cf: プレフィックスを使用して、シークレットの取得元を定義します:

   THIRD_PARTY_API_KEY="ssm:/third-party/api/key"
   AWS_ACCESS_KEY_ID="cf:my-stack:AccessKeyId"

使用例

簡単な例を見てみましょう:

.env.example ファイル:

# Application settings
APP_NAME=MyApp
APP_ENV=production

# Secrets fetched from AWS SSM and CloudFormation
THIRD_PARTY_API_KEY="ssm:/third-party/api/key"
AWS_SECRET_ACCESS_KEY="cf:my-stack:SecretAccessKey"

シークレットローダーの実行:

./secrets.sh

更新された .env ファイル:

# Application settings
APP_NAME=MyApp
APP_ENV=production

# Fetched secrets
THIRD_PARTY_API_KEY=actual-api-key-value
AWS_SECRET_ACCESS_KEY=actual-secret-access-key

トラブルシューティング

Secrets Loaderの使用中に問題が発生した場合は、次の点を確認してください:

  1. AWS 権限: AWS CLI が正しく設定されていること、および IAM ロールまたはユーザーに AWS SSM および CloudFormation シークレットにアクセスするための十分な権限があることを確認してください。

  2. 構文エラー: .env ファイルの構文を再確認して、ssm: および cf: プレフィックスが正しいことを確認してください。

  3. スクリプト エラー: スクリプトが特定のシークレットの取得に失敗した場合、警告がログに記録されますが、他のシークレットの取得は続行されます。ログでエラー メッセージがないか確認し、AWS リソースが存在し、アクセス可能であることを確認してください。


シークレットローダーの拡張

スクリプトは拡張可能に設計されています。他のシークレット管理システム (Azure Key Vault や HashiCorp Vault など) を統合する場合は、新しいプレフィックスとフェッチ ロジックをサポートするようにスクリプトを簡単に変更できます。

たとえば、azkv: プレフィックスを追加して、Azure Key Vault からシークレットを取得し、Azure CLI を使用して取得を処理できます。


貢献する

Secrets Loader はオープンソースであり、貢献はいつでも歓迎されます。機能の追加、バグの修正、改善の提案をご希望の場合は、お気軽に次のことを行ってください:

  • 問題を開く: フィードバックやバグレポートを共有します。
  • プル リクエストを送信する: 貢献ガイドラインに従ってコードを貢献してください。

結論

環境間でシークレットを手動で管理するのにうんざりしている場合は、Secrets Loader がプロセスを合理化するシンプルで効果的なツールです。 AWS SSM と CloudFormation からシークレットを動的に取得することで、バージョン管理で公開される危険を冒さずに認証情報を安全に管理できます。

GitHub でプロジェクトをチェックして試してみて、役に立ったと思ったら、GitHub で ⭐ をお願いします! あなたのサポートがプロジェクトの成長に役立ちますので、ぜひご意見をお待ちしています。フィードバックを送ったり、進行中の開発への貢献を確認したりできます。

リリースステートメント この記事は、https://dev.to/thavarshan/effortless-secret-management-for-laravel-js-projects-with-secrets-loader-59beに再現されています。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3