Подключение к mysql внутреннему к ec2
У меня есть дб сервер db.example.com
CNAME'd для его внешнего домена 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 root, и я все время запускаю / останавливаю их, поэтому внутренний ip меняется, но я сопоставляю внешний эластичный ip каждый раз, когда раскручиваю его, чтобы его внешний ip всегда один и тот же
4 ответа
Самый простой способ - предоставить доступ к someuser@%
, что означает "someuser с любого хоста". Это снижает безопасность, но может быть достаточно хорошим в зависимости от ваших настроек.
В частности, если ваши настройки безопасности EC2 не разрешают публичный доступ через порт 3306, это должно быть хорошо. Брандмауэр EC2 разрешает доступ только с компьютеров, запущенных вашей учетной записью.
Что именно будет проходить / запрещать брандмауэр ec2, зависит от настроек группы безопасности. Надеемся, что группа безопасности по умолчанию настроена так, чтобы запретить весь трафик с любых машин (ec2 или интернет), которые не принадлежат к той же группе безопасности. ищите здесь хорошее объяснение. В любом случае, легко по ошибке открыть вашу ec2 mysql db для всего интернета, если вам не все равно...
Я также борюсь с той же проблемой: клиент ec2 mysql подключается к серверу ec2 mysql через его частный ip. Даже если вы назначаете эластичный ip клиенту mysql, это не помогает, так как связь осуществляется через частный ip, который изменяется при каждой перезагрузке. Возможно, возможно заставить клиент mysql соединяться через его публичный интерфейс ip. Это кажется возможным, но с другой стороны это может быть дорогостоящим, поскольку общение через общедоступные ips в ec2 платное!
Так что в настоящее время моя учетная запись db доступна с любого хоста в интернете ( someuser@%), а безопасность делегирована уровню доступа ip/security-group.
При настройке по умолчанию группы безопасности Amazon будут препятствовать подключению других клиентов и внешнего мира к MySQL. Если у вас есть несколько экземпляров, использующих его и создаваемых, перезапускаемых и т. Д., Тогда контроль доступа на основе IP практически не практичен, поскольку постоянно будут появляться новые IP-адреса. Лучшее, что я могу придумать, это использовать%.ec2.internal, который будет фильтровать что-либо из Интернета, в качестве второй линии защиты после EC2.
Мне немного не по себе из-за того, что я оставляю свою безопасность "делегированной для уровня доступа ip/security-group". На самом деле, я не уверен, что это на самом деле означает.
Кроме того, я не думаю, что будет хорошей идеей оставлять открытые гранты mysql открытыми, если моя цель не состоит в том, чтобы их взломали.
IMHO, самый безопасный способ сделать это - использовать эластичные IP-адреса и жестко кодировать IP-адреса в таблице разрешений MySQL (ой, но это лучший способ).