[chef] Aws cookbook and security groups


Chronological Thread 
  • From: Joshua Timberman < >
  • To: "< >" < >
  • Subject: [chef] Aws cookbook and security groups
  • Date: Thu, 15 Nov 2012 05:43:08 +0000
  • Accept-language: en-US

To me it feels like configuring the security group itself is outside the 
scope of a cookbook running on arbitrary nodes. On a system that is deemed 
the centralize place where configuration for general infrastructure level 
changes, maybe. But Aws has that - cloud formation. 

I'm just wary of adding too much scope to the Aws cookbook from a maintenance 
perspective. This is similar to determining where to draw the line in the 
knife-ec2 plugin. It could easily become a replacement for all the ec2 API 
tools. But should it?



On Nov 14, 2012, at 17:30, "Jeffrey Hulten" 
< >
 wrote:

> 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.
> 




Archive powered by MHonArc 2.6.16.

§