こんにちは、ACS事業部の佐藤です。
今回はAzure SQL Databaseの監査ログを閉域化されたストレージアカウントへエクスポートする方法についてご紹介させていただきます。
結論から
Azure SQL Databaseの監査ログを閉域化されたストレージアカウントへエクスポートするにあたり、以下の設定を行う必要があります。
- Azure SQL Database の Azure SQL 監査 を有効にする
以上です。 エクスポートの手順自体は非常に簡単なことがお分かりいただけたかと思いますが、ここに至るまでの経緯およびAzure SQL 監査を有効化する際の注意点を紹介できればと思います。
Azure SQL 監査を利用するに至った経緯
一般に Azure リソースのログをエクスポートする際には、診断設定と呼ばれる機能を用いることが多いです。
著者は例に漏れず、Azure SQL Database の監査ログも診断設定を用いてエクスポートできると考えていました。
実際にAzure SQL Databaseの診断設定の画面には audit
というカテゴリグループを選択することで表示される SQL Security Audit Event
という監査ログと思しきカテゴリがあります。
しかし、SQL Security Audit Event
は正確には SQL Database の監査ログではありません。理由をご説明します。
まずはじめに 技術ドキュメント | Microsoft Learn にて SQLSecurityAuditEvent
を検索します。
※SQL Security Audit Event
ではなく SQLSecurityAuditEvent
としている理由は、文字列間の空白を削除することで一単語として扱われる結果、検索結果に関連性の高いドキュメントがヒットしやすくなるためです。
検索結果の最上部にログのリファレンスが表示されました。確認していきましょう。
Azure Synapse SQL Audit Log
との記載から、今回は Azure Synapse を利用しておりませんので、そもそもこのログ自体取得できないということが分かります。
ここで Azure SQL Database の監査ログに関して更に調査を進めた結果、Azure SQL 監査と呼ばれる機能によって Azure SQL Database の監査ログをエクスポートすることが可能であると判明しました。
Azure SQL 監査を有効化する際の注意点
本節では Azure SQL 監査を有効化し、閉域化されたストレージアカウントへ監査ログをエクスポートする際の注意点を紹介します。
ここで、SQL Database の監査ログのエクスポート先のストレージアカウントは以下の条件を満たすものとします。
- アクセス制御 (IAM):ストレージアカウントのスコープで何も付与されていない
- ネットワーク:選択した可能ネットワークとIPアドレスから有効
- ファイアウォール:クライアントIPアドレスのみ許可 (クライアントIPアドレスを許可しないと出力される監査ログを確認できないため)
- リソースインスタンス:なし
- 例外:チェックボックスを3つとも全て外す(デフォルトでは一番上のみチェックが入っている)
SQL Server と SQL Database それぞれに Azure SQL 監査の設定項目が存在する
それぞれの Azure SQL 監査の違いについて説明します。
SQL Server の Azure SQL 監査
こちらは SQL Server 上の (masterデータベース含む) 全ての SQL Database に対して監査ログのエクスポート先やリテンション期間を設定する機能になります。 メリットとしては、複数のデータベースの監査ログのエクスポート設定を1つの設定で管理できるため、手間が減る点が挙げられます。 一方、一括で設定を行うためデータベース個別に異なるエクスポート設定を行いたい場合には後述の SQL Database の Azure SQL 監査と併用する必要があります。
SQL Database の Azure SQL 監査
対して、こちらは SQL Database 個別での監査ログのエクスポート設定となります。 注意点としては2つ挙げられます。
- SQL Server の Azure SQL 監査の設定が有効化になっていた場合、その設定を上書きするのではなく重複する形で設定が為されることになる点です。つまり、収集するログが余分に増えるためコストへの影響が想定されます。
- masterデータベースに対するAzure SQL 監査の有効化が不可能である点です。masterデータベースの監査ログをエクスポートする手段は、現状 SQL Server の Azure SQL 監査を利用するしかありません。
以上の理由から、データベース単位でエクスポート設定を細かくチューニングしたいという要件が無い限りは SQL Server の Azure SQL 監査を利用することが推奨されます。
閉域化されたストレージアカウントへのエクスポートを設定する際、Azure SQL 監査を有効化した後に自動で変更される設定が存在する
大きく2つあります。
Azure SQL Server から ストレージアカウントへのストレージ BLOB データ共同作成者権限の付与
- Azure SQL 監査の有効化前
- Azure SQL 監査の有効化後
このように、(セキュリティの都合上、SQL Server名を隠しておりますが)ストレージアカウントへの権限がAzure SQL 監査を有効化した後に追加されることが確認できます。
注意点としては、Portal上でのみ管理する場合はあまり気にならないかもしれませんが、IaCで管理している場合はAzure SQL 監査を有効化しただけでは自動で上記の権限が付与されないため明示的に記述し、反映させる必要がある点です。
信頼されたサービスの一覧にあるAzureサービスがこのストレージアカウントにアクセスすることを許可します
の有効化
- Azure SQL 監査の有効化前
- Azure SQL 監査の有効化後
こちらも元々チェックの入っていなかった信頼されたサービスの一覧にあるAzureサービスがこのストレージアカウントにアクセスすることを許可します
にチェックが入っていることが確認できます。
注意点としては上の項目同様、IaC管理の際は明示的に有効化する旨を記載する必要がある点です。
おわりに
Azure SQL 監査の有効化によって、監査ログを簡単に取得することが出来ます。その一方で、自動的に他のリソースの構成を変更する点で診断設定と異なる挙動を取っているようにも見受けられる部分が多いとも言えます。 現状ではAzure SQL 監査の仕組みについて未検証であるため、今後調査が進み次第ご紹介できればと思います。
ACS事業部のご紹介
私達 ACS 事業部は Azure・AKS などのクラウドネイティブ技術を活用した内製化のご支援をしております。
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。