このページでは、SQL Server Audit の機能を使用して Cloud SQL でデータベースの監査を行う方法について説明します。
概要
Cloud SQL では、SQL Server Audit の機能を使用して次の処理を行うことができます。
- サーバー監査の仕様を作成する
- サーバーレベルとデータベース レベルでイベントの追跡とロギングを行う
SQL Server Audit の機能の詳細については、SQL Server Audit(データベース エンジン)をご覧ください。
始める前に
データベースの監査を有効にする前に、このセクションの前提条件を確認してください。
監査ファイル用の Cloud Storage バケット
監査ファイル(監査ログ)は、Cloud Storage バケットのロケーションにアップロードされます。このため、Google Cloud アカウントが所有するバケットの作成が必要になる場合があります。
別のアカウントが所有するバケット ロケーションを使用することもできます。監査を有効にしたときに、必要な権限があれば roles/storage.objectAdmin
ロールが自動的に付与されます。これにより、監査ファイルを特定のサービス アカウントのバケット ロケーションにアップロードできます。必要な権限がない場合は、後でサービス アカウントに付与する必要があります。
監査の有効化に必要なユーザー
監査を有効にして監査仕様を作成するには、デフォルトの sqlserver
ユーザーが必要です。Cloud SQL for SQL Server インスタンスを作成したときに、デフォルトの sqlserver
ユーザーが作成されます。
監査を有効にする
監査を有効にするには、Cloud Storage のロケーションが必要です。以下のものは省略可能です。
- インスタンスのログの保持期間
- アップロード間隔(アップロードの頻度)
コンソール
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [編集] をクリックします。
- [インスタンスのカスタマイズ] セクションで、[フラグとパラメータ] をクリックします。
- [SQL Server Audit を有効にする] の横にあるチェックボックスをオンにします。
- 監査ファイルのアップロード先となる Cloud Storage バケットを指定します。
- [詳細オプション] をクリックします。
- 必要に応じて、ログの保持期間を日数で指定します(1~7 日)。デフォルトは 7 日です。
- 必要に応じて、ログ(監査ファイル)をアップロードする頻度を分単位(1~720 分)で指定します。デフォルトは 10 分です。
- [保存] をクリックして変更を適用します。
gcloud
次のコマンドで監査を有効にします。
gcloud sql instances patch INSTANCE_NAME --audit-bucket-path=gs://my-bucket --audit-retention-interval=24h --audit-upload-interval=10m
次の表に、このオペレーションの gcloud
パラメータの概要を示します。
パラメータ | 説明 | 使用できる値 | デフォルト値 |
--audit-bucket-path |
必須。監査ファイルをアップロードする Cloud Storage バケットの場所。 | 監査が無効になっている場合は空です。それ以外の場合は、gs:// で始まるバケットパスです。 |
空(デフォルトで監査が無効になっているため) |
--audit-retention-interval |
省略可。ディスク上に監査ログを保持する日数。 | 1~7 日。日数のみ指定可能。 | 7 日。 |
--audit-upload-interval |
省略可。監査ログ(監査ファイル)のアップロード頻度。 | 1~720 分。 | 10 分。 |
REST v1
REST API を使用すると、インスタンスの監査を有効にできます。次のリクエスト プロトタイプに示すように、Cloud Storage バケット、監査ファイルの保持期間(日数)、監査ファイルのアップロード頻度を指定できます。バケットのロケーションは必須です。詳細については、SqlServerAuditConfig をご覧ください。
{ "databaseVersion":"database-version", "name":"instance-id", "region":"region", "rootPassword":"password", "settings":{ "tier":"machine-type", "sqlServerAuditConfig":{ "bucket":"gs://mybucket", "retentionInterval":"24h", "uploadInterval":"10m" } } }
REST v1beta4
REST API を使用すると、インスタンスの監査を有効にできます。次のリクエスト プロトタイプに示すように、Cloud Storage バケット、監査ファイルの保持期間(日数)、監査ファイルのアップロード頻度を指定できます。バケットのロケーションは必須です。詳細については、SqlServerAuditConfig をご覧ください。
{ "databaseVersion":"database-version", "name":"instance-id", "region":"region", "rootPassword":"password", "settings":{ "tier":"machine-type", "sqlServerAuditConfig":{ "bucket":"gs://mybucket", "retentionInterval":"24h", "uploadInterval":"10m" } } }
監査を無効にする
このセクションでは、監査を無効にするオプションについて説明します。監査を無効にすると、すべての監査ファイルがインスタンスから削除されます(まだアップロードされていないファイルも削除されます)。また、すべてのサーバー監査が無効になります。監査を再開するには、再度有効にする必要があります。保持期間の設定によっては、Cloud Storage バケットにアップロードされた監査ログがバケットに保持される場合があります。
監査を無効にするオプションは次のとおりです。
コンソール
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [編集] をクリックします。
- [インスタンスのカスタマイズ] セクションで、[フラグとパラメータ] をクリックします。
- [SQL Server Audit を有効にする] の横にあるチェックボックスをオフにします。
- [保存] をクリックして変更を適用します。
gcloud
次のコマンドを使用すると、監査が無効になります(このコマンドでは --audit-bucket-path
パラメータの値が省略されています)。
gcloud sql instances patch INSTANCE_NAME --audit-bucket-path=
REST v1
以下に、監査を無効にするリクエストのプロトタイプを示します。ここでは、sqlServerAuditConfig
オブジェクトのフィールドが省略されています。
{ "databaseVersion":"database-version", "name":"instance-id", "region":"region", "rootPassword":"password", "settings":{ "tier":"machine-type", "sqlServerAuditConfig":{ } } }
REST v1beta4
以下に、監査を無効にするリクエストのプロトタイプを示します。ここでは、sqlServerAuditConfig
オブジェクトのフィールドが省略されています。
{ "databaseVersion":"database-version", "name":"instance-id", "region":"region", "rootPassword":"password", "settings":{ "tier":"machine-type", "sqlServerAuditConfig":{ } } }
監査ファイルの自動アップロード
監査を有効にすると、生成された監査ファイルが指定の Cloud Storage バケットに自動的にアップロードされます。
構成された保持期間(間隔)が経過するまでは、生成された監査ファイルもインスタンスと一緒に保存されます。この期間が経過すると、監査ファイルは完全に削除されます(アップロードできなかったファイルも削除されます)。
サーバー監査の作成
監査を有効にすると、デフォルトの sqlserver
ユーザーにはサーバー監査の作成、変更、削除を行う権限が付与されます。
新しいサーバー監査を定義するには、CREATE SERVER AUDIT コマンドを使用します。サーバー監査は、SQL Server Management Studio(SSMS)のユーザー インターフェースで作成することもできます。
次のカテゴリのパラメータは、すべてのサーバー監査に適用されます。
パラメータのカテゴリ | 使用できる値 |
監査ログの失敗 | 続行または失敗 |
監査先 | ファイル |
パス | /var/opt/mssql/audit
|
最大ファイルサイズ | 2~50 MB |
最大ロールオーバー ファイル | 未構成にする必要があります。 |
最大ファイル数 | 未構成にする必要があります。 |
ディスク容量を予約する | オフ |
監査情報の読み取り
インスタンスからの監査情報の読み取り
サーバー監査で作成された監査ログファイルからデータを取得するには、msdb.dbo.gcloudsql_fn_get_audit_file
というストアド プロシージャを使用します。msdb.dbo.gcloudsql_fn_get_audit_file
プロシージャは、sys.fn_get_audit_file
関数と同じパラメータを受け入れます。
このストアド プロシージャの使用方法については、sys.fn_get_audit_file
をご覧ください。
以下に、msdb.dbo.gcloudsql_fn_get_audit_file
プロシージャを使用して監査データを取得する例を示します。
SELECT event_time, statement FROM msdb.dbo.gcloudsql_fn_get_audit_file('/var/opt/mssql/audit/*', NULL, NULL) WHERE statement LIKE '%INSERT%'
バケットからの監査情報の読み取り
Cloud Storage バケットから監査情報を読み取るには、バケットから SQL Server インスタンスにファイルをダウンロードします。この SQL Server インスタンスは次のいずれかです。
- Compute Engine Windows インスタンス
- Compute Engine Linux インスタンス
- SQL Server を実行している別の種類のインスタンス
バケットの監査ファイルは、そのインスタンスにアクセスできる場所(ローカル ディスクなど)に転送する必要があります。監査ファイルから情報を取得するには、serveradmin 固定サーバーロールのメンバーを使用して sys.fn_get_audit_file
関数を実行します。たとえば、Windows インスタンスから監査ファイルを D:\Audit
に転送した場合は、次のようなコマンドを使用できます。
SELECT event_time, statement FROM sys.fn_get_audit_file('D:\Audit\*.*', NULL, NULL) WHERE statement LIKE '%INSERT%'
モニタリング指標
監査関連のオペレーションは、Metrics Explorer で Cloud SQL 指標の一部としてモニタリングできます。
- database/sqlserver/audits_upload_countこの指標は、監査ファイルのアップロードの成功と失敗の合計回数を示します。この指標をチェックして、アップロードが成功したかどうかを確認します。
- database/sqlserver/audits_sizeこの指標は、測定時点でインスタンスに保存されている監査ファイルのディスク容量を示します。この指標は、インスタンスに存在する監査ファイルの合計サイズ(バイト単位)を示します。
ベスト プラクティス
- 大きなファイルをリージョン間で転送しないようにするには、次の点を考慮してください。
- マルチリージョンの Cloud Storage バケットを作成する
- インスタンスと同じリージョンに宛先の Cloud Storage バケットを設定する
- SQL Server Audit の機能を使用する前に、ストレージの自動増量を有効にすることを検討してください。監査ファイルのサイズと保持期間によっては、膨大なディスク容量が必要になる場合があります。
- 監査を有効にした後、インスタンスが Cloud Storage バケットに監査ファイルをアップロードできることを確認します。監査を設定したリクエスト元に、Cloud Storage バケットにファイルをアップロードするための権限がない場合は、権限が自動的に付与されません。
- 指標ベースのアラート ポリシーを設定して、アップロードの失敗と過剰なディスク使用量に関する通知を受信します。
- 過剰な数の監査ログファイルが極端に長い期間保持されないように、Cloud Storage バケットにデータ保持ポリシーを設定してください。