CloudflareワーカーとUpstashRedisを使用してエッジでIP許可/拒否リストを実装する
Webサイトへのアクセスを特定のIPに制限するのが一般的です。この投稿では、エッジコンピューティングを使用してIP許可/拒否リストを実装する方法を示します。まずCloudflareワーカーを紹介します。
Cloudflareワーカーは、近年非常に人気のあるテクノロジーです。 2017年に一般公開され、2019年にCloudflareKVストレージが一般公開されました。
CloudflareワーカーやKVストレージの詳細には触れずに、簡単に説明します。Cloudflareワーカーを使用すると、httpリクエストのエッジレベルをインターセプトでき、コードスニペットを実行してリクエスト/レスポンスを操作できます。また、KVストレージを使用することもできます。 Cloudflareワーカー内でネイティブに利用できる辞書をプット/ゲットするため。プレイグラウンド環境をすばやく試すことができます。非常にシンプルでワンクリックのテスト環境です。
Cloudflare KV Storageとは別に、開発者としてより高度なデータ構造が必要になる場合があります。また、外部から(バックエンド、API、SDKクライアントなどから)KVストレージにアクセスする場合もあります。そのため、最近、RESTApiUpstashを有効にしました。
これで、次を使用してUpstashRedisデータベースにアクセスできます。
- CloudflareワーカーのUpstashRestAPI
- コマンドラインターミナルのredis-cli
- その特定のプログラミング言語のredisクライアント
connect
をクリックしてください いくつかのサンプルコードスニペットとサンプルコマンドについては、データベースの詳細ページのボタンをクリックしてください。
Cloudflareワーカーを使用して小さなアプリケーションを作成し、Upstash RedisRestAPIを一緒に探索してみましょう。
Redisを信頼できる情報源として使用するCloudflareワーカーでのIP許可/拒否。
- サーバーレスRedisデータベース(Upstashコンソールから作成できます)
- CloudflareアカウントまたはCFPlaygroundを使用できます
- JavaScriptの基本的な知識
- CloudflareWorkersの基本的な知識
:::noteSelectグローバルデータベース Upstashデータベースの作成中。グローバルデータベースは、データを複数のリージョンに複製して、エッジ関数からのレイテンシーを削減します。:::
Cloudflareワーカーを作成してリクエストをインターセプトしましょう。ワーカーを作成すると、サンプルコードが自動的に付属します。
訪問者のIPアドレスを取得しましょう:
async function handleRequest(request) {
const ip = request.headers.get("cf-connecting-ip");
return new Response(ip);
}
ヘッダーから訪問者のIPアドレスを取得することが可能です。次に、このIPアドレスが許可リストに含まれているかどうかを確認します。単一のRESTAPI呼び出しを行い、コードを改善しましょう。
async function handleRequest(request) {
const ip = request.headers.get("cf-connecting-ip");
res = await fetch(
"https://YOUR_DATABASE_ENDPOINT/sismember/allowed-set/" +
ip +
"?_token=YOUR_REST_API_TOKEN"
);
if ((await res.text()).includes("1")) {
return new Response(ip + " is allowed.");
}
return new Response(ip + " is not allowed.");
}
次に、UpstashRedisサーバーにRESTAPI呼び出しを行い、IPアドレスがリストに含まれているかどうかを確認します。結果に「1」が含まれている場合はリストに含まれていることを意味し、含まれていない場合は含まれていません。
次のコマンドでredis-cliを使用してRedisセットを更新できます:
sadd allowed-set $IP_ADDRESS
これで、RESTAPIを使用してRedisサーバーインスタンスにアクセスできるようになりました。RESTAPIを使用してほぼすべてのコマンドをサポートしています。詳細については、ドキュメントをご覧ください。CloudflareKVストレージを使用すると、KVディクショナリAPIのみにバインドされ、サードパーティアプリケーションからCloudflare WorkersKVにアクセスするのは簡単ではありません。 cli。また、Upstashでは、RESTAPIを使用してRedisデータベースにアクセスできます。
この単純なアプリケーションは、Cloudflareワーカーの一種のセキュリティガードに拡張できます。ユーザーはRedisデータベースの構成値を変更でき、CloudflareWorkerはRedisから構成を読み取ることができます。
-
エッジキャッシングを使用した5ミリ秒のグローバルRedisレイテンシ
データベースとクライアントが同じリージョンにある場合、Redisを使用すると1ミリ秒のレイテンシーが簡単になります。ただし、クライアントをグローバルに分散させたい場合は、遅延が100ミリ秒を超えて増加します。これを克服するためにEdgeCachingを構築しました。 エッジキャッシング エッジキャッシングを使用すると、REST応答は、CDNと同様に、世界中のエッジロケーションにキャッシュされます。エッジキャッシングが有効になっている場合、平均で5msのグローバルレイテンシが見られます。 10の異なるリージョンにあるクライアントからのレイテンシー数を記録するベンチマークアプリケーションを参照し
-
CloudflareワーカーとのRedis@Edge
エッジでのコンピューティングは、近年最もエキサイティングな機能の1つです。 CDNを使用すると、ファイルをユーザーに近づけることができます。エッジコンピューティングを使用すると、アプリケーションをユーザーの近くで実行できます。これは、開発者がグローバルに分散されたパフォーマンスの高いアプリケーションを構築するのに役立ちます。 Cloudflare Workersは、現在この分野の主要製品です。コールドスタートのないサーバーレス処理環境を提供します。 Cloudflareのグローバルネットワークを活用して、アプリケーションのレイテンシーを最小限に抑えます。関数はJavascript、Rust、