HTTPトリガーを使用してAzureの機能の下で、クライアントIPを取得するために、次のコードスニペットを使用することができます。
run.csx:詳細については
#r "System.Web"
using System.Web;
using System.Net;
public static HttpResponseMessage Run(HttpRequestMessage req, TraceWriter log)
{
var address = ((HttpContextWrapper)req.Properties["MS_HttpContext"]).Request.UserHostAddress;
log.Info($"Your client IP: {address}");
return req.CreateResponse(HttpStatusCode.OK, $"Your client IP: {address}");
}
、あなたは可能性このissueを参照してください。
私は、ユーザーが試みと次の日の数を超えたAPIへの呼び出しを行う場合は、再度、私は雲の中にタイマートリガーを実行しているキュー・ストレージからすべてのIPアドレスを取ることによって、クライアントのIPアドレスのブロックを解除することができ、その日のためにクライアントのIPアドレスをブロックすることができるように。
特定のIPのアクセスログを格納するためにテーブルストレージを使用することをお勧めします。 PartitionKey
列を日付に設定し、RowKey
をClientIP
またはClientIP + ApiName
に設定し、他の列(タイムスタンプ、TotalRequestsなど)を追加することもできます。また、ストレージテーブルの設計については、Azure Storage Table Design Guideを参照してください。
azure関数の場合、特定のIPの要求ログを読み取って特定のIPの合計要求数を更新するには、Storage table bindingsとTable Storage SDKを使用できます。さらに、ここには同様のブログがあります。hereを参照してください。
UPDATE:
次のようにして、 "MONITORING>診断ログ" の下で、ファイル・システムまたはBLOBストレージに格納するログを設定できます。
アプリケーションログ(ファイルシステム)の場合、ログはkudu:
アプリケーションロギングの
(ブロブ)、あなたはあなたのログを取得するためにStorage Explorerを活用できます。
あなたのIPに基づいてユーザをブロックしたい場合(動的IPアドレスのために非常に危険です)、このIPアドレスの最後の「オーバーフロー」アクセスを保存し、最後のアクセスが過去24時間であるかどうかを確認するだけです...保存するには、DocumentDB、CosmosDB、またはRedisCacheを使用できます。たぶんAzure Storageだが、私は以前のものと一緒に行くだろう。 – sebastian87