[翻訳]「インターネットに公開された」Apache Hadoopのセキュリティを確保する方法

このブログ記事は、How to secure ‘Internet exposed’ Apache Hadoopの翻訳です。

原著者: Manish Ahluwalia


MongoDBApache Hadoopなどのオープンソースデータベースソリューションを対象とした最近の(そして進行中の)ハックについて聞いたことがあるかもしれません。 我々の知るところでは、未知数のハッカーがデフォルトの非セキュア構成を使用して設定されたインターネットからアクセス可能なインストールをスキャンしていました。外部露出を発見したハッカーは、システムにアクセスし、ファイルを削除したり、身代金のためにそれらを保持したりしています。

これらの攻撃は技術的に洗練されたものではなく、本来であれば簡単に回避することができたものです。

我々は、このハックの被害を受けた多くのHadoopサイトを設定したユーザは自分のサイトが外部暴露されていることに気づいていなかったのではと思い、Clouderaのお客様が自分自身を守ることができるようにしたいと思っています。このブログ記事は、自分自身を守るにはどうすればいいかを説明することを目的としています。

セキュリティは複雑なトピックであり、この記事だけではその内容を完全に説明することはできません。 我々の目標は、Clouderaのインストールにアクセスする権限を持つ人だけがアクセスできるようにすることです。 次に、クラスタの保護に必要な追加作業を実施することをお勧めします。 このブログの情報は一般的なもの(つまり、すべてのユーザーを対象としているもの)で、Hadoopのセキュリティを向上させるために必要な基本的な手順のみを提供しているため、Clouderaお客様は、完全で堅牢なセキュリティレビューと構成のために我々に直接お問い合わせください。ハッカーは常に一歩先を行くように努力していますから、我々のセキュリティ専門家はお客様のセキュリティ目標を達成するのを手助けいたします。

ネットワークアクセス制御

まず、Clouderaのインストールは、到達可能であるべき場所からのみ可能であることを確認します。 たとえば、隣の建物の研究者やデータセンターのデータ処理パイプラインがClouderaクラスタに到達する必要があることは明らかです。しかし、健全なセキュリティプロトコルでは、公開インターネットからアクセスできるデータベースはわずかであり、ほとんどの社内ネットワークからのアクセスも制限しています。 したがって、データパイプラインとクラスタ管理ポリシーを考えると、組織内でクラスタにアクセスする必要がある場所(つまり、どのネットワークサブネットからアクセスする必要があるか)を把握することをお勧めします。

次に、クラスタが必要な場所にのみアクセス可能であるかどうかの確認だけでなく、クラスタを他の場所、特に公開インターネットからアクセスできないようにするために、次の方法を使用することをお勧めします。

クラスタの到達可能性(または到達不能性)をテストする方法はたくさんあります。 次の例では、nmapを使用します。 次の手順に従います。

(1) あなたのクラスタが到達可能なIPアドレスを調べます。 クラスタマシンにssh接続したり、Cloudera ManagerやHueなどに接続すると、ホスト名またはIPアドレスが使用されます。 ホスト名を使用している場合は、そのホスト名が名前解決されるIPアドレスを見つけてください(これにはいくつかのツールがあり、digやhostがうまく機能します)。IPアドレスがプライベートネットワークアドレス(例えば、10.、192.168。または172.16.から172.31.で始まるアドレス)である場合、あなたのクラスタには外部からアクセスできないかもしれません。厳密に確認するために、ネットワーク管理者に連絡する必要がある場合もあるでしょう。もしプライベートアドレスでない場合は、次の手順に進みます。

(2) これらのIPアドレスを使用して、社内ネットワークの外からインターネットにアクセスします(VPNを使用せずに、図書館や自宅などから)。 次に、以下のようにクラスタマシンにアクセスを試みます(あなたのマシンのIPアドレスが203.0.113.11であるとします):

nmap -Pn -p 1004-60030 203.0.113.11

(3) ホストまたはポートにアクセスできないという結果が期待されるべきものでしょう。 いずれかのホストまたはポートがアクセス可能な場合、問題を修正する必要があります。

ここで、インターネットから問題のホストまたはポートへのトラフィックがブロックされたときのnmapの出力は次のようになります。

Starting Nmap 7.12 ( https://nmap.org ) at 2017-01-20 12:00 EST
Nmap scan report for 203.0.113.11
Host is up (0.015s latency).
All 59027 scanned ports on 203.0.113.11 are filtered
Nmap done: 1 IP address (1 host up) scanned in 214.18 seconds

ホスト上にアクセス可能なポートがいくつかある場合の出力は次のようになります。

Starting Nmap 7.12 ( https://nmap.org ) at 2017-01-20 12:00 EST
Nmap scan report for (203.0.113.11)
Host is up (0.083s latency).
Not shown: 58915 closed ports
PORT     STATE SERVICE
2049/tcp open  nfs
2181/tcp open  unknown
3306/tcp open  mysql
4242/tcp open  vrml-multi-use
...
Nmap done: 1 IP address (1 host up) scanned in 195.38 seconds

クラウドプロバイダを使用している場合、ネットワークルールを調べることで、クラスタがインターネットに公開されているかどうかを判断できます。 たとえば、Amazon Web Servicesでは、セキュリティグループを使用して、クラスタにアクセスできるユーザーとアクセスできないユーザーを決定します。 誰もが接続できるようにするグループの例を以下に示します。

この図での問題は、最初のルールである「すべてのTCP」によって、誰でもクラスタマシン上の任意のポートに接続できることです(これは0.0.0.0/0の意味です)。

上記のセキュリティグループが修正された例を次に示します。

ご覧のように、SSHアクセスは管理ネットワークだけに制限されています(つまり、クラスタマシンにsshできるようにするには、既に管理ネットワーク上にいなければなりません)。 他のすべてのポートは、社内ネットワークの誰にでも開放されています。

クラスタサービスにアクセスできるべきでない場所からポートにアクセスできるようになっている場合は、これらのポートで実行されているサービスをシャットダウンするか(これらのサービスが実際には必要ない場合)、またはこれらの場所からのアクセスをブロックする必要があります。 アクセスを正しく遮断する方法については、ネットワーク管理者に相談する必要があります。 あなたがこれを行う必要がある場合、以下のツールが役に立つでしょう:

  1. ファイアウォールやiptablesのようなホストファイアウォールなどの、望ましくないトラフィックをブロックするための普段であれば優れたソリューションはClouderaソフトウェアでうまく機能しません。 以下の代替案をお読みください。
  2. ネットワークインフラストラクチャに応じて、ネットワークファイアウォールをご利用ください。 あなたのネットワーキング管理者は、これらを手助けすることができるでしょう。
  3. クラウドホスティングプロバイダを使用している場合は、プロバイダのドキュメントを参照する必要があります。 例えば AWSの場合、セキュリティグループを調べる必要があります(Directorを使用している場合、Clouderaはガイダンスを公開しています)。 Azureの場合、ネットワークセキュリティグループを調べてください。 Google Compute Engineでは、ネットワークファイアウォールを設定することもできます。

私はアクセス可能なポートを発見できませんでした。これで安全でしょうか?

上の例を実行し、ポートがアクセス可能であることを発見した場合は、問題があることは明らかであり、修正する必要があります。 アクセス可能なポートが見つからなかった場合はどうなるのでしょうか? クラスタがインターネット上の好奇心や悪意のあるユーザーからアクセスできないことを意味するのでしょうか?

率直に言うと、クラスタに絶対にアクセスできないことを確かめることはできません。 例えば、あなたのネットワークにポート転送や選択的なソースフィルタリング、あるいは特定のnmap呼び出しがブロックされたことによるさまざまなメカニズムの1つなどがあるかもしれませんが、別の呼び出しや、別のソースからのテストが引き続き機能する可能性があります。

良いニュースとしては、このような構成は、偶発または過失よって生じることがほとんどなく、ハッキングされたシステムで起こったと考えられるということです。 そのようなアクセスを許可するには、会社のネットワークを明示的に設定する必要があります。 また、社内ネットワーク内の他の資産(通常、悪質な人たちからのアクセスに対し安全だと思われるネットワークの一部)が侵害された可能性があり、クラスタへの攻撃のための踏み台として機能する可能性があります。

良いセキュリティシステムは、防衛の原則に従っており、セキュリティのいくつかの「レイヤー」が必要であることがわかります。 ファイアウォールはバイパスすることが可能なため、ファイアウォールにセキュリティの提供を依存することはできません。 Clouderaは、ファイアウォールやその他のネットワークセキュリティにもかかわらず、クラスタを見つけることができるハッカーを阻止するために採用すべきいくつかの他の手段を提供しています。

さらなる仕事

上記の例では、クラスタがインターネットからアクセス可能かどうかを確認する方法のみを示しました。 開始点としては悪くはないですが、実際にはほとんどの社内ネットワーク自体がクラスタにアクセスする必要はありません。 最小限の特権の原則に従って、社内ネットワークのそのような領域からのアクセスも制限する必要があります。 あなたはこれを達成するために上記で概説したのと同じ原則に従うことができます。

さらに高度な設定をするのであれば、一部のクラスタサービスにアクセスする必要があるすべての人が、すべてのサービス、特にクラスタの管理サービスにアクセスできる必要があるとは限りません。 たとえば、データ取り込みツールはCloudera ManagerやHueにアクセスする必要はありません。 したがって、サービスによるアクセスをさらに制限することができます。

これらのトピックの詳細な扱いは、このブログの範囲を超えています。 詳しい説明や指針については、以下の参考文献を参照してください。

デフォルトのパスワード

ハッキングのもう一つの重要な要因は、インスタンスの多くがデフォルト設定を使用していたことでした。 ほとんどのソフトウェアでは、デフォルト設定はソフトウェアのデモや評価時に使いやすいことを目的としています。本番環境でソフトウェアを使用している人は、セットアップを変更して安全にすることを前提としています。 特に重要になる領域の1つがパスワードです。

最初のログイン時のみデフォルトパスワードを使用するということは非常に重要です。 新しいClouderaクラスタを設定するときは、パスワードをデフォルトからできるだけ早く安全なものに変更することをお勧めします。 可能であれば、デフォルトの管理者アカウントを削除してください。 Cloudera Managerの手順はこちらから入手できます。

既定のパスワードを使用しているクラスタを既に実行している場合は、設定に従ってすぐにパスワードを変更してください。 例えば。 Cloudera Managerを使用すると、管理コンソールからパスワードを変更できます。

これでおしまい?

いいえ、上記の手順は、あなたが取るべき最も基本的なセキュリティ対策です。 上記の手順を完了したら、次の点を検討することをおすすめします。

  1. TLSによるワイヤ暗号化
  2. Kerberosによる認証
  3. SentryとACLを使用した承認
  4. HDFS透過的暗号化Cloudera Navigator暗号化を使用したストレージ暗号化
  5. Cloudera Navigatorの監査

さらに、子供の頃のおばあちゃんの家へのドライブと同じように、現実世界のシステムのセキュリティは決して終わりのない旅です。 システムの使用が進化し、新しい問題に関する勧告を発行するたびに、セキュリティ設定を常に調整する必要があることに気づくでしょう。

次のセクションのリソースを使用して、Hadoopの一般的なセキュリティの概念について学ぶことをお勧めします。 Clouderaのセキュリティ情報に従って、最新のニュースを常に確認し、コミュニティに参加し、ブログに注目しましょう。

さらなる詳細

Clouderaは、進行中のハッキングからクラスタを守るための勧告を出しました。

Clouderaのドキュメントにはセキュリティに関するセクションがあります。

Hadoop Securityは、本で学びたい場合には、素晴らしいリソースです。

Clouderaは、Strata Hadoop Worldカンファレンスでのセキュリティトレーニングセッションを継続しています。 3月14日サンノゼで我々と一緒に、もっと学びましょう。

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.