Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

Upstash Redisで実現するEnvShareの安全な環境変数共有の仕組み

EnvShareとは

envshare.devは、開発者が環境変数を安全に誰とでも共有できるようにするオープンソースプロジェクトです。.envファイルをアップロードするか、環境変数を直接入力すると、データはデータベースに保存される前に暗号化されます。生成されたリンクを受け取った人は、環境変数を復号して閲覧できます。

EnvShareは無料で利用でき、完全にオープンソースです。ソースコードはGitHubで公開されています。

主な機能

  • 共有リンク:リンクを送るだけで、環境変数を安全に共有できます
  • エンドツーエンド暗号化:データは保存前にAESで暗号化されます
  • 閲覧回数の制限:リンクが読み取れる回数を制限できます
  • 自動失効:一定時間が経過すると、リンクが失効しデータが自動削除されます

仕組み

環境変数を共有するたびに、ブラウザ上で新しいランダムな暗号鍵が生成されます。機密データはAESで暗号化された後、Redisに保存されます。

その後、一意のドキュメントIDと暗号鍵を組み合わせて共有用リンクが作成されます。このリンクを使えば、データへのアクセスと復号が可能になります。

Upstash Redisで実現するEnvShareの安全な環境変数共有の仕組み

データの保存方法

EnvShareは、暗号化された環境変数の保存にRedisを使用しています。Redisは高速なキーバリューストアとして利用できるだけでなく、リスト・セット・ハッシュといった高度なデータ構造も備えています。さらに、有効期限が切れたキーを自動的に削除する機能があり、この用途にぴったりです。

データは以下の構造を持つRedisハッシュとして保存されます:

{
 "remainingReads": 20, // 省略可:リンクを読み取れる残り回数
 "encrypted": "...", // 暗号化された環境変数
 "iv": "..." // AES-CBC用の初期化ベクトル
}

ハッシュを採用することで、暗号化データと一緒にメタデータを保存できるほか、HINCRBYコマンドを使って残り読み取り回数をアトミックに減算できます。Redisは非常に柔軟性が高く、新しいアイデアを素早く試して実装できます。例えば、将来的にはアクセスログのような機能を追加することもあるでしょう。その場合、ソート済みセット(Sorted Set)が最適な選択肢になります。

唯一の課題は、Redisが通常TCP経由でしか利用できない点です。これはエッジ関数では動作しません。幸いにも、UpstashはHTTP経由でRedisにアクセスできるRedis APIを提供しており、これこそがEnvShareに必要なものでした。

Upstashは1日10,000リクエストまで利用できる無料のRedisデータベースを提供しています。EnvShareにとっては十分すぎる容量です。EnvShareをセルフホストしたい場合も、無料アカウントを作成すればすぐに始められます。詳細はセルフホスティングガイドをご覧ください。

エッジ関数でRedisをセットアップするのはとても簡単です。必要なのは、データベースを作成し、@upstash/redisをインストールすることだけです。

エッジ関数内では、以下のようにデータを保存します:

/api/share.ts

import { Redis } from "@upstash/redis";
 
const redis = new Redis({
 url: "...", // UPSTASH_REDIS_REST_URL
 token: "..." // UPSTASH_REDIS_REST_TOKEN
});
 
 
await redis.hset(key, {
 remainingReads: 20,
 encrypted: "...",
 iv: "...",
});

まとめ

最後までお読みいただきありがとうございます!EnvShareは、Next.jsとUpstash Redisの導入がいかに手軽かを示すために作られた楽しいプロジェクトです。気に入っていただき、実際の開発に役立てていただけると嬉しいです。ご質問やフィードバックがあれば、Twitterでお気軽にお声がけください。

関連リンク:

  • EnvShare
  • GitHub
  • デプロイガイド
  1. Redis APPENDコマンドの使い方 – 既存の文字列値に文字列を追加する方法

    このチュートリアルでは、Redisデータストア内のキーに保存されている既存の文字列値に対して、別の文字列を追加(連結)する方法を解説します。この操作には、RedisのAPPENDコマンドを使用します。 APPENDコマンドとは APPENDコマンドは、指定した文字列を、キーに保存されている既存の文字列値の末尾に追加します。もしキーがRedisデータストアに存在しない場合は、追加操作を実行する前に、まず空の文字列を持つキーが自動的に新規作成されます。 一方、キーが存在していても、その値が文字列型ではない場合(リスト・セット・ハッシュなどの場合)は、エラーが返されます。また、このコマンドはO(1)

  2. リアルタイム在庫管理が小売業に不可欠な理由とは?顧客体験と売上を左右する鍵

    本記事は、電子書籍『Real-Time Inventory: Building Competitive Advantage with Redis Enterprise(リアルタイム在庫:Redis Enterpriseで競争優位性を築く)』からの抜粋です。電子書籍は無料でダウンロードできます。 デイブさんの買い物体験から見える課題 ここに、デイブさんという人物がいます。彼は郊外に住む父親で、家族の食事の準備をもっと速く、もっと便利にするために、新しい電気圧力鍋の購入を検討しています。時間のないデイブさんは、近くの店舗に今すぐ買える在庫があるのか、それともオンラインストアで2日以内配送が保証