- 概要
- Terraform で構築
- 参考
- エラー
- Error creating NotificationConfig: googleapi: Error 403: Permission ‘securitycenter.notificationconfig.create’ denied on resource ‘//cloudresourcemanager.googleapis.com/organizations/1111111111’ (or it may not exist).
- 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.
- Error: storage.NewClient() failed: dialing: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
概要
やりたいこと
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'
追記 : Terraform で NotificationConfig 作成
いつの間にか Terraform が対応していた。
organization
と pubsub_topic
と filiter
を適宜修正すること。
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
参考
エラー
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
コメント