The HDFS Juggernaut
blog.shodan.io
blog.shodan.io
Given the distributed nature, HDFS runs on multiple machines. In linux distributed service security fits well with kerberos. Normally if you want a "secure" HDFS you must "kerberize" the services such that any hadoop operation requires a valid/authorized TGT.
To most people kerberizing a hadoop cluster is a major barrier to getting hadoop running. I dont see this changing but certain vendor hadoop distros break down some of the barriers.
Sometimes it is OK if you run a cluster insecure. Please dont do it if youre handling my financial or medical records though. As Mr.T once said 'dont write checks that yo ass cant cash'
The same is not true for certificates which (in my subjective experience from securing tens of clusters) always cause issues.
I wonder what you mean by "operational complexity" considering that once you have the principals created there's basically no overhead....
Or to put it differently: Can you elaborate on which problem you're trying to solve?
Yeah, getting a new client certificate issued for a system account is like trying to squeeze blood out of stone.
The problem we're addressing is multi-tenancy for users on Hadoop. If you have sensitive data and want to restrict access to it, you need at a minimum dynamic roles or attribute-based access controls. With Kerberos, you have a single ID, a single role. You can't revoke privileges from users, give him/her access to a dataset, then restore privileges. We introduced dynamic roles by introducing a new abstraction - a project. You get a project-specific username - and a new cert for every project-specific username. Unlike Kerberos with the centralized KDC, cert generation can be scaled out with intermediate servers. This way, you can give a project-specific user access to sensitive data in a project - and the user can't export the data, as that user only has privileges for resources within the project. You can still share datasets across projects using either ACLs or group privileges in HDFS.
With Kerberos you have a single Id, yes but that is augmented by groups coming from LDAP and RBAC systems like Sentry & Ranger.
Also having another system issuing certificates automatically is a no-go in lots of companies and especially security conscious industries.
I'm not saying that there's not a market for what you're developing - I'm merely trying to understand and I have a hard time. Your homepage, I'm afraid though, is useless at conveying any information about what you're actually doing.
I agree the homepage sucks - it's on our todo list :)
Sure, but put it behind a VPN or something. This article is literally about clusters accessible via the public Internet. If there's a legitimate, non-trivial use case in which that's ever okay, I'm curious to know them.
Honeypot? :P
https://www.shodan.io/search?query=NODATA4U_SECUREYOURSHIT
That's a list of hadoop nodes you can access via the public Internet.
Didn't we learn anything from register_globals?
Most people want the simple insecure one for their lab to see if it will work for them before they deploy the locked down version on the internet. Of course the part where they make sure to secure the production one is where people forget.
This isn't crazy. If someone asks me to do some benchmarks on an app to see if it would fit our problem, the last thing I want is to spend a week working up a federation of keyservers and a fake domain and everything else that the deployed product will require. If the product doesn't fit our need that's just wasted time.
"Allow easy access with no password or username, but only from localhost"
Not foolproof, but as far as I know both this and mongo did the "bind to all ports AND allow access with no password". It was the combo that really killed it.
The warnings don't stop the initial trial of a service, but are in-your-face enough that any self respecting admin will review the matter before making the service available on a public network (at least with real data and/or on machines/accounts with access to other securables).
Your users may request (in fact, some of them will demand) a setting that turns such warnings off without addressing the issues covered/ You might chose to include such a setting (at least then they make a conscious decision to not address the issues instead of later complaining your product was insecure without warning) or take the high ground and tell people who say "unless you let me get away with an insecure setup I'll use something else" that you;d rather they go use something else instead of potentially tarnishing your product by association when something goes wrong.
Of course like providing good documentation, this is extra work that you may find hard to get by your paymasters at crunch time...
Just look at the comments posted to any "how to install foo" blog post or browse around StackExchange, et al., for a few minutes. As an example, there are still tons of people who do things like "chmod 0777 ..." to "fix" permissions issues.
Oh great, it's saying permission denied, but doesn't tell me where the permission was denied. Now I have to check all permissions everywhere to figure out what the problem is, once I figure out how the product works and where it might have permissions.
I'd take at look at OS and application service logs, then break out the various flavors of diagnostic tools-- strace, ProcMon, etc. It's not ideal, but it's the sorry state of affairs in the industry.
Insecure-by-default isn't the answer to bad error messages.
If you're a developer (not you, per se) running into these types of issues, well, now you understand why -- until recently -- there has traditionally been a separate operations group that was responsible for this type of stuff.
But the problem is people doing it that way and putting the result into production without any sort of security review.
Me: Fuck, now I've got to set up Kerberos and get all of the certs lined up before I can even see if this thing will work for us...
Step 2: Enter your CORBA...
Me: How much do we really want this solution...
And this is the same software that behaves perfectly reasonably when installed as a package directly on a Linux box; it's just when it thinks it's being used over the network because I'm running macOS and it needs to be in a Linux sandbox, that it starts acting all aggressive.
At least give me a flag to let me explicitly tell the software to relax!
There is such a flag for your use case[1]. Start the node in the Docker container with
discovery.type: single-node
This allows the node to bind HTTP and transport protocols to non-localhost interfaces and not enforce the bootstrap checks[2][3]. The node can not form a cluster with another node, but that's okay for development use cases. It's design was intended to address the Docker development use case.I hope that helps!
Disclaimer: I work at Elastic; I welcome any and all feedback
[1]: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/...
I don't necessarily agree with it, but having to screw around with authentication/certs/ssl when just playing/trying out a product is annoying.
Not everyone has the patience to deal with this.
So a 10-step install means that if a million people discover the app only about 900 will get it running.
As complexity and general noise increases this effect will become more pronounced. People just do not have time for time-consuming installs. The information age is the age of distraction and so if something takes a lot of time "plonk" into the trash it goes.
There are ways to secure things with decent UX. At the very least the defaults could allow direct access only from private IP ranges and require explicit configuration to set otherwise. This would prevent people from shooting themselves in the foot this way.
I have two quotes printed on the back of my business cards. One of those is: "If you don't the time to do it right, when will you have the time to do it over?"
I remember hearing something to the effect of "temporary setups never are" and, in all but the most disciplined environments, I've generally found that to hold true.
But also there should be no way to get it working insecurely. Should just refuse to run until everything is secure, data limits, timeout limits, retry limits, ip limits, account limits, password complexity, etc.
Typically, I secure private resources via firewalls in the networking layer. A properly configured firewall with intelligent routing rules makes up for a lot of sins in both operating system and application security. If you have servers in a private subnet with a well defined gateway, application level security is just needless complication and overhead. Though admittedly, I am not a security expert.
Insecure by default is not a big issue if it has its own dedicated network with restricted access in or out.
95% of the installations of a Hadoop cluster do not have a problem that justifies a Hadoop cluster.
from an outsider perspective (I've never used/run hadoop) I cannot see much reason for exposing the cluster to the outside world - either a web-app acts as an intermediary or access can be provided via VPN/ssh-tunnel/etc
... just curious why a fully/publically exposed cluster would be a "requirement"? or does it come down to the fact that firewalling an AWS environment is as painful (if not more) than "kerberizing" a [hadoop] cluster? (I kind of assumed AWS has firewalling functionality that is fairly plug'n'play ... a quick search does really back that up though)
So: Yes, a Hadoop cluster should always be firewalled (secured or not) and have well defined access points via edge nodes as well as holes in the firewall for specific services that need to be exposed.
Kerberizing is a pain but not usually needed. You're correct that AWS firewall rules are very easy.
What you're seeing in this article is the exception, people doing it totally wrong.
Not levelling this comment at HDFS solely but it's about time people stopped with the 'hello world' style examples.
Unfortunately not having the initial "this is the core, look how simple it can be" example a lot of people will turn off.
> (and usually no documentation on how one should do it)
That is the issue. Good documentation is often the issue for many other reasons too. For commercial projects time is money and so often not available in sufficient quantity (at least for externally facing documentation that may be held to standards that internal materials are not so needs extra resource for review+rework). For unfunded work (for instance things that start out as personal projects and/or quick proofs of concept, or many community-only driven works) documentation often gets left because it isn't the interesting/sexy part.