IAM 데이터베이스 인증을 위한 새 인스턴스 및 기존 인스턴스 구성

이 페이지에는 Cloud SQL IAM 데이터베이스 인증을 사용하도록 구성된 사용자, 서비스 계정 또는 그룹을 허용하기 위해 Cloud SQL 인스턴스를 만들거나 수정하는 절차를 제공합니다. 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. 루트 사용자의 비밀번호를 입력합니다.
  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: 머신의 메모리 용량입니다. 크기 단위를 제공해야 합니다(예: 3072MiB 또는 9GiB).
  • ZONE: 선호하는 Compute Engine 영역(예: us-central1-a 또는 us-central1-b 등)입니다.
  • PASSWORD: 루트 사용자의 비밀번호를 만듭니다.
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 프로젝트를 설정합니다.

    이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서도 실행할 수 있습니다.

    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을 초기화합니다. 이 작업은 디렉터리당 한 번만 수행하면 됩니다.
    terraform init

    원하는 경우 최신 Google 공급업체 버전을 사용하려면 -upgrade 옵션을 포함합니다.

    terraform init -upgrade

변경사항 적용

  1. 구성을 검토하고 Terraform에서 만들거나 업데이트할 리소스가 예상과 일치하는지 확인합니다.
    terraform plan

    필요에 따라 구성을 수정합니다.

  2. 다음 명령어를 실행하고 프롬프트에 yes를 입력하여 Terraform 구성을 적용합니다.
    terraform apply

    Terraform에 '적용 완료' 메시지가 표시될 때까지 기다립니다.

  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: 루트 사용자의 비밀번호입니다.
  • 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 탐색기를 참조하세요.

REST v1beta4

인스턴스 이름은 외부에 공개되므로 민감한 정보나 개인 식별 정보(PII)는 포함하지 마세요.

인스턴스 이름에 프로젝트 ID를 포함하지 않아도 됩니다. (예: 로그 파일에서) 필요한 경우 프로젝트 ID가 자동으로 포함됩니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • INSTANCE_ID: 원하는 인스턴스 ID입니다.
  • REGION: 원하는 리전(예: us-east-1)입니다.
  • PROJECT_ID: 프로젝트 ID입니다.
  • LOCATION_ID: 위치 ID입니다.
  • DATABASE_VERSION: 데이터베이스 버전의 열거형 문자열입니다. 예를 들면 MYSQL_8_0입니다.
  • PASSWORD: 루트 사용자의 비밀번호입니다.
  • 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 탐색기를 참조하세요.

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: 루트 사용자의 비밀번호입니다.
  • 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: 루트 사용자의 비밀번호입니다.
  • 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"
}

다음 단계