SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Azure SQL Database の DoSGuard の情報について

leave a comment

Azure SQL Database には、標準で「DoSGuard」という、サービス拒否 (Denial of Service: DoS) 攻撃を軽減する仕組みが組み込まれています。

機能の ON/OFF の制御はないため、既定で動作する機能となりますが、この DoSGuard についての情報と基本的な動作をまとめておきたいと思います。

DoSGuard についてのドキュメント

DoSGuard についてのドキュメントを確認してみたのですが、次のドキュメントが MS から公開されているドキュメントとなりそうでした。

基本的な動作仕様としては、DoSGuard に記載されている次の挙動となります。

SQL Database ゲートウェイ サービスである DosGuard は、サービス拒否 (DoS) 攻撃を軽減します。 DoSGuard は、IP アドレスからの失敗したログインを積極的に追跡します。 一定の期間内に特定の IP アドレスから失敗したログインが複数回ある場合、その IP アドレスは、事前に定義された期間、サービス内のすべてのリソースにアクセスできなくなります。

特定の IP アドレスから複数回連続して、ログインが失敗した場合に DoSGuard によるログイン制御の対象となることが記載されています。

SQL Database で接続エラーのトラブルシューティングをする際に確認するシステムビューとしては次の情報があります。

これらのシステムビューの説明として次の記載があります。

  • DoSGuard を介して IP アドレスがブロックされている場合、その IP アドレスからの接続試行イベントを収集することはできず、このビューには表示されません。

DoSGuard により、接続がブロックされている場合はこれらのシステムビューに情報は表示されず「DoSGuard で接続がブロックされたか?」については現状は SR で問い合わせて確認をする以外、方法としてはなさそうな雰囲気があります。

 

DoSGuard 発生の事例

DoSGuard 発生の事例としては、次の Answers の情報が参考となります。

この事例は、パスワード変更をトリガーとして、ログインの失敗が連続して発生したため、DoSGuard の対象となった事例となります。

DoSGuard は「接続の失敗」をトリガーとして、接続元の IP のブロックを行うようで、次のようなケースで発動する可能性があります。

  • 存在しないユーザーを使用
  • ユーザーは存在するがパスワードに誤りがある
  • CONNECT 権限が設定されていないユーザーを使用

このようなケースでは「接続の失敗」が発生するため DoSGuard がトリガーされる可能性が高くなります。

「データベースのオブジェクトに対して権限が不足しており操作ができない」というようなケースでは、接続自体は正常に完了していますので、この場合は DoSGuard の対象にはならないようでした。

 

DoSGuard の発生とブロックが拒否される時間

DoSGuard がどの程度の接続の失敗で発生するかについては公式のドキュメントはありませんが、「14 回失敗 / 8 秒」程度、連続して接続に失敗した場合で DoSGuard による接続の失敗が発生していました。

DoSGuard が発生すると、接続が失敗していた IP アドレスから 5 分間程度接続がブロックされていました。

以下のログは正常に接続ができる処理を連続して実行した状態とし、その裏で連続した接続の失敗を発生させたものとなります。

2025-11-04 11:55:18:Success
2025-11-04 11:55:18:Success
2025-11-04 11:55:19:Success
2025-11-04 11:55:19:Exception calling "Open" with "0" argument(s): "Login failed for user 'user_xx'."
2025-11-04 11:55:20:Exception calling "Open" with "0" argument(s): "Login failed for user 'user_xx'."
- 省略 - 
2025-11-04 12:00:18:Exception calling "Open" with "0" argument(s): "Login failed for user 'user_xx'."
2025-11-04 12:00:19:Exception calling "Open" with "0" argument(s): "Login failed for user 'user_xx'."
2025-11-04 12:00:19:Success
2025-11-04 12:00:20:Success
2025-11-04 12:00:20:Success

 

成功していた接続が、DoSGuard によりブロックされ、5 分間 (11:55:19~12:00:19) ブロックされ、その後接続できなかった状態が自動的に解決されています。

DoSGuard は「接続が連続して失敗していた IP アドレスからの接続をブロック」しますので、他の IP からは正常に接続することが可能です。

 

DoSGuard の緩和

DoSGuard の緩和については Connections to the database failing with error: ‘TCP Provider: No connection could be made because the target machine actively refused it. に記載されている次の情報が参考となります。

You cannot disable DosGuard, but if It is being triggered by a client error that you cannot control, you can suppress DosGuard for a given client IP by explicitly adding the IP to the Azure SQL Server firewall rules or, when using Service Endpoints, adding the subnet explicitly in the firewall.

公式のドキュメントに記載されていないのですが、DoSGuard は SQL Database のファイアウォールの設定で緩和させることができるようです。

次の方法では緩和させることができているように見えました。

  • 「ファイアウォール規則」で許可された IP
  • 「プライベート エンドポイント」経由でのアクセス
  • 「仮想ネットワーク ルール」(サービス エンドポイント経由でのリソースアクセス) を有効化したサブネットからのアクセス

「Azure サービスおよびリソースにこのサーバーへのアクセスを許可する」では、DosGuard の緩和にはならないようで、この設定で SQL Database への接続を許可している場合は、DoSGuard の対象となっていました。

「ファイアウォール規則」で許可された IP で DoSGuard の緩和になるのは、DosGuard のテストを実施する際には気を付けておいたほうが良いかと思います。(許可されている IP で接続の失敗を連続して発生させても DoSGuard によるブロックが発生しないケースがあります)

Share

Written by Masayuki.Ozawa

11月 5th, 2025 at 7:08 pm

Posted in SQL Database

Tagged with

Leave a Reply