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

CloudflareワーカーとUpstashRedisを使用してエッジでIP許可/拒否リストを実装する

Webサイトへのアクセスを特定のIPに制限するのが一般的です。この投稿では、エッジコンピューティングを使用してIP許可/拒否リストを実装する方法を示します。まずCloudflareワーカーを紹介します。

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ワーカーとUpstashRedisを使用してエッジでIP許可/拒否リストを実装する

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から構成を読み取ることができます。


  1. エッジキャッシングを使用した5ミリ秒のグローバルRedisレイテンシ

    データベースとクライアントが同じリージョンにある場合、Redisを使用すると1ミリ秒のレイテンシーが簡単になります。ただし、クライアントをグローバルに分散させたい場合は、遅延が100ミリ秒を超えて増加します。これを克服するためにEdgeCachingを構築しました。 エッジキャッシング エッジキャッシングを使用すると、REST応答は、CDNと同様に、世界中のエッジロケーションにキャッシュされます。エッジキャッシングが有効になっている場合、平均で5msのグローバルレイテンシが見られます。 10の異なるリージョンにあるクライアントからのレイテンシー数を記録するベンチマークアプリケーションを参照し

  2. CloudflareワーカーとのRedis@Edge

    エッジでのコンピューティングは、近年最もエキサイティングな機能の1つです。 CDNを使用すると、ファイルをユーザーに近づけることができます。エッジコンピューティングを使用すると、アプリケーションをユーザーの近くで実行できます。これは、開発者がグローバルに分散されたパフォーマンスの高いアプリケーションを構築するのに役立ちます。 Cloudflare Workersは、現在この分野の主要製品です。コールドスタートのないサーバーレス処理環境を提供します。 Cloudflareのグローバルネットワークを活用して、アプリケーションのレイテンシーを最小限に抑えます。関数はJavascript、Rust、