Spanner Omni の監査ロギング

Spanner Omni は、Spanner Omni デプロイ内の管理アクティビティとデータアクセスを記録する監査ログを書き込みます。

監査ログは、「誰が、どこで、いつ、何をしたのか」を把握するのに役立ちます。監査ログを使用して、セキュリティ、監査、コンプライアンスの各エンティティが Spanner Omni のデータとシステムをモニタリングし、脆弱性や外部データの不正使用の可能性を確認できるようにします。

始める前に

TLS または相互 TLS(mTLS)暗号化を使用して Spanner Omni デプロイを構成します。TLS または mTLS 暗号化なしでデプロイを作成すると、監査ログは生成されません。TLS または mTLS 暗号化を使用してデプロイを作成する手順については、以下をご覧ください。

監査ログの種類

Spanner Omni は、次のタイプの監査ログをサポートしています。

管理アクティビティ監査ログ

管理アクティビティ監査ログには、デプロイの構成やメタデータを変更する API 呼び出しが記録されます。たとえば、ユーザーがデータベースを作成すると、Spanner Omni は管理アクティビティ監査ログを書き込みます。

管理アクティビティ監査ログは、TLS と mTLS 暗号化で構成されたデプロイでデフォルトで生成されます。構成、除外、無効化はできません。

管理アクティビティ監査ログを書き込むメソッドのリストについては、権限タイプ別のメソッドをご覧ください。

データアクセス監査ログ

データアクセス監査ログには、デプロイの構成やメタデータを読み取る API 呼び出しと、ユーザーデータの作成、変更、読み取りを行う API 呼び出しが記録されます。たとえば、Spanner Omni は、ユーザーがデータベースを記述したり、SQL クエリを実行したり、データ操作言語(DML)ステートメントを実行したりすると、データアクセス監査ログを書き込みます。

データアクセス監査ログは、非常に大きくなる可能性があるため、デフォルトで無効になっています。データアクセス イベントを記録するには、明示的に有効にして構成します。データアクセス監査ログは、Google サポートで問題のトラブルシューティングを行う際に役立ちます。そのため、有効にすることをおすすめします。

これらのログを構成する手順については、データアクセス監査ログを構成するをご覧ください。データアクセス監査ログを書き込むメソッドのリストについては、権限タイプ別のメソッドをご覧ください。

システム イベント監査ログ

システム イベント監査ログは、ユーザーの直接的なアクションなしでシステムが Spanner Omni リソースの構成を変更したときに記録します。たとえば、Spanner Omni は、システムが新しく復元されたデータベースを自動的に最適化したり、スケジュールされたバックアップを作成したりすると、システム イベント監査ログを書き込みます。

システム イベント監査ログは、TLS と mTLS 暗号化で構成されたデプロイでデフォルトで生成されます。構成、除外、無効化はできません。

これらのログを生成するシステム イベントの詳細については、システム イベントをご覧ください。

データアクセス監査ログを構成する

データアクセス監査ログを有効にするには、Spanner Omni CLI または API を使用して、デプロイの Identity and Access Management(IAM)ポリシーを構成します。特定の権限タイプのロギングを有効にしたり、特定のユーザーをロギングから除外したりできます。

必要な権限

データアクセス監査ログを構成するには、spanner.instances.setIamPolicy 権限が必要です。

データアクセス監査ログの構成を表示するには、spanner.instances.getIamPolicy 権限が必要です。

権限の種類

API メソッドは IAM 権限をチェックし、各権限には関連付けられた権限タイプがあります。データアクセス監査ログを構成するときに、ロギングする権限タイプを指定します。権限タイプは次のように分類されます。

データアクセス権限タイプ:

  • ADMIN_READ: メタデータまたは構成情報を読み取る API メソッドを記録します。たとえば、データベースの説明などです。
  • DATA_READ: ユーザーデータを読み取る API メソッドを記録します。たとえば、SQL クエリの実行などです。
  • DATA_WRITE: ユーザーデータを書き込む API メソッドを記録します。たとえば、DML ステートメントの実行などです。

管理アクティビティ権限タイプ:

  • ADMIN_WRITE: メタデータまたは構成情報を書き込む API メソッド(データベースの作成など)でチェックされます。これらは管理アクティビティ監査ログを生成し、構成することはできません。

権限タイプの詳細については、Cloud Audit Logs のドキュメントの権限タイプをご覧ください。

Spanner Omni CLI を使用して構成する

Spanner Omni CLI を使用してデータアクセス監査ログを構成するには、有効にするログタイプと除外するメンバーを一覧表示する JSON ポリシー ファイルを作成し、ポリシーを適用します。

  1. policy.json という名前のポリシー ファイルを作成します。

    {
      "auditConfigs": [
        {
          "auditLogConfigs": [
            {
              "logType": "ADMIN_READ",
              "exemptedMembers": [
                "USER_NAME"
              ]
            },
            {
              "logType": "DATA_WRITE"
            },
            {
              "logType": "DATA_READ"
            }
          ],
          "service": "spanner.googleapis.com"
        }
      ]
    }
    
  2. spanner instances set-iam-policy コマンドを使用して、ポリシーを適用します。

    spanner instances set-iam-policy default policy.json
    

現在のデータアクセス監査ログの構成を表示するには、次のコマンドを実行します。

spanner instances get-iam-policy default

一般的な構成のユースケースの例については、Cloud Audit Logs のドキュメントのデータアクセス監査ログを構成するをご覧ください。

システム イベント

Spanner Omni は、Spanner のマネージド バージョンでサポートされているほとんどのシステム イベントのシステム イベント監査ログを生成します。詳細については、Spanner ドキュメントのシステム イベントをご覧ください。

Spanner Omni は、CreateScheduledBackup システム イベントと OptimizeRestoredDatabase システム イベントをサポートしています。ただし、Spanner Omni では自動スケーリングが利用できないため、Spanner Omni は AutoscaleInstance システム イベントをサポートしていません。

監査ログファイルと保持

Spanner Omni は、監査ログを Spanner Omni サーバーのローカル ファイル システムに書き込みます。

次のパスと命名規則を使用して、監査ログファイルを見つけます。 BASE_DIR/logs/PROCESS/audit.log.BUCKET.TIMESTAMP.PROCESS_ID

  • BASE_DIR: Spanner Omni デプロイの開始時に指定されたベース ディレクトリ。Kubernetes Deployment の場合、デフォルトは /spanner です。

  • PROCESS: Spanner Omni は、サーバーごとに複数のプロセス(serverzone_serviceszonal_zone_serviceszonal_serverbase_services など)を実行します。監査ログは、監査ログを生成したプロセスに対応するディレクトリに書き込まれます。

  • BUCKET: 管理アクティビティとシステム イベントの監査ログは required バケットに書き込まれ、データアクセスの監査ログは default バケットに書き込まれます。

  • TIMESTAMP: ファイルが作成されたときのタイムスタンプ。

  • PROCESS_ID: 監査ログを書き込むプロセスのプロセス ID。

Spanner Omni は、現在のファイルが 50 MiB を超えた場合、またはサーバー プロセスが再起動した場合に、新しい監査ログファイルを作成します。また、BASE_DIR/logs/PROCESS/audit.log.BUCKET から書き込み中の監査ログファイルへのシンボリック リンクも自動的に維持します。

ローカル監査ログファイルへのアクセスは、ファイル システムのアクセス制御リスト(ACL)によって制御されます。サーバーにログインしてこれらのファイルにアクセスする権限を持つユーザーは、監査ログを表示できます。

承認された担当者のみがログを表示できるように、Spanner Omni VM へのアクセスを制限することをおすすめします(たとえば、SSH アクセスを制限し、ファイル システム ACL を構成します)。長期保存、監査、コンプライアンスについては、ロギング エージェント(Fluentd など)を使用して監査ログを収集し、AWS CloudWatchGrafana LokiElasticsearchDatadogSplunkCloud Monitoring などの外部ロギング システムにエクスポートします。

ファイルの保持

Spanner Omni は、ローカル監査ログファイルに対してサイズベースと年齢ベースの両方の保持ポリシーを適用します。

  • サイズ上限: 監査ログファイルは、ディスク使用量の合計が 1 GB を超えるまで保持されます。ログ ディレクトリに別のディスクが使用されている場合、監査ログファイルにはそのディスクの合計容量の 25% の割り当てが割り当てられます。

  • 年齢制限: 監査ログファイルは、サイズ上限を超えない限り、最大 14 日間保持されます。

いずれかの上限に達すると、Spanner Omni は最も古いログファイルから削除します。監査ログを 14 日以上保持する必要がある場合は、外部ロギング システムにエクスポートします。

監査ログエントリの構造

Spanner Omni 監査ログエントリは JSON 形式で、Spanner と同じ構造定義を使用します。詳細については、Cloud Audit Logs のドキュメントの監査ログエントリの構造をご覧ください。

ログ名

Spanner のマルチテナント マネージド バージョンとは異なり、Spanner Omni は専用サーバーでシングルテナント デプロイとして実行されます。これらのサーバーには他のテナントやプロジェクトがないため、すべての監査ログエントリでプロジェクト ID default が使用されます。

projects/default/logs/cloudaudit.googleapis.com/activity
projects/default/logs/cloudaudit.googleapis.com/data_access
projects/default/logs/cloudaudit.googleapis.com/system_event

呼び出し元の ID

監査ログには、ログに記録されたオペレーションを実行したユーザーの ID が記録されます。呼び出し元の ID は、AuditLog オブジェクトの AuthenticationInfo フィールドに保存されます。

Spanner Omni では、呼び出し元の ID は、API 呼び出しを行った認証済みユーザーのユーザー名です。ユーザーの作成と管理については、認証と認可をご覧ください。

呼び出し元の IP アドレス

Spanner Omni は、監査ログに呼び出し元の IP アドレスを記録することをサポートしていません。

メソッド(権限タイプ別)

API メソッドを呼び出すと、Spanner Omni はメソッドの実行に必要な権限タイプに基づいて監査ログを生成します。ADMIN_READDATA_READDATA_WRITE の各権限を必要とするメソッドはデータアクセス監査ログを生成し、ADMIN_WRITE 権限を必要とするメソッドは管理アクティビティ監査ログを生成します。

Spanner Omni は、ほとんどの Cloud Spanner API メソッドをサポートしています。Spanner と Spanner Omni で共有されるメソッドの監査ロギング分類については、Spanner ドキュメントの権限タイプ別のメソッドをご覧ください。

また、Spanner Omni には、監査ログを生成する独自の API メソッドも導入されています。長時間実行オペレーション(LRO)としてマークされたメソッドは、通常、2 つの監査ログエントリを生成します。1 つはオペレーションの開始時、もう 1 つは終了時に生成されます。詳細については、Cloud Audit Logs のドキュメントの長時間実行オペレーションをご覧ください。

権限タイプ メソッド
ADMIN_READ google.spanner.omni.v1.OmniAdmin.GetLocation
google.spanner.omni.v1.OmniAdmin.ListLocation
google.spanner.omni.v1.OmniAdmin.GetLocationDistance
google.spanner.omni.v1.OmniAdmin.ListLocationDistance
google.spanner.omni.v1.OmniAdmin.GetZone
google.spanner.omni.v1.OmniAdmin.ListZones
google.spanner.omni.v1.OmniAdmin.GetServer
google.spanner.omni.v1.OmniAdmin.ListServers
google.spanner.omni.v1.OmniAdmin.GetDeployment
google.spanner.omni.v1.OmniAdmin.ListBackupDescriptors
google.spanner.omni.v1.OmniAdmin.GetExternalStorage
google.spanner.omni.v1.OmniAdmin.ListExternalStorages
google.spanner.omni.v1.OmniAdmin.GetIamPolicy
google.spanner.omni.v1.UsersService.GetUser
google.spanner.omni.v1.UsersService.ListUsers
google.spanner.omni.v1.UsersService.GetRole
google.spanner.omni.v1.UsersService.ListRoles
ADMIN_WRITE google.spanner.omni.v1.OmniAdmin.CreateLocation
google.spanner.omni.v1.OmniAdmin.DeleteLocation
google.spanner.omni.v1.OmniAdmin.CreateLocationDistance
google.spanner.omni.v1.OmniAdmin.UpdateLocationDistance
google.spanner.omni.v1.OmniAdmin.DeleteLocationDistance
google.spanner.omni.v1.OmniAdmin.CreateZone
google.spanner.omni.v1.OmniAdmin.DeleteZone
google.spanner.omni.v1.OmniAdmin.CreateServer
google.spanner.omni.v1.OmniAdmin.DeleteServer
google.spanner.omni.v1.OmniAdmin.CreateExternalStorage
google.spanner.omni.v1.OmniAdmin.DeleteExternalStorage
google.spanner.omni.v1.OmniAdmin.SetIamPolicy
google.spanner.omni.v1.OmniAdmin.ImportBackup(LRO)
google.spanner.omni.v1.UsersService.CreateUser
google.spanner.omni.v1.UsersService.DeleteUser
google.spanner.omni.v1.UsersService.UpdateUser
DATA_READ google.spanner.omni.v1.ImportExportService.ExportDatabase (LRO)
DATA_WRITE google.spanner.omni.v1.ImportExportService.ImportDatabase (LRO)

監査ログを生成しないメソッド

Spanner Omni では、Spanner と同じメソッドが監査ロギングから除外されます。これらのメソッドは、ログの生成と保存にかなりのコストがかかる大容量メソッドである、監査の価値が低い、別の監査ログまたはプラットフォーム ログでメソッドの範囲がすでにカバーされているなどの理由で除外されます。除外されるメソッドの完全な一覧については、Spanner ドキュメントの除外されるメソッドをご覧ください。

また、google.spanner.omni.v1.LoginService.Login メソッドは認証チェックと認可チェックの前に実行されるため、監査ログを生成しません。

処理期間

監査ログの処理期間フィールドには、監査ログの書き込み遅延ではなく、SQL クエリの実行時間など、API の処理期間が記録されます。詳細については、Spanner ドキュメントの処理時間をご覧ください。

Spanner のマネージド バージョンとの比較

Spanner Omni の監査ロギングは、Spanner とコアコンセプトと形式を共有していますが、ログの保存、構成、管理方法にはいくつかの重要な違いがあります。

相違点

  • ログの宛先: Spanner Omni は、監査ログを Cloud Logging にエクスポートするのではなく、Spanner Omni サーバーのローカル ファイル システムに直接書き込みます。

  • 構成: Spanner では、 Google Cloud コンソール、Google Cloud CLI、または Identity and Access Management API を使用して、プロジェクト レベルでデータアクセス監査ログを構成します。Spanner Omni では、Spanner Omni CLI または Spanner Omni API を使用してデータアクセス監査ログを構成します。

  • TLS と mTLS の暗号化: Spanner はデフォルトで TLS 暗号化を適用します。無効にすることはできません。Spanner Omni で、TLS または mTLS 暗号化なしでデプロイすることを選択した場合、監査ログは生成されません。

  • 保持: Spanner 監査ログは、Logging の保持設定に従って Logging に保持されます。Spanner Omni は、ローカル監査ログファイルを最大 14 日間、またはディスクサイズの上限に達するまで保持します。長期保存のためにログを外部システムにエクスポートする必要があります。

類似点

  • ログ形式: どちらのプロダクトも、標準の Google Cloud AuditLog 構造に従って JSON 形式で監査ログを書き込みます。

  • データアクセスの構成: どちらのプロダクトでも、権限タイプ(ADMIN_READDATA_READDATA_WRITE)別にデータアクセス監査ログをきめ細かく有効にできます。また、特定のユーザーをログ記録から除外することもできます。

次のステップ