У меня есть db сервер db.example.com
CNAME добавлен во внешний домен ec2 ec2-some-ip.aws.com
У меня есть клиент ec2-another-ip.aws.com
пытаюсь подключиться к моему db.example.com. Я предоставил привилегии:
grant all privileges on *.* to 'some_user'@'ec2-another-ip.aws.com';
и в клиенте попробуйте:
mysql -u some_user -h db.example.com
только чтобы получить:
ERROR 1130 (00000): Host 'my-client-internal-mac.compute-1.internal' is not allowed to connect to this MySQL server
Таким образом, он, очевидно, сопоставляет свой внешний домен с интернет-доменом. Итак, как мне заставить mysql разрешить моему клиенту с учетом приведенного ниже ограничения.
ПРИМЕЧАНИЕ Я не могу использовать внутренний IP-адрес, так как все эти серверы смонтированы в корневом каталоге ebs, и я все время запускаю / останавливаю их, поэтому внутренний IP-адрес меняется, но я сопоставляю внешний эластичный IP-адрес каждый раз, когда раскручиваю его, поэтому его внешний IP-адрес всегда одно и то же
Мне немного неудобно оставлять мою безопасность «делегированной на уровень доступа ip / security-group». На самом деле, я не совсем понимаю, что это на самом деле означает.
Кроме того, я расставил точки не Думаю, это хорошая идея - оставлять подстановочные знаки mysql открытыми, если моя цель - взломать.
ИМХО, самый безопасный способ сделать это - использовать эластичные IP-адреса и жестко закодировать IP-адреса в таблице предоставления MySQL (ой, но это лучший способ).
Что именно будет пропускать / запрещать межсетевой экран ec2, зависит от настроек группы безопасности. Будем надеяться, что группа безопасности по умолчанию настроена так, чтобы запрещать весь трафик с любых машин (ec2 или Интернет), которые не принадлежат к той же группе безопасности. ищите здесь хорошее объяснение В любом случае легко по ошибке открыть базу данных ec2 mysql для всего Интернета, если вы недостаточно заботитесь ...
Я также борюсь с той же проблемой: клиент ec2 mysql подключается к серверу ec2 mysql через свой частный ip. Даже если вы назначите эластичный IP-адрес клиенту mysql, это не поможет, так как связь осуществляется через частный IP-адрес, который изменяется при каждой перезагрузке. Возможно, можно заставить клиента mysql подключаться через его общедоступный IP-интерфейс. Это кажется возможным, но, с другой стороны, это может быть дорогостоящим, поскольку общение через публичные IP-адреса в ec2 является платным!
Итак, в настоящее время моя учетная запись db доступна с любого хоста в Интернете (someuser @%), а безопасность делегирована на уровень доступа ip / security-group.
Самый простой способ - предоставить доступ к someuser@%
, что означает "какой-то пользователь с любого хоста". Это снижает безопасность, но этого может быть достаточно, в зависимости от ваших настроек.
В частности, если ваши настройки безопасности EC2 не разрешают общий доступ к порту 3306, это должно быть нормально. Брандмауэр EC2 разрешит доступ только с компьютеров, запущенных под вашей учетной записью.
При настройке по умолчанию группы безопасности Amazon будут препятствовать подключению других клиентов и внешнего мира к MySQL. Если у вас есть несколько экземпляров, которые его используют и создают, перезапускают и т. Д., Тогда нецелесообразно осуществлять контроль доступа на основе IP, поскольку будут постоянно появляться новые IP-адреса. Лучшее, что я могу придумать, - это использовать% .ec2.internal, который будет фильтровать все из Интернета, в качестве второй линии защиты после EC2.