IAM データベース認証用に新規または既存のインスタンスを構成する

このページでは、Cloud SQL インスタンスを作成または編集して、ユーザー、サービス アカウント、またはグループで Cloud SQL IAM データベース認証を使用するように構成する手順について説明します。Cloud SQL IAM のインテグレーションの詳細については、IAM 認証をご覧ください。

新しく作成されたインスタンスには、次の 4 つのシステム データベースがあります。

  • information_schema: データベース メタデータ(MySQL サーバーに関する情報)へのアクセスを提供します。
  • mysql: システム スキーマ。MySQL サーバーの実行時に必要な情報を格納するテーブルが含まれています。
  • performance_schema: MySQL サーバーの実行を低レベルでモニタリングする機能。
  • sys: DBA とデベロッパーがパフォーマンス スキーマによって収集されたデータの解釈に役立つ一連のオブジェクトが含まれています。

始める前に

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. ユーザー アカウントに Cloud SQL 管理者のロールと Compute 閲覧者のロールがあることを確認します。

    IAM ページに移動

    ロールと権限について詳細を確認します

IAM データベース認証に新しいインスタンスを構成する

IAM データベース認証用に新しい Cloud SQL インスタンスを構成するには、cloudsql_iam_authentication フラグを有効にする必要があります。このフラグを有効にすると、Cloud SQL インスタンスに IAM ユーザー、サービス アカウント、またはグループを追加できます。

IAM データベース認証を使用するように新しい Cloud SQL インスタンスを構成するには:

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. [インスタンスを作成] をクリックします。
  3. [MySQL を選択] をクリックします。
  4. インスタンス ID の名前を入力します。
  5. インスタンス名には機密情報や個人を特定できる情報を含めないでください。インスタンス名は外部から閲覧可能です。インスタンス名にプロジェクト ID を含める必要はありません。プロジェクト ID は必要に応じて自動的に含まれます(ログファイルの場合など)。
  6. root ユーザーのパスワードを入力します。
  7. [データベースのバージョン] メニューで、データベースのバージョンを選択します。
  8. [リージョンとゾーンの可用性の選択] セクションで、インスタンスのリージョンとゾーンを選択します。インスタンスにアクセスするリソースと同じリージョンにインスタンスを配置します。選択したリージョンは後から変更できません。通常、ゾーンを指定する必要はありません。
  9. [インスタンスのカスタマイズ] セクションで [構成オプションを表示] をクリックし、[フラグ] を開きます。
  10. [フラグを追加] をクリックします。
  11. [フラグを選択] メニューから、cloudsql_iam_authentication フラグを選択します。このフラグの値として [オン] が選択されていることを確認し、[完了] をクリックします。
  12. 必要に応じて、他のインスタンス設定を構成します。設定の詳細については、設定をご覧ください。
  13. [インスタンスを作成] をクリックします。

gcloud

--database-flags パラメータを cloudsql_iam_authentication=on に設定して gcloud sql instances create を実行します。

次のように置き換えます。

  • 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 ユーザーのパスワードを作成します。
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 リソースを使用します。

resource "google_sql_database_instance" "default" {
  name             = "mysql-db-auth-instance-name-test"
  region           = "us-west4"
  database_version = "MYSQL_8_0"
  settings {
    tier = "db-f1-micro"
    database_flags {
      name  = "cloudsql_iam_authentication"
      value = "on"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

変更を適用する

Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。

Cloud Shell を準備する

  1. Cloud Shell を起動します。
  2. Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。

    このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。

ディレクトリを準備する

Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。

  1. Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は .tf にする必要があります(例: main.tf)。このチュートリアルでは、このファイルを main.tf とします。
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。

    新しく作成した main.tf にサンプルコードをコピーします。

    必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。

  3. 環境に適用するサンプル パラメータを確認し、変更します。
  4. 変更を保存します。
  5. Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
    terraform init

    最新バージョンの Google プロバイダを使用する場合は、-upgrade オプションを使用します。

    terraform init -upgrade

変更を適用する

  1. 構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
    terraform plan

    必要に応じて構成を修正します。

  2. 次のコマンドを実行します。プロンプトで「yes」と入力して、Terraform 構成を適用します。
    terraform apply

    Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。

  3. Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。

変更を削除する

変更を削除するには、次の手順を行います。

  1. 削除の保護を無効にするには、Terraform 構成ファイルで deletion_protection 引数を false に設定します。
    deletion_protection =  "false"
  2. 次のコマンドを実行します。プロンプトで「yes」と入力して、更新された Terraform 構成を適用します。
    terraform apply
  1. 次のコマンドを実行します。プロンプトで「yes」と入力して、以前に Terraform 構成で適用されたリソースを削除します。

    terraform destroy

REST v1

インスタンス名には機密情報や個人を特定できる情報(PII)を含めないでください。インスタンス名は外部から閲覧可能です。

インスタンス名にプロジェクト ID を含める必要はありません。プロジェクト ID は必要に応じて自動的に含まれます(ログファイルの場合など)。

リクエストのデータを使用する前に、次のように置き換えます。

  • 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]

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 API リクエストがこのタスクでどのように作成されるかについては、instances:insert ページの API Explorer をご覧ください。

REST v1beta4

インスタンス名には機密情報や個人を特定できる情報(PII)を含めないでください。インスタンス名は外部から閲覧可能です。

インスタンス名にプロジェクト ID を含める必要はありません。プロジェクト ID は必要に応じて自動的に含まれます(ログファイルの場合など)。

リクエストのデータを使用する前に、次のように置き換えます。

  • 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]

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"
}
基盤となる REST API リクエストがこのタスクでどのように作成されるかについては、instances:insert ページの API Explorer をご覧ください。

IAM データベース認証に既存のインスタンスを構成する

IAM データベース認証用に既存の Cloud SQL インスタンスを構成するには、cloudsql_iam_authentication フラグを有効にする必要があります。このフラグを有効にすると、Cloud SQL インスタンスに IAM ユーザー、サービス アカウント、またはグループを追加できます。

IAM データベース認証を使用するように既存の Cloud SQL インスタンスを構成するには:

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [編集] をクリックします。
  4. [インスタンスのカスタマイズ] セクションで、[フラグ] を開きます。
  5. [フラグを追加] をクリックします。
  6. [フラグを選択] メニューから、cloudsql_iam_authentication フラグを選択します。このフラグの値として [オン] が選択されていることを確認し、[完了] をクリックします。
  7. 必要に応じて、他のインスタンス設定を構成します。設定の詳細については、設定をご覧ください。
  8. [保存] をクリックします。

gcloud

gcloud CLI のインストールと使用開始については、gcloud CLI をインストールするをご覧ください。Cloud Shell の起動については、Cloud Shell を使用するをご覧ください。

この手順では、 gcloud sql instances patch を使用します。

次のように置き換えます。

  • INSTANCE_NAME: 新しいインスタンスの名前。
gcloud sql instances patch INSTANCE_NAME \
--database-flags=cloudsql_iam_authentication=on

これにより、他の既存のデータベース フラグの設定がリセットされます。データベース フラグの設定方法について詳しくは、データベース フラグを設定するをご覧ください。


REST v1

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • LOCATION_ID: ロケーション ID
  • INSTANCE_ID: 目的のインスタンス ID
  • REGION: 目的のリージョン
  • DATABASE_VERSION: データベース バージョンの列挙型文字列。例: MYSQL_8_0
  • PASSWORD: root ユーザーのパスワード
  • MACHINE_TYPE: マシン(階層)タイプの列挙型文字列(例: db-custom-[CPUS]-[MEMORY_MBS]

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

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • LOCATION_ID: ロケーション ID
  • INSTANCE_ID: 目的のインスタンス ID
  • REGION: 目的のリージョン
  • DATABASE_VERSION: データベース バージョンの列挙型文字列。例: MYSQL_8_0
  • PASSWORD: root ユーザーのパスワード
  • MACHINE_TYPE: マシン(階層)タイプの列挙型文字列(例: db-custom-[CPUS]-[MEMORY_MBS]

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"
}

次のステップ