Неожиданная версия протокола 74 при подключении terraform к ресурсу AWS через туннель BASTION/SOCKS5.

У меня есть база данных MySQL в частной подсети на AWS. Мне нужен поставщик MySQL Terraform для подключения к нему с помощью прокси-сервера BASTION SOCKS5. Скрипт Terraform запущен на моем компьютере. Из командной строки моего ПК (Ubuntu) я могу туннелировать по SSH к базе данных MySQL и успешно подключиться, однако когда я использую Terraform для того же, я получаю тайм-аут через 5 минут со следующей ошибкой:

      Error: failed to connect to MySQL: could not connect to server: socks connect tcp 127.0.0.1:3306->attd-community-mysql-instance.xxxx.eu-west-1.rds.amazonaws.com:3306: unexpected protocol version 74

Настройка Terraform выглядит следующим образом:

      Terraform v1.5.4
on linux_amd64
+ provider registry.terraform.io/hashicorp/aws v4.5.0
+ provider registry.terraform.io/hashicorp/random v3.5.1
+ provider registry.terraform.io/petoju/mysql v3.0.37
      terraform {
    required_providers {
        aws = {
            source = "hashicorp/aws"
            version = "~>4.5.0"
        }
        mysql = {
            source = "petoju/mysql"
            version = ">= 3.0.37"
        }
    }
    required_version = ">= 0.14.9"
}

provider "aws" {
    profile = "default"
    region = local.region
    default_tags {
        tags = {
            Source = "three-tier-workshop/src/rds-system-users"
        }
    }
}

provider "mysql" {
    endpoint = "${local.rds_hostname}:${local.rds_port}"
    username = local.rds_admin_username
    password = local.rds_admin_password
    proxy = "socks5://127.0.0.1:3306"
}

resource "mysql_database" "web_tier_db" {
    name = "webappdb"
}

Прокси SOCKS5 настраивается следующим образом:

      resource "aws_instance" "bastion_host" {
    instance_type = "t2.micro"
    ami           = "ami-01dd271720c1ba44f"
    subnet_id     = local.bastion_subnet_id

    associate_public_ip_address = true
    key_name                    = var.bastion_client.key_name
    security_groups             = [aws_security_group.bastion_host.id]
}

resource "aws_security_group" "bastion_host" {
    name = "attd-bastion_host"
    description = "Allow bastion access from specific IP"
    vpc_id = local.vpc_id

    ingress {
        description = "Allow SSH access"
        from_port   = 22
        to_port     = 22
        protocol    = "tcp"
        cidr_blocks = ["${var.bastion_client.source_ip}/32"]
    }

    egress {
        from_port   = 0
        to_port     = 0
        protocol    = "-1"
        cidr_blocks = ["0.0.0.0/0"]
    }
}

Обратите вниманиеvar.bastion_client.source_ipмой локальный IP.

Я создаю туннель через прокси SOCKS5 следующим образом:

      ssh -i "~/.ssh/haden-bastion-test.pem" -f -N -L 3306:attd-community-mysql-instance.xxxx.eu-west-1.rds.amazonaws.com:3306 ubuntu@<SOCKS_HOST_PUBLIC_IP>

Когда я запускаю команду, я получаю такой вывод:

      data.terraform_remote_state.rds_cluster: Reading...
data.terraform_remote_state.network: Reading...
data.terraform_remote_state.rds_cluster: Read complete after 0s
data.terraform_remote_state.network: Read complete after 0s
data.aws_secretsmanager_secret.cluster_admin_user: Reading...
data.aws_secretsmanager_secret.cluster_admin_user: Read complete after 1s [id=arn:aws:secretsmanager:eu-west-1:####:secret:attd-community-mysql-instance/mysql/credentials/admin-7PnVKe]
data.aws_secretsmanager_secret_version.cluster_admin_user: Reading...
data.aws_secretsmanager_secret_version.cluster_admin_user: Read complete after 0s [id=arn:aws:secretsmanager:eu-west-1:####:secret:attd-community-mysql-instance/mysql/credentials/admin-XXXX|AWSCURRENT]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # mysql_database.web_tier_db will be created
  + resource "mysql_database" "web_tier_db" {
      + default_character_set = "utf8mb4"
      + default_collation     = "utf8mb4_general_ci"
      + id                    = (known after apply)
      + name                  = "webappdb"
    }

---
Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

mysql_database.web_tier_db: Creating...
mysql_database.web_tier_db: Still creating... [10s elapsed]
mysql_database.web_tier_db: Still creating... [20s elapsed]
mysql_database.web_tier_db: Still creating... [30s elapsed]
...
mysql_database.web_tier_db: Still creating... [4m40s elapsed]
mysql_database.web_tier_db: Still creating... [4m50s elapsed]
╷
│ Error: failed to connect to MySQL: could not connect to server: socks connect tcp 127.0.0.1:3306->attd-community-mysql-instance.XXXX.eu-west-1.rds.amazonaws.com:3306: unexpected protocol version 74
│ 
│   with mysql_database.web_tier_db,
│   on database.tf line 1, in resource "mysql_database" "web_tier_db":
│    1: resource "mysql_database" "web_tier_db" {
│ 
╵

я ожидалterraform applyкоманда завершиться примерно через 30-40 секунд и создатьwebappdbбаза данных.

Может ли кто-нибудь помочь с этим, пожалуйста?


Если я подключусь по SSH напрямую к прокси-серверу и запущуnetstatПока скрипт terraform работает, я вижу следующее: похоже, что делается попытка подключения к серверу MySQL, но сервер не отвечает.

      Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      384/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      652/sshd: /usr/sbin 
tcp        0      0 10.1.1.84:22            xxx.xxx.xxx.xxx:53440   ESTABLISHED 1227/sshd: ubuntu [ 
tcp        0      0 10.1.1.84:36416         10.1.22.148:3306        TIME_WAIT   -                   
tcp        0      0 10.1.1.84:45844         10.1.22.148:3306        TIME_WAIT   -                   
tcp        0      0 10.1.1.84:49796         10.1.22.148:3306        TIME_WAIT   -                   
tcp        0      0 10.1.1.84:56982         10.1.22.148:3306        TIME_WAIT   -                   
tcp        0      0 10.1.1.84:40508         10.1.22.148:3306        TIME_WAIT   -                   
tcp        0    356 10.1.1.84:22            xxx.xxx.xxx.xxx:46458   ESTABLISHED 1334/sshd: ubuntu [ 
tcp        0      0 10.1.1.84:46734         10.1.22.148:3306        TIME_WAIT   -                   
tcp6       0      0 :::22                   :::*                    LISTEN      652/sshd: /usr/sbin 
udp        0      0 127.0.0.1:323           0.0.0.0:*                           464/chronyd         
udp        0      0 127.0.0.53:53           0.0.0.0:*                           384/systemd-resolve 
udp        0      0 10.1.1.84:68            0.0.0.0:*                           382/systemd-network 
udp6       0      0 ::1:323                 :::*                                464/chronyd         

Я попытался подключиться напрямую из скрипта terraform, используяproxy = "socks5://<SOCK_HOST_PUBLIC_IP:3306"однако у меня были те же результаты.

Я попытался установить хост носков в качестве переменной среды, используяexport all_proxy="socks5://127.0.0.1:3306"однако у меня были те же результаты.

0 ответов

Другие вопросы по тегам