このページでは、IP アドレスを使用する Cloud SQL インスタンスへの接続に承認済みネットワーク設定を使用する方法について説明します。
承認済みネットワークを構成する
クライアント アプリケーションの IP アドレスまたはアドレス範囲は、次の場合に authorized networks
として構成する必要があります。
- クライアント アプリケーションが、パブリック IP アドレスで Cloud SQL インスタンスに直接接続している。
- クライアント アプリケーションが、プライベート IP アドレスで Cloud SQL インスタンスに直接接続していて、クライアントの IP アドレスが RFC 1918 以外のアドレスになっている。
IP アドレスは、単一のエンドポイントにすることも、CIDR 表記の範囲にすることもできます。
-
Google Cloud コンソールで、[Cloud SQL インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- SQL ナビゲーション メニューから [接続] を選択します。
- [Network] タブをクリックします。
- [パブリック IP] チェックボックスをオンにします。
- [ネットワークを追加] をクリックします。
- [名前] フィールドに、新しいネットワークの名前を入力します。
- [ネットワーク] フィールドに、接続を許可するパブリック IPv4 アドレスまたはアドレス範囲を入力します。
アドレス範囲には、有効な CIDR 表記(例: 10.10.10.0/24)を使用する必要があります。
- [完了] をクリックします。
- [保存] をクリックします。
承認済みネットワークを構成すると、既存の承認済みネットワークのリストが置き換えられます。
gcloud sql instances patchINSTANCE_ID \ --authorized-networks=NETWORK_RANGE_1 ,NETWORK_RANGE_2 ...
承認済みネットワークを構成するには、Terraform リソースを使用します。
変更を適用する
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を行います。
Cloud Shell を準備する
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=
PROJECT_ID Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
-
Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は
.tf
にする必要があります(例:main.tf
)。このチュートリアルでは、このファイルをmain.tf
とします。mkdir
DIRECTORY && cdDIRECTORY && touch main.tf -
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した
main.tf
にサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
-
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行う必要があります。
terraform init
必要に応じて、最新バージョンの Google プロバイダを使用する場合は、
-upgrade
オプションを使用します。terraform init -upgrade
変更を適用する
-
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
-
次のコマンドを実行し、プロンプトで「
yes
」と入力して、Terraform 構成を適用します。terraform apply
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
- Google Cloud プロジェクトを開いて結果を表示します。 Google Cloud コンソールで、UI のリソースに移動して、Terraform によって作成または更新されたことを確認します。
変更を削除する
変更を削除するには、次の手順を行います。
- 削除の保護を無効にするには、Terraform 構成ファイルで
deletion_protection
引数をfalse
に設定します。deletion_protection = "false"
- 次のコマンドを実行し、プロンプトで「
yes
」と入力して、更新された Terraform 構成を適用します。terraform apply
-
以前に Terraform 構成で適用されたリソースを削除するには、次のコマンドを実行して、プロンプトに「
yes
」と入力します。terraform destroy
承認済みネットワークを構成すると、既存の承認済みネットワークのリストが置き換えられます。
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- network_range_1: 認可済みの IP アドレスまたは範囲
- network_range_2: 別の認可済み IP アドレスまたは範囲
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id
リクエストの本文(JSON):
{ "settings": { "ipConfiguration": { "authorizedNetworks": [{"value": "network_range_1 "}, {"value": "network_range_2 "}] } } }
リクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id "
PowerShell(Windows)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id " | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id ", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-21T22:43:37.981Z", "operationType": "UPDATE", "name": "operation-id ", "targetId": "instance-id ", "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ", "targetProject": "project-id " }
承認済みネットワークを構成すると、既存の承認済みネットワークのリストが置き換えられます。
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- network_range_1: 認可済みの IP アドレスまたは範囲
- network_range_2: 別の認可済み IP アドレスまたは範囲
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id
リクエストの本文(JSON):
{ "settings": { "ipConfiguration": { "authorizedNetworks": [{"value": "network_range_1 "}, {"value": "network_range_2 "}] } } }
リクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id "
PowerShell(Windows)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id " | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id ", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-21T22:43:37.981Z", "operationType": "UPDATE", "name": "operation-id ", "targetId": "instance-id ", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ", "targetProject": "project-id " }
制限事項
一部の IP アドレス範囲は、承認済みネットワークとして追加できません。
アドレス範囲 | メモ |
---|---|
10.0.0.0/8 | RFC 1918 アドレス範囲。これらは、Cloud SQL によって承認済みネットワークに自動的かつ暗黙的に含まれます。 |
172.16.0.0/12 | RFC 1918 アドレス範囲。これらは、Cloud SQL によって承認済みネットワークに自動的かつ暗黙的に含まれます。 |
192.168.0.0/16 | RFC 1918 アドレス範囲。これらは、Cloud SQL によって承認済みネットワークに自動的かつ暗黙的に含まれます。 |
次のステップ
インスタンスのアクセス制御の詳細を確認する。
インスタンスを構成して、SSL / TLS を使用する。
SSL / TLS を使用して MySQL クライアントからインスタンスに接続する。