Cloud SQL for SQL Server インスタンスのContained Database Authentication無効化設定手順

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、 「どうやって直すのか?」 という具体的な修復手順(コンソール、gcloud CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、Cloud SQLのSQL ServerインスタンスでContained Database Authentication機能が有効化されている問題について、リスクと対策を解説します。

ポリシーの説明
SQL ServerでContained Database認証を無効化し、データベースレベルでの独立した認証を防止します。Contained Database Authentication(包含データベース認証)は、認証境界をSQL Serverデータベースエンジンレベルから個々のデータベースレベルに移動する機能です。この機能により、パスワードハッシュがデータベースファイル内に直接保存されるため、データベースファイルへのアクセスを持つ攻撃者による辞書攻撃のリスクが高まり、重大なセキュリティ脆弱性となります。
リスク
このポリシー違反により、以下の深刻なセキュリティリスクが発生します:
パスワードハッシュの露出: パスワードハッシュがデータベースファイル内に保存されるため、バックアップファイルが侵害された場合、攻撃者は監査されていないシステムでオフライン辞書攻撃を実行できます。この攻撃は、サーバーのログやアラートに記録されることなく実行可能であり、検出が極めて困難です。
不正なアクセス権限付与: db_ownerやdb_accessadminロールを持つユーザーは、SQL Server管理者の知識なしにALTER ANY USER権限を使用して新しいユーザーにアクセス権を付与できるため、攻撃対象領域が拡大します。これにより、中央集権的なアクセス管理が損なわれます。
サービス拒否(DoS)攻撃: auto-close設定と組み合わせることで、認証試行のたびにデータベースを再オープンする必要があり、リソースを大量に消費するDoS攻撃に悪用される可能性があります。これは特に、リソースが限定された環境で深刻な影響を与えます。
修復方法
コンソールでの修復手順
Google Cloud コンソールを使用して、Cloud SQL ServerインスタンスのContained Database Authenticationを無効化します。
- Cloud SQLインスタンス画面へアクセス
- Google Cloud Console(https://console.cloud.google.com/sql/instances)にログインします
- 対象インスタンスの選択
- 修復対象のSQL Serverインスタンス名(ID)をクリックします
- インスタンスの詳細ページが表示されます
- インスタンスの編集
- インスタンス詳細ページで「編集」ボタンをクリックします
- データベースフラグの設定
- 「フラグ」セクションまでスクロールします
- 「項目を追加」をクリックします(フラグが存在しない場合)
- ドロップダウンから
contained database authentication
を選択します - 値を
off
に設定します
- 変更の保存
- ページ下部の「保存」ボタンをクリックします
- インスタンスが再起動される場合があることを確認します
gcloud CLIでの実行
# 単一フラグの設定(新規設定の場合)
gcloud sql instances patch <インスタンス名> \
--database-flags "contained database authentication=off"
# 既存フラグを保持する場合は、まず現在のフラグを確認
gcloud sql instances describe <インスタンス名> \
--format="table(settings.databaseFlags[].name,settings.databaseFlags[].value)"
# 全てのフラグを含めて更新(既存フラグの保持が必要な場合)
gcloud sql instances patch <インスタンス名> \
--database-flags "contained database authentication=off,flag2=value2,flag3=value3"
# 変更が適用されたことを確認
gcloud sql instances describe <インスタンス名> \
--format="get(settings.databaseFlags[?name=='contained database authentication'].value)"
注意: –database-flagsパラメータを使用すると、指定されていない既存のフラグがリセットされる場合があります。既存のフラグを保持する必要がある場合は、すべてのフラグを明示的に指定してください。
Terraformでの修復手順
Cloud SQL ServerインスタンスのContained Database Authenticationを無効化するTerraformコードと、主要な修正ポイントを説明します。
# セキュアなCloud SQL Serverインスタンスの作成
resource "google_sql_database_instance" "secure_sqlserver" {
>>>>> skip
settings {
# Contained Database Authenticationを無効化
database_flags {
name = "contained database authentication"
value = "off"
}
}
}
上記の設定でcontained database authentication
フラグを明示的にoff
に設定されます。
設定後の確認事項
- 既存の包含データベースユーザーの移行
- 包含データベースユーザーをSQL Server認証またはWindows認証ユーザーに移行
- アプリケーションの接続文字列の更新が必要
- 監査ログの確認
- 設定変更後、認証失敗ログが増加していないか確認
- アプリケーションが正常に接続できていることを確認
まとめ
この記事では、Cloud SQL for SQL ServerインスタンスのContained Database Authentication無効化設定について、リスクと対策を解説しました。
Contained Database Authenticationは、データベースの可搬性を向上させる機能ですが、パスワードハッシュの露出、不正なアクセス権限付与、権限昇格など、重大なセキュリティリスクをもたらします。Google CloudのIAM統合、Windows認証(Active Directory統合)、SQL Server認証と厳格なファイアウォールルールの組み合わせなど、より安全な認証方法を採用することで、データベースのセキュリティを大幅に向上させることができます。
定期的なセキュリティ監査と設定の見直しを実施し、最小権限の原則に基づいたアクセス制御を維持することが重要です。また、監視アラートを設定することで、意図しない設定変更を迅速に検出し、対応することが可能になります。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。