# GCP - Cloud SQL Enum

{{#include ../../../banners/hacktricks-training.md}}

## 基本情報

Google Cloud SQLは、**MySQL、PostgreSQL、SQL Server**などのリレーショナルデータベースをGoogle Cloud Platform上で設定、維持、管理することを**簡素化する**マネージドサービスであり、ハードウェアのプロビジョニング、データベースのセットアップ、パッチ適用、バックアップなどのタスクを処理する必要がなくなります。

Google Cloud SQLの主な機能は以下の通りです：

1. **完全管理**：Google Cloud SQLは完全管理サービスであり、Googleがパッチ適用、更新、バックアップ、構成などのデータベースメンテナンスタスクを処理します。
2. **スケーラビリティ**：データベースのストレージ容量と計算リソースをスケールアップする能力を提供し、しばしばダウンタイムなしで実現します。
3. **高可用性**：高可用性構成を提供し、データベースサービスが信頼性が高く、ゾーンやインスタンスの障害に耐えられるようにします。
4. **セキュリティ**：データ暗号化、アイデンティティとアクセス管理（IAM）制御、プライベートIPとVPCを使用したネットワーク隔離などの堅牢なセキュリティ機能を提供します。
5. **バックアップと復元**：自動バックアップと時点復元をサポートし、データを保護し復元するのに役立ちます。
6. **統合**：他のGoogle Cloudサービスとシームレスに統合され、アプリケーションの構築、展開、管理のための包括的なソリューションを提供します。
7. **パフォーマンス**：データベースのパフォーマンスを監視、トラブルシューティング、改善するためのパフォーマンスメトリクスと診断を提供します。

### パスワード

ウェブコンソールではCloud SQLがユーザーに**データベースのパスワードを設定**することを許可しており、生成機能もありますが、最も重要なのは、**MySQL**が**空のパスワードを許可し、すべてのデータベースがパスワードとして文字"a"のみを設定することを許可することです：**

<figure><img src="../../../images/image (14).png" alt=""><figcaption></figcaption></figure>

**長さ**、**複雑さ**、**再利用の無効化**、および**パスワードにユーザー名を使用しない**ことを要求するパスワードポリシーを構成することも可能です。すべての設定はデフォルトで無効になっています。

**SQL Server**は**Active Directory Authentication**で構成できます。

### ゾーンの可用性

データベースは**1つのゾーンまたは複数のゾーンで利用可能**であり、重要なデータベースは複数のゾーンに配置することが推奨されます。

### 暗号化

デフォルトではGoogle管理の暗号化キーが使用されますが、**顧客管理の暗号化キー（CMEK）を選択することも可能です**。

### 接続

- **プライベートIP**：VPCネットワークを指定すると、データベースはネットワーク内にプライベートIPを取得します。
- **パブリックIP**：データベースはパブリックIPを取得しますが、デフォルトでは誰も接続できません。
- **承認されたネットワーク**：データベースに接続を許可すべきパブリック**IP範囲を指定**します。
- **プライベートパス**：DBがVPCに接続されている場合、このオプションを有効にして**BigQueryなどの他のGCPサービスにアクセスを提供する**ことが可能です。

<figure><img src="../../../images/image (15).png" alt=""><figcaption></figcaption></figure>

### データ保護

- **毎日のバックアップ**：自動的に毎日のバックアップを実行し、維持したいバックアップの数を指定します。
- **時点復元**：特定の時点からデータを復元することを可能にし、秒の一部まで対応します。
- **削除保護**：有効にすると、この機能が無効になるまでDBを削除できなくなります。

### 列挙
```bash
# Get SQL instances
gcloud sql instances list
gcloud sql instances describe <inst-name> # get IPs, CACert, settings

# Get database names inside an instance (like information_schema, sys...)
gcloud sql databases list --instance <intance-name>
gcloud sql databases describe <db-name> --instance <intance-name>

# Get usernames inside the db instance
gcloud sql users list --instance <intance-name>

# Backups
gcloud sql backups list --instance <intance-name>
gcloud sql backups describe <backup-name> --instance <intance-name>
```
### 認証されていない列挙

{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-cloud-sql-unauthenticated-enum.md
{{#endref}}

### ポストエクスプロイテーション

{{#ref}}
../gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md
{{#endref}}

### 永続性

{{#ref}}
../gcp-persistence/gcp-cloud-sql-persistence.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
