ある特定のログをトリガーにfunctionやらCloudRunやらを動かすのに便利なログルータのシンクですが、宛先をPub/SubのTopicに指定しただけでは動きませんでした。 Pub/Sub Topic側で権限追加が必要でした。 エクスポート先の権限を設定する

Terraformで構築する際、google_pubsub_topicのオプションにはなかったので戸惑いました。

コンソール

シンクを作成すると、自動的にサービスアカウントが生成されます。 シンクの詳細

このSAをエクスポート先のPub/Sub Topicに追加します。 プリンシパルの追加

Terraform

resource "google_pubsub_topic" "topic-name" {
  name                       = "topic-name"
  message_retention_duration = "600s"
}

resource "google_pubsub_topic_iam_binding" "binding" {
  topic = google_pubsub_topic.topic-name.name
  role = "roles/pubsub.publisher"
  members = [
    "serviceAccount:{サービスアカウントID}"
  ]
}

これでログ出現時にpub/subにエクスポートされます。

参考ドキュメント

https://cloud.google.com/logging/docs/export/configure_export_v2#dest-auth https://cloud.google.com/pubsub/docs/access-control#roles https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/pubsub_topic_iam#google_pubsub_topic_iam_policy