このページでは、Cloud SQL インスタンスを作成または編集して、ユーザー、サービス アカウント、またはグループで Cloud SQL IAM データベース認証を使用するように構成する手順について説明します。Cloud SQL IAM のインテグレーションの詳細については、IAM 認証をご覧ください。
新しく作成されたインスタンスには、次の 4 つのシステム データベースがあります。
- information_schema: データベース メタデータ(MySQL サーバーに関する情報)へのアクセスを提供します。
- mysql: システム スキーマ。MySQL サーバーの実行時に必要な情報を格納するテーブルが含まれています。
- performance_schema: MySQL サーバーの実行を低レベルでモニタリングする機能。
- sys: DBA とデベロッパーがパフォーマンス スキーマによって収集されたデータの解釈に役立つ一連のオブジェクトが含まれています。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- 
    
    
      In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
      Install the gcloud CLI. 
- 
          外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。 
- 
        gcloud CLI を初期化するには、次のコマンドを実行します。 gcloud init
- 
    
    
      In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
      Install the gcloud CLI. 
- 
          外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。 
- 
        gcloud CLI を初期化するには、次のコマンドを実行します。 gcloud init
- ユーザー アカウントに Cloud SQL 管理者のロールと Compute 閲覧者のロールが付与されていることを確認します。
    ロールと権限について詳細を確認します。 
- 新しい SQL ネットワーク アーキテクチャ: プロジェクトあたり最大 1,000 個のインスタンスを使用できます。
- 以前の SQL ネットワーク アーキテクチャ: プロジェクトあたり最大 100 個のインスタンスを使用できます。
- 両方のアーキテクチャを使用する場合: 上限は、2 つのアーキテクチャ間のインスタンスの分布に応じて 100~1,000 の間になります。
- 
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。 
- [インスタンスを作成] をクリックします。
- [MySQL を選択] をクリックします。
- インスタンス ID の名前を入力します。 インスタンス名には機密情報や個人を特定できる情報を含めないでください。インスタンス名は外部から閲覧可能です。インスタンス名にプロジェクト ID を含める必要はありません。プロジェクト ID は必要に応じて自動的に含まれます(ログファイルの場合など)。
- root ユーザーのパスワードを入力します。
- [データベースのバージョン] メニューで、データベースのバージョンを選択します。
- [リージョンとゾーンの可用性の選択] セクションで、インスタンスのリージョンとゾーンを選択します。インスタンスにアクセスするリソースと同じリージョンにインスタンスを配置します。選択したリージョンは後から変更できません。通常、ゾーンを指定する必要はありません。
- [インスタンスのカスタマイズ] セクションで [構成オプションを表示] をクリックし、[フラグ] を開きます。
- [フラグを追加] をクリックします。
- [フラグを選択] メニューから、cloudsql_iam_authenticationフラグを選択します。このフラグの値として [オン] が選択されていることを確認し、[完了] をクリックします。
- 必要に応じて、他のインスタンス設定を構成します。設定の詳細については、設定をご覧ください。
- [インスタンスを作成] をクリックします。
- INSTANCE_NAME: 新しいインスタンスの名前。
- MYSQL_VERSION: MySQL のバージョン(MYSQL_5_7、MYSQL_8_0 など)。
- NUMBER_OF_CORES: マシン内のコア数。
- AMOUNT_OF_MEMORY: マシン内のメモリ量。サイズ単位を指定します(3,072 MiB、9 GiB など)。
- ZONE: 目的の Compute Engine ゾーン(us-central1-a、us-central1-b など)。
- PASSWORD: root ユーザーのパスワードを作成します。
- Cloud Shell を起動します。
- 
    Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。 このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。 export GOOGLE_CLOUD_PROJECT=PROJECT_ID Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。 
- 
    Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は .tfにする必要があります(例:main.tf)。このチュートリアルでは、このファイルをmain.tfとします。mkdir DIRECTORY && cd DIRECTORY && 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 
- 
             次のコマンドを実行します。プロンプトで「 yes」と入力して、以前に Terraform 構成で適用されたリソースを削除します。terraform destroy 
- INSTANCE_ID: 目的のインスタンス ID
- REGION: 目的のリージョン(us-east-1 など)
- PROJECT_ID: プロジェクト ID
- LOCATION_ID: ロケーション ID
- DATABASE_VERSION: データベース バージョンの列挙型文字列。例: MYSQL_8_0
- PASSWORD: root ユーザーのパスワード
- MACHINE_TYPE: マシン(階層)タイプの列挙型文字列(例: db-custom-[CPUS]-[MEMORY_MBS])
- INSTANCE_ID: 目的のインスタンス ID
- REGION: 目的のリージョン(us-east-1 など)
- PROJECT_ID: プロジェクト ID
- LOCATION_ID: ロケーション ID
- DATABASE_VERSION: データベース バージョンの列挙型文字列。例: MYSQL_8_0
- PASSWORD: root ユーザーのパスワード
- MACHINE_TYPE: マシン(階層)タイプの列挙型文字列(例: db-custom-[CPUS]-[MEMORY_MBS])
- 
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。 
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [編集] をクリックします。
- [インスタンスのカスタマイズ] セクションで、[フラグ] を開きます。
- [フラグを追加] をクリックします。
- [フラグを選択] メニューから、cloudsql_iam_authenticationフラグを選択します。このフラグの値として [オン] が選択されていることを確認し、[完了] をクリックします。
- 必要に応じて、他のインスタンス設定を構成します。設定の詳細については、設定をご覧ください。
- [保存] をクリックします。
- INSTANCE_NAME: 新しいインスタンスの名前。
- PROJECT_ID: プロジェクト ID
- LOCATION_ID: ロケーション ID
- INSTANCE_ID: 目的のインスタンス ID
- REGION: 目的のリージョン
- DATABASE_VERSION: データベース バージョンの列挙型文字列。例: MYSQL_8_0
- PASSWORD: root ユーザーのパスワード
- MACHINE_TYPE: マシン(階層)タイプの列挙型文字列(例: db-custom-[CPUS]-[MEMORY_MBS])
- PROJECT_ID: プロジェクト ID
- LOCATION_ID: ロケーション ID
- INSTANCE_ID: 目的のインスタンス ID
- REGION: 目的のリージョン
- DATABASE_VERSION: データベース バージョンの列挙型文字列。例: MYSQL_8_0
- PASSWORD: root ユーザーのパスワード
- MACHINE_TYPE: マシン(階層)タイプの列挙型文字列(例: db-custom-[CPUS]-[MEMORY_MBS])
- IAM データベース認証について学習する。
- IAM データベース認証のリードレプリカ ログインを構成する方法を学習する。
- Cloud SQL IAM データベース認証を使用するユーザーとサービス アカウントを作成する方法を学習する。
- ユーザーまたはサービス アカウントに IAM バインディングを追加する方法を学習する。
- IAM データベース認証を使用して Cloud SQL データベースにログインする方法を学習する。
- IAM データベース認証のユーザー アカウントとサービスを管理する方法を学習する。
1 つのプロジェクトで使用できるインスタンスの最大数は、インスタンスのネットワーク アーキテクチャによって異なります。
この数を引き上げる必要がある場合は、サポートケースを送信してリクエストしてください。リードレプリカはインスタンスとしてカウントされます。
IAM データベース認証に新しいインスタンスを構成する
IAM データベース認証用に新しい Cloud SQL インスタンスを構成するには、cloudsql_iam_authentication フラグを有効にする必要があります。このフラグを有効にすると、Cloud SQL インスタンスに IAM ユーザー、サービス アカウント、またはグループを追加できます。
IAM データベース認証を使用するように新しい Cloud SQL インスタンスを構成するには:
コンソール
gcloud
--database-flags パラメータを cloudsql_iam_authentication=on に設定して gcloud sql instances create を実行します。
次のように置き換えます。
gcloud sql instances create INSTANCE_NAME \ --database-version=MYSQL_VERSION \ --cpu=NUMBER_OF_CORES \ --memory=AMOUNT_OF_MEMORY \ --zone=ZONE_NAME \ --root-password=PASSWORD \ --database-flags=cloudsql_iam_authentication=on
Terraform
IAM データベース認証を有効にしてインスタンスを作成するには、Terraform リソースを使用します。
変更を適用する
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
変更を適用する
変更を削除する
変更を削除するには、次の手順を行います。
REST v1
インスタンス名には機密情報や個人を特定できる情報(PII)を含めないでください。インスタンス名は外部から閲覧可能です。
インスタンス名にプロジェクト ID を含める必要はありません。プロジェクト ID は必要に応じて自動的に含まれます(ログファイルの場合など)。
リクエストのデータを使用する前に、次のように置き換えます。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances
リクエストの本文(JSON):
{
  "name": "INSTANCE_ID",
  "region": "REGION",
  "databaseVersion": "DATABASE_VERSION",
  "rootPassword": "PASSWORD",
  "settings": {
    "tier": "MACHINE_TYPE",
    "backupConfiguration": {
      "enabled": true
    },
    "databaseFlags": [
      {
        "name": "cloudsql_iam_authentication",
        "value": "on"
      }
    ]
  }
}
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような 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-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}
REST v1beta4
インスタンス名には機密情報や個人を特定できる情報(PII)を含めないでください。インスタンス名は外部から閲覧可能です。
インスタンス名にプロジェクト ID を含める必要はありません。プロジェクト ID は必要に応じて自動的に含まれます(ログファイルの場合など)。
リクエストのデータを使用する前に、次のように置き換えます。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances
リクエストの本文(JSON):
{
  "name": "INSTANCE_ID",
  "region": "REGION",
  "databaseVersion": "DATABASE_VERSION",
  "rootPassword": "PASSWORD",
  "settings": {
    "tier": "MACHINE_TYPE",
    "backupConfiguration": {
      "enabled": true
    },
    "databaseFlags": [
      {
        "name": "cloudsql_iam_authentication",
        "value": "on"
      }
    ]
  }
}
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような 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-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}
IAM データベース認証に既存のインスタンスを構成する
IAM データベース認証用に既存の Cloud SQL インスタンスを構成するには、cloudsql_iam_authentication フラグを有効にする必要があります。このフラグを有効にすると、Cloud SQL インスタンスに IAM ユーザー、サービス アカウント、またはグループを追加できます。
IAM データベース認証を使用するように既存の Cloud SQL インスタンスを構成するには:
コンソール
gcloud
gcloud CLI のインストールと使用開始については、gcloud CLI をインストールするをご覧ください。Cloud Shell の起動については、Cloud Shell を使用するをご覧ください。
この手順では、
  gcloud
  sql instances patch を使用します。
次のように置き換えます。
gcloud sql instances patch INSTANCE_NAME \ --database-flags=cloudsql_iam_authentication=on
これにより、他の既存のデータベース フラグの設定がリセットされます。データベース フラグの設定方法について詳しくは、データベース フラグを設定するをご覧ください。
REST v1
リクエストのデータを使用する前に、次のように置き換えます。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances
リクエストの本文(JSON):
{
  "name": "INSTANCE_ID",
  "region": "REGION",
  "databaseVersion": "DATABASE_VERSION",
  "rootPassword": "PASSWORD",
  "settings": {
    "tier": "MACHINE_TYPE",
    "backupConfiguration": {
      "enabled": true
    }
    "databaseFlags":
    [
      {
        "name": "cloudsql_iam_authentication",
        "value": "on"
      }
    ]
  }
}
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような 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-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}
REST v1beta4
リクエストのデータを使用する前に、次のように置き換えます。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances
リクエストの本文(JSON):
{
  "name": "INSTANCE_ID",
  "region": "REGION",
  "databaseVersion": "DATABASE_VERSION",
  "rootPassword": "PASSWORD",
  "settings": {
    "tier": "MACHINE_TYPE",
    "backupConfiguration": {
      "enabled": true
    }
    "databaseFlags":
    [
      {
        "name": "cloudsql_iam_authentication",
        "value": "on"
      }
    ]
  }
}
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような 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-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}