2016-10-06 12 views
2

私は、共有クラスタ上でsparkジョブを実行するときにセキュリティをどのように強化するかを試しています。私は、権限のないノードがクラスタに参加できないようにする方法(共有シークレットケルベロスの認証を設定する方法)と、誰がジョブをサブミットできるかを制限する方法を理解しています。しかし、私はスパーク・ジョブに必要なリソースへのアクセスを制限する方法を理解するのに苦労しています。Apache Sparkのセキュリティ保護

私が正しく理解していれば、ワーカーノードのすべてのスパークプロセスがスパークユーザーとして実行されます。おそらく、スパークユーザー自体はかなりの権限を持っているはずですが、火花の仕事にアクセスする必要がある場合はどうすればよいのでしょうか。 SQLサーバー。 The Spark security docsキーストアについて言及します。これは、ジョブを送信したユーザーが、spark-submitを使用してプリンシパルとキータブを通過できることを意味します。外部リソースとの認証に使用することができます。

セキュリティ文書では、一時ファイル(シャッフルファイルなど)が暗号化されていないことも記載されています。これは、sparkで処理されたデータがsparkクラスタの他のユーザーに漏洩する可能性があると仮定しなければならないということですか?もしそうなら、これを解決するために提案された回避策(このデータに暗号化されたパーティションを使用する)を使用することは可能ですか?私はスパークユーザー自身がこのデータを解読する能力を持っていなければならないと仮定しています。このユーザーとしてすべてのプログラムが稼動しています....

+0

これはすべてかなり混乱しています。重要なことは**データ**を保護することです。つまり、Kerberos認証とACLベースの認可をHDFSファイルに有効にすることです。 RangerとSentryは実際には、特にHiveテーブルへのPig/Spark/Sqoopアクセスを許可したいときに、もっと複雑にします。 –

+0

キーストアのことも混乱します。 Spark(またはSqoop)ジョブを起動する前にKerberosチケット*を取得し、そのジョブをHadoopキーストアに接続し、そこに格納されているもの(データベースパスワードなど)を動的に取得し、使用してから消去しますそれはディスク上にトレースを残すことなくメモリから取得します。 –

+0

こんにちは、紛らわしい場合はお詫び申し上げます。私は、データの保護が重要であることを理解しています。私の指摘は、sparkがクラスタの他のユーザが読むことができるtmpディレクトリにファイルを書き込む可能性がある場合、これが幾分危険にさらされることです。 – d80tb7

答えて

1

実行時にセキュリティを強化する方法を検討しようとしています 共有クラスタ上のジョブを開始します。 許可されていないノードがクラスタに参加できないようにする方法を理解しています( kerberos auth)。 糸で実行し、レンジャーのようなものを使用して各キューに にアクセスできる人を制限する方法。私はしかし、どのようにして理解するのに苦労している スパークジョブが必要とするリソースへのアクセスを制限します。

これを行うには、YARNキューを使用します。各キューは、そのキューに対して利用可能な最小量のリソースを有することができる。したがって、キューACLを定義して、信頼できるユーザーだけがキューにサブミットし、このキューに必要なリソースの最小量を定義するようにします。

ワーカーノードのすべてのスパークプロセスが正しく理解されていれば、 がスパークユーザーとして実行されます。

あなたの理解は正確ではありません。 Kerberosを有効にする(これはセキュリティの議論の前提条件です)、スパークジョブはKerberosユーザーとして実行されます。この問題には重要な注意点があります。Kerberosのユーザー名は、オペレーティングシステムのユーザー名と一致する必要があります。あなたのスパークジョブは、例えばにアクセスする必要がある場合

はおそらくスパークユーザー自身がしかし、問題はその後 に何をすべきかとなり、 かなり最小限の権限を持っている必要がありますSQLサーバー。 Sparkの セキュリティ文書では、キーストアに言及しています。これは、ユーザー がジョブをサブミッターと同じように外部の リソースと認証するために使用できる spark-submitのプリンシパルとキータブを通過できることを意味しますか?

このキーストアは、HTTP通信(例:Spark UI)のTLS暗号化をサポートするための、非常に特殊な目的で使用されます。したがって、それを第三者のシステムにアクセスする秘密のストレージとして使用することはできません。全体として、Hadoopインフラストラクチャでは、資格情報をジョブと共有する方法はありません。したがって、メカニズムは毎回再考されるべきです。ジョブは、起動するユーザーの代わりにOSレベルで実行されるため、OSコントロールを使用して、他のリソース(ファイルシステムのアクセス許可など)に資格情報を配布することができます。

セキュリティ文書には、 一時ファイル(シャッフルファイルなど)が暗号化されていないことが記載されています。つまり、 は、sparkによって処理されたデータが である可能性があると仮定する必要がありますか?もしそうなら、 は、これを解決するために提案された回避策(このデータに暗号化された パーティションを使用する)を使用することができますか?私はこのデータを復号化する機能を備えていなければなりません火花 ユーザー自身としてではないと仮定していると、すべての プログラムが....このユーザーとして注意すべき

ありカップルの事をruniningています。まず、すでに述べたように、Kerberizedクラスタ上のSparkジョブは、ジョブを開始したユーザーとして実行されます。ジョブによって生成されたすべての一時ファイルには、その特定のユーザーおよび糸グループ(糸使用者のみを含む)へのアクセスを許可するファイルシステム権限が与えられます。第2に、ディスク暗号化はディスクを盗まれるのを防ぎますが、OSレベルの攻撃に対しては安全を保証しません。第3に、Spark 2.1の一時ファイル暗号化が利用可能です。

Spark-on-YARNセキュリティモデルの詳細を理解したい場合は、Apache Spark on YARN Security Model Analysis(免責事項私は著者です)を読むことをお勧めします。