- From: Jeffrey Hulten <
>
- To:
- Subject: [chef] Re: Re: Re: Re: Re: why does mysql on ec2 bind to priviate i.p?
- Date: Wed, 14 Nov 2012 16:30:09 -0800
Without going too off topic, I usually don't use default for that very
reason. Also having monitoring rules to watch the settings of your security
groups (and vpcs and elbs…) is a good plan.
I should really add to the AWS cookbook to support converging SGs...
--
Jeffrey Hulten
Principal Consultant at Automated Labs, LLC
206-853-5216
Skype: jeffhulten
On Nov 14, 2012, at 12:36 PM, Charles Johnson wrote:
>
I'm certainly not trying to spread any FUD about security and EC2.
>
Security groups are great, I'm a huge fan! Use them!
>
>
That said, you might be amazed at how many times Helpful Friendly Junior
>
Sysadmin has just added every machine to the default security group, and
>
then enabled 3306 TCP. This is clearly insane behavior.
>
>
But the point of a sane default is to keep things operating in a
>
predictable, reliable, & secure fashion, even when people do insane
>
things. In this case, compounding potential user insanity by default
>
binding mysql to 0.0.0.0 would be the most predictable behavior, but also
>
the least reliable or safe.
>
>
To my mind, defaulting to reliability and safety over predictability in
>
this case is the most sane course of action. Thus my voicing support for
>
the current default setting in the mysql cookbook.
>
>
Thanks,
>
--Charles
>
>
--
>
On 11/14/12 11:09 AM, "Jeffrey Hulten"
>
<
>
>
wrote:
>
>
>
> Your other instances cannot access each other unless one of their
>
> security groups is allowed inbound access. The default SG is configured
>
> this way.
>
>
>
> There is a lot of FUD about security and EC2. Remember that what you have
>
> is a software based firewall controlling ingress to your box. Your
>
> packets share wires with other packets, even if you can't see them.
>
>
>
> If you think there are issues with AWS security groups then by all means
>
> add iptables to your hosts and limit access that way.
>
>
>
> Also, if you have that level of security requirements you should probably
>
> be using ssl to protect your data in transit.
>
> http://dev.mysql.com/doc/refman/5.6/en/ssl-connections.html
>
>
>
>
>
>
>
> --
>
> Jeffrey Hulten
>
> Principal Consultant at Automated Labs, LLC
>
>
>
> 206-853-5216
>
> Skype: jeffhulten
>
>
>
> On Nov 14, 2012, at 10:26 AM, S Ahmed wrote:
>
>
>
>> Thanks, I'll look into this further so it sinks in :)
>
>>
>
>> BTW, why is ec2 inherently not secure? The default security group
>
>> doesn't have 3306 open anyhow, so you wouldn't be mooning the entire
>
>> world per say, only your other instances (which I believe by default all
>
>> your other instances can access).
>
>>
>
>>
>
>> On Wed, Nov 14, 2012 at 12:04 PM, Charles Johnson
>
>> <
>
>
>> wrote:
>
>> The real problem here is an outdated limitation in mysql.
>
>>
>
>> Unfortunately, mysql only takes one bind-address argument rather than
>
>> an array, so it's impossible to listen on a limited subset of local
>
>> addresses. You may decide to have mysql listen on all bound IP
>
>> addresses, or one and only one bound IP address, but you many not listen
>
>> a subset of all bound IP addresses (unless you bring local firewalls
>
>> into the picture, but that's another discussion).
>
>>
>
>> When running in an inherently insecure environment such as EC2, binding
>
>> to 0.0.0.0 and allowing connections from any host is an unacceptable
>
>> default. This leaves an unfortunate dilemma: Either bind to the private
>
>> IP address and disallow traffic from localhost, or bind to localhost and
>
>> only allow traffic from self.
>
>>
>
>> If the default is to bind to localhost, this will cause countless hours
>
>> of frustration as people try to figure out why the database isn't
>
>> accessible from their external servers out of the box. However, since
>
>> it's possible for a node in EC2 to access its own private IP address and
>
>> resolve it to a hostname, the default that arguably solves the most
>
>> problems and creates the least frustration is to bind to the private IP
>
>> address.
>
>>
>
>> Many people get around this problem by using unix sockets for
>
>> communication to mysql if they're running the app and database on the
>
>> same node. Unfortunately in your case, JDBC is 100% TCP/IP and doesn't
>
>> support unix sockets. The solution for you is either to override the
>
>> cookbook's default bind_address to 127.0.0.1, or to use a template to
>
>> get the hostname into your application's config file instead of
>
>> localhost.
>
>>
>
>> tl;dr: The default behavior of the cookbook is sane, even though it's
>
>> inconvenient for many use cases. You'll need to override the cookbook's
>
>> default attribute back to localhost, or address the database via the
>
>> hostname instead of localhost.
>
>>
>
>> Thanks,
>
>> --Charles
>
>>
>
>>
>
>> From: S Ahmed
>
>> <
>
>
>> Reply-To:
>
>> "
"
>
>>
>
>> <
>
>
>> Date: Wednesday, November 14, 2012 8:33 AM
>
>> To:
>
>> "
"
>
>>
>
>> <
>
>
>> Subject: [chef] Re: Re: why does mysql on ec2 bind to priviate i.p?
>
>>
>
>> If I set it to 127.0.0.1, does this mean I can't access it from another
>
>> ec2 server then?
>
>>
>
>> The problem is during deployment, I don't know the private i.p in
>
>> advance and during deployment all my database configuration information
>
>> has 'localhost' in it. I understand what you guys are saying and it
>
>> does make sense, I just have to modify my deployment process to first
>
>> pull in the private ip's for each service (I should be doing this anyhow
>
>> as eventually not everything is going to fit on a single instance!)
>
>>
>
>>
>
>> On Wed, Nov 14, 2012 at 9:26 AM, Joshua Timberman
>
>> <
>
>
>> wrote:
>
>> On 11/13/12 9:28 PM, "S Ahmed"
>
>> <
>
>
>> wrote:
>
>>
>
>>
>
>>> I noticed when I used the mysql recipe it installs mysql and binds it
>
>> to
>
>>> the private i.p on ec2, why is that?
>
>>>
>
>>> My application can't connect as it uses 'localhost' (jdbc), but for
>
>> some
>
>>> reason it works fine using ruby.
>
>>
>
>> The reason for not using localhost is because in the opinion of the
>
>> cookbook, it is more useful to have the server accessible on the
>
>> [private]
>
>> network so that other systems like application servers can connect to
>
>> it.
>
>> We use the private address on cloud providers because, as Matt pointed
>
>> out, it may cost money for external bandwidth. Also, having your
>
>> database
>
>> server accessible on the external network is bad :).
>
>>
>
>> You can set the attribute `node['mysql']['bind_address']` in a role or
>
>> on
>
>> the node itself, to use loopback.
>
>>
>
>>
>
>> For example, in a role:
>
>>
>
>> default_attributes(
>
>> "mysql" => {
>
>> "bind_address" => "127.0.0.1"
>
>> }
>
>> )
>
>>
>
>> On the node itself would be the JSON equivalent of the above.
>
>>
>
>>
>
>>
>
>>
>
>
>
>
Attachment:
signature.asc
Description: Message signed with OpenPGP using GPGMail
Archive powered by MHonArc 2.6.16.