Terraform で GCP Security Command Center のアラートを Slack 通知

概要

やりたいこと

Security Command Center のアラートを Slack 通知したい。

以下の流れで通知できるとのこと。NotificationConfig について掘り下げる。

  • SCC -> NotificationConfig -> Pub/Sub + CloudFunctions -> Slack

Cloud Pub/Sub + CloudFunctions で Slack 通知の仕方は以下を参照。

全体アーキテクチャ

下記を参考。

上記でも書いたが全体の流れは下記。Free Tier の場合、SCC から Cloud Pub/Sub への通知は NotificationConfig を挟む必要がある。

  • Security Command Center -> NotificationConfig -> Pub/Sub Topic -> Cloud Functions -> Slack

Security Command Center は組織プロジェクトで有効化するが、Cloud Pub/Sub, Cloud Functions は別プロジェクトに作成する。

Terraform で構築

Terraform で Pub/Sub, CloudFunctions 作成

以下をやっておくこと。

gcloud で NotificationConfig 作成

公式 Doc より、NotificationConfig の作成・更新に必要な権限は roles/securitycenter.notificationConfigEditor。この権限を付与するには「組織管理者」の権限が必要。

gcloud scc notifications コマンドを利用する。

organization と pubsub-topic は適宜修正。

gcloud scc notifications create notification-test \
    --organization "111122223333" \
    --description "Notifies for active findings" \
    --pubsub-topic "projects/PROJECT_ID/topics/example-topic" \
    --filter "state=\"ACTIVE\""

設定後、下記のように Slack にアラートが届けば成功。

NotificationConfig 用サービスアカウント

組織全体のロールを付与する必要があるため、下記コマンドを実行するには「組織管理者」権限が必要。

組織

export ORGANIZATION_ID=1111111111
export [email protected]
gcloud organizations add-iam-policy-binding \
$ORGANIZATION_ID \
--member="serviceAccount:$EMAIL" \
--role='roles/securitycenter.notificationConfigEditor'

【WIP】Terraform で NotificationConfig 作成

下記記事から、サービスアカウントで実施する場合は追加でトークンの認証することが必要?

いつの間にか Terraform が対応していた。昔は gcloud からしかできなかった。

organizationpubsub_topicfiliter を適宜修正すること。

resource "google_scc_notification_config" "custom_notification_config" {
  config_id    = "my-config"
  organization = "123456789"
  description  = "My custom Cloud Security Command Center Finding Notification Configuration"
  pubsub_topic =  google_pubsub_topic.scc_notification.id

  streaming_config {
    filter = "category = \"OPEN_FIREWALL\" AND state = \"ACTIVE\""
  }
}

デプロイ。

terraform apply

作成した NotificationConfig は下記コマンドで確認できる。

gcloud scc notifications list

参考

検出通知の設定

GCSの更新情報をCloud Pub/Subに通知するメモ

エラー

Error creating NotificationConfig: googleapi: Error 403: Permission ‘securitycenter.notificationconfig.create’ denied on resource ‘//cloudresourcemanager.googleapis.com/organizations/1111111111’ (or it may not exist).

Terraform で NotificationConfig を作成時に以下エラーに遭遇。

│ Details:
│ [
│   {
│     "@type": "type.googleapis.com/google.rpc.ErrorInfo",
│     "domain": "cloudresourcemanager.googleapis.com",
│     "metadata": {
│       "permission": "securitycenter.notificationconfig.create",
│       "resource": "organizations/476578234943"
│     },
│     "reason": "IAM_PERMISSION_DENIED"
│   }
│ ]

権限を付与するコマンド。

export ORGANIZATION_ID=1111111111
export [email protected]
gcloud organizations add-iam-policy-binding \
$ORGANIZATION_ID \
--member="serviceAccount:$EMAIL" \
--role='roles/securitycenter.notificationConfigEditor'

この後 terraform apply するとさらに下記エラー発生。

Error creating NotificationConfig: googleapi: Error 403: Your application has authenticated using end user credentials from the Google Cloud SDK or Google Cloud Shell which are not supported by the securitycenter.googleapis.com. We recommend configuring the billing/quota_project setting in gcloud or using a service account through the auth/impersonate_service_account setting. For more information about service accounts and how to use them in your application, see https://cloud.google.com/docs/authentication/. If you are getting this error with curl or similar tools, you may need to specify ‘X-Goog-User-Project’ HTTP header for quota and billing purposes. For more information regarding ‘X-Goog-User-Project’ header, please check https://cloud.google.com/apis/docs/system-parameters.

詳細。

│ Details:
│ [
│   {
│     "@type": "type.googleapis.com/google.rpc.ErrorInfo",
│     "domain": "googleapis.com",
│     "metadata": {
│       "consumer": "projects/764086051850",
│       "service": "securitycenter.googleapis.com"
│     },
│     "reason": "SERVICE_DISABLED"
│   }
│ ]

Error: storage.NewClient() failed: dialing: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.

gcloud の認証が切れてい模様。GCP の Application Default Credentials(ADC) というもので、gcloud auth login とは違うものらしい。

以下コマンドで再認証。

gcloud auth application-default login

コメント

タイトルとURLをコピーしました