Cloud SQL MySQLのLOCAL_INFILE無効化の設定手順

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

ポリシーの説明
MySQLのLOCAL_INFILE機能は、クライアントのローカルファイルシステムからデータをロードできる機能です。この機能は、LOAD DATA LOCAL INFILEステートメントを使用して、クライアント側のファイルをデータベースに直接インポートすることを可能にします。
しかし、この機能を有効にしておくと、悪意のあるSQLインジェクションやクライアント側の脆弱性を利用した攻撃により、機密ファイルへの不正アクセスが可能になる重大なセキュリティリスクが存在します。MySQL 8.0以降ではデフォルトで無効化されていますが、明示的に無効化することでセキュリティ態勢を強化できます。
リスク
- 任意ファイル読み取り: 攻撃者がSQLインジェクションに成功した場合、クライアントのファイルシステム上の任意のファイル(/etc/passwd、設定ファイル、証明書など)を読み取られる可能性があります(CWE-73: External Control of File Name or Path)
修復方法
前提条件の確認
修復を行う前に、以下を確認してください:
- 既存のアプリケーションがLOAD DATA LOCAL INFILE機能を使用していないか
- データインポート処理で代替手段(Cloud Storage経由のインポートなど)が利用可能か
- インスタンスの再起動によるダウンタイムが許容されるか
コンソールでの修復手順
- Google Cloud Consoleにアクセス
- Cloud Consoleにログイン
- ナビゲーションメニューから「SQL」を選択
- 対象のMySQLインスタンスを選択
- Cloud SQLインスタンスの一覧から、設定を変更したいMySQLインスタンス名をクリック
- 設定画面へ移動
- インスタンスの詳細画面で「編集」ボタンをクリック
- 設定の編集画面が表示されるまで待機
- データベースフラグを設定
- 「設定」セクションを展開
- 「データベースのフラグ」セクションまでスクロール
- 「フラグを追加」をクリック
- フラグ名のドロップダウンから「local_infile」を選択
- 値を「off」に設定
- 追加の推奨セキュリティフラグ(オプション)
- 「skip_show_database」を「on」に設定
- 「secure_file_priv」を特定のディレクトリパスに設定(例:/var/lib/mysql-files/)
- 変更を保存
- ページ下部の「保存」ボタンをクリック
- 確認ダイアログで「保存して再起動」を選択
- インスタンスが再起動されるまで待機(通常2-5分程度)
- 重要: 再起動中はデータベースに接続できません
- 設定の確認
- インスタンスの詳細画面に戻る
- 「設定」→「データベースのフラグ」セクションで「local_infile = off」が設定されていることを確認
Terraformでの修復手順
- データベースフラグにて明示的に設定しておくことを推奨します。
# Cloud SQL MySQLインスタンスの定義(セキュリティ強化版)
resource "google_sql_database_instance" "secure_mysql" {
>>>>> Skip
settings {
# データベースフラグ(セキュリティ設定)
database_flags {
name = "local_infile"
value = "off" # LOCAL_INFILEを明示的に無効化
}
}
}
まとめ
Cloud SQLのMySQLインスタンスでLOCAL_INFILE機能を無効化することは、ファイルシステムへの不正アクセスを防ぐ重要なセキュリティ対策です。この記事で紹介した手順により、この脆弱性を効果的に軽減できます。
さらに、secure_file_privの設定、監査ログの有効化、Cloud SQL Proxyの使用、ネットワークレベルのアクセス制御などの追加のセキュリティ対策を組み合わせることで、より堅牢なデータベースセキュリティを実現できます。
定期的な設定の見直しと、代替手段(Cloud Storage経由のインポートなど)の活用により、セキュリティと利便性のバランスを保つことが重要です。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。
参考情報
Google Cloud公式ドキュメント
- Cloud SQL for MySQL セキュリティベストプラクティス
- Cloud SQL データベースフラグ一覧
- Cloud SQL Import/Export ベストプラクティス
- Cloud SQL Proxyを使用した安全な接続
MySQL公式ドキュメント
セキュリティ基準と脆弱性情報
- CIS MySQL 8.0 Benchmark v1.0.0 – 4.3 Ensure ‘local_infile’ Is Disabled
- CWE-73: External Control of File Name or Path
- MITRE ATT&CK T1068: Exploitation for Privilege Escalation
- PCI DSS v4.0 – Requirement 2.2.7