監査ログの保管と分析

監査ログをアーカイブすると、アクティブ監査ログはアーカイブ・ディレクトリーに移され、サーバーは新しいアクティブ監査ログの書き込みを開始します。 後で、アーカイブ・ログから区切り文字で区切られているファイルにデータを抽出し、それらのファイルから Db2® データベース表にデータをロードして分析することができます。

監査ログの場所を構成すると、監査ログを大容量の高速ディスクに配置できます。複数メンバー・データベース環境 ( Db2 pureScale 環境やパーティション・データベース環境など) のメンバーごとに別々のディスクを用意するオプションもあります。 複数メンバー・データベース環境では、アクティブ監査ログのパスを、メンバーごとに固有のディレクトリーにすることができます。 メンバーごとに固有のディレクトリーを使用すると、各メンバーが別々のディスクに書き込みを行うため、ファイルの競合を防ぐのに役立ちます。

Windows オペレーティング・システムの場合、監査ログのデフォルト・パスは instance\security\auditdata であり、 Linux® および UNIX オペレーティング・システムの場合、監査ログのデフォルト・パスは instance/security/auditdataです。 デフォルトのロケーションを使用することを望まない場合は、別のディレクトリーを選択できます (代替のロケーションとして使用するディレクトリーがまだない場合は、ご使用のシステムに新規ディレクトリーを作成できます)。 アクティブ監査ログのロケーションとアーカイブされた監査ログのロケーションのパスを設定するには、次の例のように、datapath および archivepath パラメーターを指定した db2audit configure コマンドを使用します。
db2audit configure datapath /auditlog archivepath /auditarchive 
db2audit を使用して設定された監査ログの保管場所は、インスタンス内のすべてのデータベースに適用されます。
注: サーバー上に複数のインスタンスがある場合、各インスタンスにはそれぞれ別個のデータ・パスとアーカイブ・パスが必要です。

複数メンバー・データベース環境におけるアクティブ監査ログのパス (datapath)

複数メンバー・データベース環境では、各メンバーで同じアクティブ監査ログのロケーション (datapath パラメーターで設定される) を使用する必要があります。 これを実現する方法は 2 つあります。
  1. datapath パラメーターを指定する際に、データベース・メンバー式を使用します。 データベース・メンバー式を使用すると、監査ログ・ファイルのパスにメンバー番号を含めることができるため、結果的にデータベース・メンバーごとに異なるパスになります。
  2. すべてのメンバーで同一の共有ドライブを使用します。
データベース・メンバー式は、datapath パラメーターに指定する値の中のどの位置でも使用できます。 例えば、3 つのメンバーを持つ、データベース・メンバー番号が 10 のシステムで、次のコマンドを実行します。
db2audit configure datapath '/pathForNode $N'
次のパスが使用されます。
  • /pathForMember10
  • /pathForMember20
  • /pathForMember30
注: データベース・メンバー式を使用して、アーカイブ・ログ・ファイル・パス (archivepath パラメーター) を指定することはできません。

アクティブ監査ログのアーカイブ

db2audit ツールでは、システム管理者がインスタンス監査ログとデータベース監査ログの両方をアーカイブできるほか、アーカイブされているいずれかのタイプのログから監査データを抽出することもできます。

セキュリティー管理者、または監査ルーチンの EXECUTE 特権をセキュリティー管理者から付与されたユーザーは、SYSPROC.AUDIT_ARCHIVE ストアード・プロシージャーを実行することにより、アクティブ監査ログをアーカイブできます。 ログからデータを抽出して区切りファイルにロードするには、SYSPROC.AUDIT_DELIM_EXTRACT ストアード・プロシージャーを使用できます。

監査ルーチンを使用して監査ログをアーカイブおよび抽出するためには、以下のステップを実行します。
  1. アプリケーションがストアード・プロシージャー SYSPROC.AUDIT_ARCHIVE を使用してアクティブ監査ログのアーカイブを定期的に実行するように、スケジュールを作成します。
  2. どのアーカイブされたログ・ファイルについて調べるかを決めます。 SYSPROC.AUDIT_LIST_LOGS 表関数を使用して、アーカイブされた監査ログをすべてリストします。
  3. ログからデータを抽出して区切りファイルにロードするため、ファイル名を SYSPROC.AUDIT_DELIM_EXTRACT ストアード・プロシージャーにパラメーターとして渡します。
  4. 監査データを分析用の Db2 データベース表にロードします。
アーカイブされたログ・ファイルは、すぐに分析用の表にロードする必要はなく、将来の分析のために保管しておくことができます。 例えば、企業の監査が行われるときにしか閲覧する必要がないということもあるかもしれません。

アーカイブの途中で、アーカイブ・パスのディスク・スペースがいっぱいになってしまった、あるいはアーカイブ・パスが存在しない、などの問題が発生した場合は、アーカイブ・プロセスは失敗し、 監査ログ・データのパスに .bk という拡張子を持つ中間ログ・ファイルが生成されます (例えば db2audit.instance.log.0.20070508172043640941.bk)。 (アーカイブ・パスに十分なディスク・スペースを割り振ることによって、またはアーカイブ・パスを作成することによって) 問題が解決されたなら、この中間ログをアーカイブ・パスに移動させてください。 アーカイブ・パスに移動させた後は、この中間ログは正常にアーカイブされたログと同じ方法で扱うことができます。

複数メンバー・データベース環境におけるアクティブ監査ログのアーカイブ

複数メンバー・データベース環境では、インスタンスの実行中にアーカイブ・コマンドを発行すると、自動的にすべてのメンバーでアーカイブ・プロセスが実行されます。 アーカイブされたログ・ファイルの名前には、すべてのメンバーで同じタイム・スタンプが使用されます。 例えば、3 つのメンバーを持つ、データベース・メンバー番号が 10 のシステムで、次のコマンドを実行します。
db2audit archive to /auditarchive
すると、以下のファイルが作成されます。
  • /auditarchive/db2audit.log.10.timestamp
  • /auditarchive/db2audit.log.20.timestamp
  • /auditarchive/db2audit.log.30.timestamp
アーカイブ・コマンドが発行されたときにインスタンスが実行中でない場合は、以下のいずれかの方法によって、どのメンバーでアーカイブを実行するかを制御できます。
  • 現行メンバーのみのアーカイブを実行する場合は、db2audit コマンドに node オプションを使用します。
  • すべてのメンバーでアーカイブを実行する場合は、db2_all コマンドを使用します。
    以下に例を示します。
    db2_all db2audit archive node to /auditarchive
    これにより、コマンドが呼び出されるメンバーを示す DB2NODE 環境変数が設定されます。
あるいは別の方法として、各メンバー別に個々のアーカイブ・コマンドを発行することもできます。 以下に例を示します。
  • メンバー 10 で:
    db2audit archive node 10 to /auditarchive
  • メンバー 20 で:
    db2audit archive node 20 to /auditarchive
  • メンバー 30 で:
    db2audit archive node 30 to /auditarchive
注: インスタンスが実行されていない場合、アーカイブされた監査ログ・ファイル名のタイム・スタンプは、各メンバーで同じではありません。
注: アーカイブ・パスはすべてのメンバーで共有することをお勧めしますが、必須ではありません。
注: AUDIT_DELIM_EXTRACT ストアード・プロシージャーおよび AUDIT_LIST_LOGS 表関数は、現行 (コーディネーター) メンバーから可視のアーカイブ・ログ・ファイルにのみアクセスできます。

ログのアーカイブと表へのデータ抽出の例

監査データを確実にキャプチャーし、将来の使用に備えて保管しておくために、ある企業では、6 時間ごとに新しい監査ログを作成し、現行の監査ログを WORM ドライブにアーカイブする必要があります。 この企業では、セキュリティー管理者、または AUDIT_ARCHIVE ストアード・プロシージャーの EXECUTE 特権をセキュリティー管理者により付与されたユーザーによって 6 時間ごとに以下の SYSPROC.AUDIT_ARCHIVE ストアード・プロシージャーへの呼び出しが発行されるよう、スケジュールを立てています。 アーカイブされたログのパスはデフォルトのアーカイブ・パス /auditarchive で、アーカイブはすべてのメンバーで実行されます。
CALL SYSPROC.AUDIT_ARCHIVE( '/auditarchive', -2 )

セキュリティー手順の一環として、この企業は、監査データ内で注意を必要とする多くの疑わしい動作や許可されないアクティビティーを識別し、定義しています。 この企業は、1 つ以上の監査ログからすべてのデータを抽出し、それをリレーショナル表に置き、SQL 照会を使用してこれらのアクティビティーを探すことを希望しています。 監査する適切な区分を判別してあり、データベースや他のデータベース・オブジェクトには必要な監査ポリシーが関連付けられています。

例えば、SYSPROC.AUDIT_DELIM_EXTRACT ストアード・プロシージャーを呼び出し、デフォルトの区切り文字を使用して、2006 年 4 月のタイム・スタンプで作成されたすべてのメンバーのすべての区分について、アーカイブされた監査ログを抽出できます。
CALL SYSPROC.AUDIT_DELIM_EXTRACT(
     '', '', '/auditarchive',  'db2audit.%.200604%', '' ) 
別の例として、SYSPROC.AUDIT_DELIM_EXTRACT ストアード・プロシージャーを呼び出し、調べているタイム・スタンプが付いているファイルから、EXECUTE 区分の成功イベントについてのアーカイブされた監査レコードと、CHECKING 区分の失敗イベントについてのアーカイブされた監査レコードを抽出できます。
CALL SYSPROC.AUDIT_DELIM_EXTRACT( '', '', '/auditarchive', 
    'db2audit.%.20060419034937', 'category 
     execute status success, checking status failure );