クラウドSQLでの機密データのセキュリティー保護


我々は我々のGKEオートパイロットクラスタを作成しました.この部分では、クラウドSQLインスタンスを構成します.
次のリソースが作成されます.
  • 非常に利用可能なプライベートクラウドSQLのMySQLインスタンス
  • データベースとユーザ
  • プライベート接続のための自動内部IP範囲
  • GCPサービスへのプライベート接続

  • クラウドSQL

  • 使用するクラウドSQLインスタンスは、MySQLデータベースサーバーです
  • The Multiples zones オプションを有効にする
  • インスタンスが公開されておらず、そのプライベートIP
  • 認証はIAM
  • 自動バックアップ
  • 後でデータベースとユーザを作成します
  • 地形ファイルを作成するinfra/plan/cloud-sql.tf
    resource "random_string" "db_name_suffix" {
      length  = 4
      special = false
      upper   = false
    }
    
    resource "google_sql_database_instance" "mysql" {
    
      # Instance info
      name             = "mysql-private-${random_string.db_name_suffix.result}"
      region           = var.region
      database_version = var.mysql_database_version
    
      settings {
    
        # Region and zonal availability
        availability_type = var.mysql_availability_type
        location_preference {
          zone = var.mysql_location_preference
        }
    
        # Machine Type
        tier              = var.mysql_machine_type
    
        # Storage
        disk_size         = var.mysql_default_disk_size
    
        # Connections
        ip_configuration {
          ipv4_enabled        = false
          private_network     = google_compute_network.custom.id
        }
    
        # Backups
        backup_configuration {
          binary_log_enabled = true
          enabled = true
          start_time = "06:00"
        }
      }
      depends_on = [
        google_service_networking_connection.private-vpc-connection
      ]
    }
    
    data "google_secret_manager_secret_version" "wordpress-admin-user-password" {
      secret = "wordpress-admin-user-password"
    }
    
    resource "google_sql_database" "wordpress" {
      name     = "wordpress"
      instance = google_sql_database_instance.mysql.name
    }
    
    resource "google_sql_user" "wordpress" {
      name = "wordpress"
      instance = google_sql_database_instance.mysql.name
      password = data.google_secret_manager_secret_version.wordpress-admin-user-password.secret_data
    }
    
    次の出力を追加
    output "cloud-sql-connection-name" {
      value = google_sql_database_instance.mysql.connection_name
    }
    
    output "cloud-sql-instance-name" {
      value = "mysql-private-${random_string.db_name_suffix.result}"
    }
    

    プライベートコネクション


    IPアドレス範囲を割り当て、プライベートサービス接続を作成するためにプライベートサービスアクセスを設定する必要があります.これにより、Webサブネット内のリソースがクラウドSQLインスタンスに接続できます.
    コンプリートファイルinfra/plan/vpc.tf 次のリソースを使用します.
    resource "google_compute_global_address" "private-ip-peering" {
      name          = "google-managed-services-custom"
      purpose       = "VPC_PEERING"
      address_type  = "INTERNAL"
      prefix_length = 24
      network       = google_compute_network.custom.id
    }
    
    resource "google_service_networking_connection" "private-vpc-connection" {
      network = google_compute_network.custom.id
      service = "servicenetworking.googleapis.com"
      reserved_peering_ranges = [
        google_compute_global_address.private-ip-peering.name
      ]
    }
    
    コンプリートファイルinfra/plan/variable.tf :
    variable "region" {
      type = string
      default = "europe-west1"
    }
    
    variable "mysql_location_preference" {
      type = string
      default = "europe-west1-b"
    }
    
    variable "mysql_machine_type" {
      type = string
      default = "db-n1-standard-2"
    }
    
    variable "mysql_database_version" {
      type = string
      default = "MYSQL_8_0"
    }
    
    variable "mysql_default_disk_size" {
      type = string
      default = "100"
    }
    
    variable "mysql_availability_type" {
      type = string
      default = "REGIONAL"
    }
    
    変更を適用する前に、ユーザパスワードの秘密を作成する必要があります.
    gcloud services enable secretmanager.googleapis.com --project $PROJECT_ID
    
    gcloud beta secrets create wordpress-admin-user-password --locations $REGION --replication-policy user-managed
    echo -n "changeme" | gcloud beta secrets versions add wordpress-admin-user-password --data-file=-
    
    クラウドSQLインスタンスを配備しましょう
    cd infra/plan
    
    gcloud services enable sqladmin.googleapis.com --project $PROJECT_ID
    
    terraform apply
    
    すべてのリソースが作成され、正しく動作しているかどうかを確認します.
    クラウドSQLインスタンス

    ピアリング接続

    プライベートコネクション

    結論


    私たちのクラウドのSQLインスタンスが利用可能になりました.ここでは、GKEクラスタで展開されたコンテナーと、クラウドSQLインスタンスで作成されたデータベース間の接続を確立します.