Amazon Web Services ブログ

データベースアクティビティストリームを使用して Amazon RDS for SQL Server を監査する

Amazon Relational Database Service (Amazon RDS) for SQL Server は、データベースアクティビティストリームをサポートするようになり、リレーショナルデータベース内のデータベースアクティビティをほぼリアルタイムでストリーム配信できるようになりました。データベースを内部および外部の脅威から保護し、コンプライアンスや規制要件を満たすために、データベースアクティビティストリームをサードパーティのデータベースアクティビティ監視ツールと簡単に統合して、データベースアクティビティを監視および監査できます。ログイン失敗などのデータベースアクティビティは、暗号化されたデータストリームに非同期的にプッシュされ、Amazon Kinesis Data Streams を使用してデータベースインスタンスにプロビジョニングされます。

この投稿では、Amazon RDS for SQL Server で実行されているデータベースアクティビティのほぼリアルタイムのデータストリームのデータベースアクティビティストリームを有効にする方法を説明します。データベースアクティビティストリームを有効にすると、データベース内のアクティビティを監視して監査用のアラームを設定できます。

ソリューション概要

ソリューションを実装するには、以下の大まかな手順を実行します。

  1. データベースアクティビティストリーム用の AWS Key Management Service (AWS KMS) キーを作成します。
  2. Amazon RDS for SQL Server にサンプルデータベースを作成します。
  3. サーバーとデータベースの監査仕様を作成します。
  4. データベースアクティビティストリームを開始します。
  5. データベースアクティビティを分析します。
  6. ログを保存する Amazon Simple Storage Service (Amazon S3) バケットを作成します。
  7. S3 バケットにログを保存するように Amazon Kinesis Data Firehose のデリバリーストリームを設定します。

次の図は、ソリューションアーキテクチャを示しています。

前提条件

Amazon RDS for SQL Server では、データベースアクティビティストリームには次の要件があります。

  • データベースアクティビティストリームでサポートされている DB インスタンスクラス
  • サポートされている SQL Server バージョン (SQL Server 2016 以降、すべてのエディション)
  • AWS キーマネジメントサービス (AWS KMS) のカスタマー管理型のキー

データベースアクティビティストリーム用の KMS キーの作成

データベースアクティビティストリームには、記録されたデータベースアクティビティを暗号化および復号化するために管理する KMS キーが必要です。データベースアクティビティストリーミングにはデフォルトの Amazon RDS KMS キーは使用できません。カスタマー管理型の KMS キーを新たに作成する必要があります。詳細については、「キーの作成」を参照してください。

  1. AWS KMS コンソールで、[キーの作成] を選択します。
  2. キータイプには [対称] を選択します。
  3. [キーの使用方法] で [暗号化および復号化] を選択します。
  4. [次へ] を選択します。
  5. ラベルを追加」セクションの「エイリアス」で、キーの名前を入力します。
  6. [説明] には、次のようなキーの説明を入力します。
    Customer managed Key for Amazon RDS for SQL Server Database Activity Streaming (DAS)
  7. [次へ] を選択します。
  8. キーの管理アクセス許可を定義」で、AWS KMS API を通じてこのキーを管理できる AWS Identity and Access Management (IAM) ユーザーとロールを選択します。
  9. [次へ] を選択します。
  10. キーの使用アクセス許可を定義」セクションで、キーを管理する IAM ユーザーまたはロールを選択します。
  11. [次へ] を選択します。
  12. キーポリシーを確認し、[完了] を選択します。

Amazon RDS for SQL Server にサンプルデータベースを作成する

最初にサンプルデータベース TestDB を作成し、次にテーブル TestTable を作成します。以下のステップを完了してください。

  1. SQL Server Management Studio (SSMS) を開きます。
  2. RDS for SQL Server データベースインスタンスに接続します。
  3. [新しいクエリ] を選択します。
  4. 次のクエリを入力し、[実行] を選択します。
CREATE DATABASE testDB
Go
Use testDB
Go
CREATE TABLE [testDB].[dbo].[TestTable](
textA varchar (6000),
 textB varchar (6000)
)

サーバーレベル監査の仕様の変更とデータベース監査の仕様の作成

デフォルトでは、Amazon RDS 監査仕様は失敗したログインを追跡します。そこで、監査で成功したログイン情報を収集し、すべてのログイン試行を追跡できるようにしましょう。

まず、サーバーレベル監査の仕様から始めましょう。

  1. SSMS では、[新しいクエリ] を選択します。
  2. 次のクエリを入力し、[実行] を選択します。
    ( SSMS で [セキュリティ] → [サーバー監査の仕様] に RDS_DAS_SERVER_AUDIT_SPEC が作成されているのでダブルクリックして内容を確認します。)

    USE [master]
    GO
    
    ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC]
    WITH (STATE = OFF)
    
    ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC]
    ADD (SUCCESSFUL_LOGIN_GROUP)
    WITH (STATE = ON)
    GO

データベースレベルの監査では、テストテーブルの SELECT や INSERT などの DML ステートメントを監査します。

  1. [新規クエリ] を選択します。
  2. 次のクエリを入力し、[実行] を選択します。
    (SSMS の testDB の [セキュリティ] → [データベース監査の仕様] に RDS_DAS_DA_testDB が作成されているのでダブルクリックして内容を確認します。)

    USE [testDB]
    Go
    CREATE DATABASE AUDIT SPECIFICATION [RDS_DAS_DB_testDB]
    FOR SERVER AUDIT [RDS_DAS_AUDIT]
    ADD (SELECT ON OBJECT::[dbo].[TestTable] BY [public]),
    ADD (INSERT ON OBJECT::[dbo].[TestTable] BY [public])
    WITH (STATE = ON)
    Go

仕様を設定したら、データベースアクティビティストリームを開始しましょう。

データベースアクティビティストリームを開始する

Amazon RDS for SQL Server でデータベースアクティビティストリームを開始するには、以下のステップを実行します。

  1. Amazon RDS コンソールのナビゲーションペインで、[データベース] を選択します。
  2. アクティビティストリームを開始する RDS for SQL Server データベースインスタンスを選択します。
  3. アクション」メニューで、[データベースアクティビティストリームを開始] を選択します。
  4. AWS KMS キーには、前に作成した KMS キーを選択します。
  5. 「スケジュール」セクションで、[今すぐ] を選択します。
  6. [データベースアクティビティストリームを開始] を選択します。

この機能を有効にしても、ダウンタイムや再起動は必要ありません。

  1. [データベース] ページで [アクティビティストリームを設定中] から [使用可能] へのステータスの変化を監視します。
  2. Kinesis Data Streams コンソールに移動し、データストリームのステータスが [アクティブ] であることを確認します。

Kinesis データストリームのサーバー側の暗号化は無効のままにしておく必要があることに注意してください。暗号化を有効にすると、データベースのアクティビティストリームに直接影響します。

Kinesis クライアントアプリケーションを使用してデータベースアクティビティストリームを分析する

データベースのアクティビティを記録するために、いくつかの INSERT ステートメントと SELECT ステートメントを実行してみましょう。

  1. SSMS では、[新規クエリ] を選択します。
  2. 次のクエリを入力し、[実行] を選択します。
    USE [testDB]
    Go
    INSERT INTO [testDB].[dbo].[TestTable]
    VALUES ('Bob', 'Johnson');
    INSERT INTO [testDB].[dbo].[TestTable]
    VALUES ('Jinnie', 'Johnson');
    INSERT INTO [testDB].[dbo].[TestTable]
    VALUES ('Rob', 'Brown');
    
    select * from [testDB].[dbo].[TestTable]

Kinesis データストリームから監査データを読み取るには、前に作成したのと同じ KMS キーを使用してデータを復号化する必要があります。

以下のサンプル出力では、Kinesis クライアントライブラリ for Java を使用して Kinesis データストリームからデータを抽出し、監査レコードとそのフィールドを表示しています。

{
  "type": "DatabaseActivityMonitoringRecord",
  "clusterId": "",
  "instanceId": "db- HAFFQILMCDWKPXURN67M5TQFXY",
  "databaseActivityEventList": [
    {
      "class ": "TABLE",
      "clientApplication": "Microsoft SQL Server Management Studio - Query",
      "command": "INSERT",
      "commandText": "INSERT INTO [testDB].[dbo].[TestTable]\r\nVALUES ('Jinnie', 'Johnson')",
      "databaseName": "testDB",
      "dbProtocol": "SQLSERVER",
      "dbUserName": "admin",
      "endTime": null,
      "errorMessage": null,
      "exitCode": 1,
      "logTime": "2023-02-02 22:01:49.5283055+00",
      "netProtocol": null,
      "objectName": "TestTable",
      "objectType": "TABLE",
      "paramList": null,
      "pid": null,
      "remoteHost": " 10.145.xx.xx",
      "remotePort": null,
      "rowCount": 0,
      "serverHost": "172. 30.2.173",
      "serverType": "SQLSERVER",
      "serverVersion": "15.00.4236.7.v1.R1",
      "serviceName": "sqlserver-se",
      "sessionId": 75,
      "startTime": null,
      "statementId": "0xaffb4ff267b e9d45a3e7518553d73a40",
      "substatementId": 1,
      "transactionId": "22914 7",
      "type": "record",
      "engineNativeAuditFields": {}
    }
  ]
}

ストリームログを保存する S3 バケットを作成する

さらに、ログストリームを Amazon S3 にエクスポートして、サードパーティによる監視やアプリケーションの監査を行うことができます。

Amazon S3 コンソール、AWS SDK を使用してストリームログを保存する S3 バケットを作成できます。

または AWS コマンドラインインターフェイス (AWS CLI)。手順については、「バケットの作成」を参照してください。

レコードを長期間アーカイブして保存するには、S3 ライフサイクルを設定します。

Kinesis Data Firehose のデリバリーストリームの設定

データベースアクティビティストリームを有効にしたら、Firehose 配信ストリームを作成する必要があります。以下のステップを完了してください。

  1. Kinesis Data Firehose コンソールで、[配信ストリームを作成] を選択します。
  2. [ソース] には [Amazon Kinesis データストリーム] を選択します。
  3. 送信先には Amazon S3 を選択します。
  4. [配信ストリーム名] に、配信ストリームの名前を入力します。

監査仕様の変更

監査仕様を変更するには、次の手順を実行します。

  1. Amazon RDS コンソールのナビゲーションペインで、[データベース] を選択して DB インスタンスのリストを表示します。
  2. RDS for SQL Server インスタンスを選択します。
  3. アクション」メニューで、[データベースアクティビティストリームの変更] を選択します。
  4. [ロック解除済] を選択し、[DB アクティビティストリームを変更] を選択します。
  5. RDS for SQL Server インスタンスの監査仕様を必要に応じて変更します。
  6. 変更が完了したら、前のステップを繰り返して [ロック済み] を選択します。

データベースアクティビティストリームを停止する

Amazon RDS for SQL Server のデータベースアクティビティストリームを停止するには、以下のステップを実行します。

  1. Amazon RDS コンソールのナビゲーションペインで、[データベース] を選択して DB インスタンスのリストを表示します。
  2. RDS for SQL Server インスタンスを選択します。
  3. [アクション] メニューで [データベースアクティビティストリームを停止] を選択します。
  4. [今すぐ] を選択します。

データベースアクティビティストリームが停止していることを確認するメッセージが表示されます。

  1. データベースの状態が [アクティビティストリームを設定中] から [利用可能] に変わることを確認します。

結論

この投稿では、データベース監査要件を満たすように RDS for SQL Server インスタンスでデータベースアクティビティストリームを設定する手順を説明しました。監視や警告のために監査データを視覚化するさまざまな方法について説明しました。この機能は、データベースオブジェクトに対して行われたユーザーアクティビティを監視して記録するのに役立ちます。Amazon RDS for SQL Server でこの機能を使用する前に、監査要件を確認し、パフォーマンスへの影響と追跡するアクティビティの種類を検討し、コンプライアンス基準を遵守することをお勧めします。


著者について

Vikas Babu Gali は、アマゾンウェブサービスのマイクロソフトワークロードを専門とするシニアスペシャリストソリューションアーキテクトです。インド出身のVikasは、クリケットをプレーしたり、家族や友人と屋外で過ごすことを楽しんでいます。

Sudhir Amin は、アマゾンウェブサービスのデータベーススペシャリストソリューションアーキテクトです。ニューヨークを拠点に、さまざまな業種の企業顧客にアーキテクチャに関するガイダンスと技術支援を提供し、クラウドの導入を加速させています。彼はスヌーカー、ボクシングやUFCなどの格闘技の大ファンであり、野生生物保護区が豊富な国を旅して世界で最も雄大な動物を間近で見ることが大好きです。

 

翻訳はソリューションアーキテクトの Yoshinori Sawada が担当しました。原文はこちらです。