TerraformでGCPのAudit logを有効化する

# 概要

前回は、[GitHub ActionsとTerraformでGCP管理を始める](https://qiita.com/nakamasato/items/fcd52b675419bd2d34d9) でTerraformでGCPの管理を始めるのを紹介したが、今回は、AuditingをProject内で有効化する設定を書いておく。

# GCPのAudit log

種類が大きく分けて4種類。そしてDataAccessAuditLogの中にまた4種類。

1. [Admin Activity audit logs](https://cloud.google.com/logging/docs/audit#admin-activity): デフォルトで有効。無効化できない。
1. [Data Access audit logs](https://cloud.google.com/logging/docs/audit#data-access): BigQuery データアクセス監査ログを除き、データアクセス監査ログは**デフォルトで無効** 詳細: [データアクセス監査ログを構成する](https://cloud.google.com/logging/docs/audit/configure-data-access)
    1. `ADMIN_WRITE`: デフォルトで有効。無効化できない。
        > Admin Activity audit logs are enabled for all Google Cloud services and can't be configured.
    1. `ADMIN_READ`: 自由に設定可
    1. `DATA_READ`: 自由に設定可
    1. `DATA_WRITE`: 自由に設定可

1. [System Event audit logs](https://cloud.google.com/logging/docs/audit#system-event): デフォルトで有効。無効化できない。
1. [Policy Denied audit logs](https://cloud.google.com/logging/docs/audit#policy_denied): デフォルトで有効。無効化できない。

内容、詳細、料金に関しては[GCPの監査ログを有効にしてますか？実はデフォルトで無効になってますよ！](https://zenn.dev/nekoshita/articles/9fdfec20ed122b)が超絶わかりやすいのでこちらをご覧ください。

# やるべきこと
デフォルトで無効化されていて、自由に設定ができる以下のデータアクセス監査ログを有効にする:
1. `ADMIN_READ`
1. `DATA_READ`
1. `DATA_WRITE`

# 設定方法 (Console)

## [デフォルトの値を設定](https://cloud.google.com/logging/docs/audit/configure-data-access#config-console-default)


1. [audit log](https://console.cloud.google.com/iam-admin/audit/)を開く
    注意：**デフォルト設定は、Project、Folder、Organizationレベルで設定ができるので、現在どのレベルで設定しているかを左上の組織、フォルダ、プロジェクトを選択する部分から自分の設定したいものを選択してからAudit Logを開く！**
1. `DEFAULT AUDIT CONFIG`をクリック
    <img width="200" alt="default audit log" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7059/2b4748b9-4d2e-fad5-5122-123a74bf9779.png">

1. Default audit configurationを設定
    <img width="300" alt="default audit log" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7059/cc140d5d-987e-64a2-0813-2e5b6a263156.png">


## 各サービスごとの設定

サービスごとの設定も、設定したいレベルからのAudit logsをクリックして設定。

Projectの場合は、https://console.cloud.google.com/iam-admin/audit?project=your_project


![Screen Shot 2022-04-29 at 15.34.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7059/5edf2085-4197-69cc-41f0-6036b038b245.png)



# 設定方法 (Terraform)

設定するレベルによって使うリソースが異なる:
1. プロジェクト: [google_project_iam_audit_config](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam#google_project_iam_audit_config)
1. フォルダ: [google_folder_iam_audit_config](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_folder_iam#google_folder_iam_audit_config)
1. 組織: [google_organization_iam_audit_config](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_organization_iam#google_organization_iam_audit_config)

また、Terraformで管理している単位によって、対応するレベルを選ぶ必要がある。

例えば、Projectごとに管理しているのに、Organizationの設定をそのTerraformコードに入れるのはナンセンスなので、Organization用のService Accountを作成して分けるなど

ProjectごとにService Accountアカウントを発行しているケースが多いと思うので、今回は、 プロジェクト: [google_project_iam_audit_config](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam#google_project_iam_audit_config)を例に取り上げる。

例. すべてのサービスのすべてのDataAccessAuditLogを有効化する

```hcl
resource "google_project_iam_audit_config" "all-services" {
  project = "your project"
  service = "allServices"
  audit_log_config {
    log_type = "ADMIN_READ"
  }
  audit_log_config {
    log_type = "DATA_READ"
  }
  audit_log_config {
    log_type = "DATA_WRITE"
  }
}
```

`service`には、具体的なサービスを `cloudsql.googleapis.com` のように入れるか、`allServices`という特別な文字列を入れて全てに適用するかになる。`allServices`を入れるとDefaultを設定したのと同じ様になっていそう。(個別のサービスとデフォルトが異なるケースでどうなるのかは試していない)

# Cost

- 毎月50GBまで無料(超えると$0.50/GiB)
- ストレージは 30 日間無料(デフォルトでは30日なのでデフォルトのまま使っていれば無料。超えると$0.01/GiB)

https://cloud.google.com/bigtable/docs/audit-log-estimate-costs#calculating-costs

# 参考
- https://cloud.google.com/logging/docs/audit/configure-data-access
- https://cloud.google.com/bigtable/docs/audit-log-estimate-costs#calculating-costs
- [GCPの監査ログを有効にしてますか？実はデフォルトで無効になってますよ！](https://zenn.dev/nekoshita/articles/9fdfec20ed122b)
- [google_project_iam_audit_config](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam#google_project_iam_audit_config)
- [google_folder_iam_audit_config](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_folder_iam#google_folder_iam_audit_config)
- [google_organization_iam_audit_config](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_organization_iam#google_organization_iam_audit_config)