Cloud SQL SQL Server cross db ownership chainingを無効化の手順について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、 「どうやって直すのか?」 という具体的な修復手順(コンソール、gcloud CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、Cloud SQL SQL Serverインスタンスでcross db ownership chaining
フラグを「off」に設定し、データベース間の権限エスカレーションを防ぐ方法について、リスクと対策を解説します。

ポリシーの説明
Cloud SQL SQL Server インスタンスにおいて、cross db ownership chaining
データベースフラグが「off」に設定されていない場合、データベース間での所有権チェーンが有効になります。この機能は、あるデータベースのオブジェクトが別のデータベースのオブジェクトを参照する際の権限チェックを簡略化しますが、適切に管理されていない場合、重大なセキュリティリスクとなります。インスタンス内のすべてのデータベースでこの機能が必要でない限り、無効化することが強く推奨されます。
cross db ownership chaining
が有効な場合、以下のリスクが生じます:
- 権限昇格の脆弱性: 悪意のあるユーザーが、所有権チェーンを悪用して本来アクセスできないデータベースのオブジェクトにアクセスする可能性があります
- データ漏洩リスク: 異なるセキュリティレベルのデータベース間で、意図しないデータアクセスが発生する可能性があります
- 最小権限の原則違反: ユーザーが必要以上の権限を持つことになり、セキュリティのベストプラクティスに反します
修復方法
コンソールでの修復手順
Google Cloud コンソールを使用して、Cloud SQL SQL Server インスタンスの cross db ownership chaining
を無効にします。
- Google Cloud Console にログインし、「SQL」ページに移動します

- 対象の SQL Server インスタンスを選択します

- 「編集」ボタンをクリックします

- 「設定」セクションまでスクロールし、「データベースのフラグ」をクリックして展開します
- 「+ フラグを追加」ボタンをクリックします
- ドロップダウンから
cross db ownership chaining
を選択し、値をoff
に設定します

- 画面下部の「保存」ボタンをクリックします
- 変更内容を確認し、「保存して再起動」をクリックします
注意:この変更により、インスタンスが数分間再起動されます。既存のアプリケーションがこの機能に依存している場合は、事前に影響を確認してください。
Terraformでの修復手順
Cloud SQL SQL Server インスタンスの cross db ownership chaining
を無効にする Terraform コードと、主要な修正ポイントを説明します。
resource "google_sql_database_instance" "sqlserver_secure" {
>>> Skip
# SQL Server は第1世代を使用できないため、必ず第2世代を指定
settings {
# クロスデータベース所有権チェーンを無効化
database_flags {
name = "cross db ownership chaining"
value = "off"
}
}
}
最後に
この記事では、Cloud SQL SQL Serverインスタンスでcross db ownership chaining
を無効化し、データベース間の権限エスカレーションを防ぐ方法について、リスクと対策を解説しました。
この設定は、最小権限の原則を守り、データベース間の適切な分離を維持するために重要です。特に異なるセキュリティレベルのデータを扱う環境では、必ず無効化することを推奨します。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。