YARN セキュアコンテナ

概要

セキュアクラスタ内のYARNコンテナは、オペレーティングシステムの機能を使用して、コンテナの実行分離を提供します。セキュアコンテナは、ジョブユーザーの資格情報の下で実行されます。オペレーティングシステムは、コンテナへのアクセス制限を適用します。コンテナは、アプリケーションを送信したユーザーとして実行する必要があります。

セキュアコンテナは、セキュアなYARNクラスタのコンテキストでのみ機能します。

コンテナ分離要件

コンテナ実行プログラムは、jar、設定ファイル、ログファイル、共有オブジェクトなど、コンテナに必要なローカルファイルとディレクトリにアクセスする必要があります。NodeManagerによって起動されますが、コンテナはNodeManagerのプライベートファイルと設定にアクセスできません。異なるユーザーによって送信されたコンテナ実行アプリケーションは、相互にファイルとディレクトリにアクセスできないように分離する必要があります。同様の要件は、名前付きパイプ、クリティカルセクション、LPCキュー、共有メモリなど、他のシステムのファイル以外のセキュアではないオブジェクトにも適用されます。

Linuxセキュアコンテナ実行プログラム

Linux環境では、セキュアコンテナ実行プログラムはLinuxContainerExecutorです。これは、container-executorと呼ばれる外部プログラムを使用してコンテナを起動します。このプログラムには、setuidアクセス権フラグが設定されており、YARNアプリケーションユーザーの権限でコンテナを起動できます。

設定

yarn.nodemanager.local-dirsyarn.nodemanager.log-dirsで設定されたディレクトリは、設定されたNodeManagerユーザー(yarn)とグループ(hadoop)が所有している必要があります。これらのディレクトリに設定されているパーミッションはdrwxr-xr-xである必要があります。

container-executorプログラムはrootが所有し、パーミッションは---Sr-s---である必要があります。

NodeManagerLinuxContainerExecutorを使用するように設定するには、conf/yarn-site.xmlに以下を設定します。

<property>
  <name>yarn.nodemanager.container-executor.class</name>
  <value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value>
</property>

<property>
  <name>yarn.nodemanager.linux-container-executor.group</name>
  <value>hadoop</value>
</property>

さらに、LCEはcontainer-executorプログラムによって読み取られるcontainer-executor.cfgファイルが必要です。

yarn.nodemanager.linux-container-executor.group=#configured value of yarn.nodemanager.linux-container-executor.group
banned.users=#comma separated list of users who can not run applications
allowed.system.users=#comma separated list of allowed system users
min.user.id=1000#Prevent other super-users
feature.terminal.enabled=1

端末機能(feature.terminal.enabled)により、YARN UI2を介してセキュアコンテナへの制限付きシェルが許可されます。

Windowsセキュアコンテナ実行プログラム (WSCE)

Windows環境のセキュアコンテナ実行プログラムはWindowsSecureContainerExecutorです。これは、Windows S4Uインフラストラクチャを使用して、YARNアプリケーションユーザーとしてコンテナを起動します。WSCEは、hadoopwinutilsvcサービスの存在を必要とします。このサービスは、%HADOOP_HOME%\bin\winutils.exeによってホストされ、serviceコマンドライン引数で起動されます。このサービスは、NMが昇格されたコンテキストでJVMとすべてのNMコード全体を実行する必要がないように、LocalSystem権限を必要とするいくつかの特権操作を提供します。NMは、hadoop.dllにホストされているRCPクライアントへのJNI呼び出しを介して、ローカルRPC(LRPC)によってhadoopwinutilsvcサービスと対話します。

設定

NodeManagerWindowsSecureContainerExecutorを使用するように設定するには、conf/yarn-site.xmlに以下を設定します。

        <property>
          <name>yarn.nodemanager.container-executor.class</name>
          <value>org.apache.hadoop.yarn.server.nodemanager.WindowsSecureContainerExecutor</value>
        </property>

        <property>
          <name>yarn.nodemanager.windows-secure-container-executor.group</name>
          <value>yarn</value>
        </property>

hadoopwinutilsvcは、特権操作へのアクセスを設定するために%HADOOP_HOME%\etc\hadoop\wsce_site.xmlを使用します。

<property>
 <name>yarn.nodemanager.windows-secure-container-executor.impersonate.allowed</name>
  <value>HadoopUsers</value>
</property>

<property>
  <name>yarn.nodemanager.windows-secure-container-executor.impersonate.denied</name>
  <value>HadoopServices,Administrators</value>
</property>

<property>
  <name>yarn.nodemanager.windows-secure-container-executor.allowed</name>
  <value>nodemanager</value>
</property>

<property>
  <name>yarn.nodemanager.windows-secure-container-executor.local-dirs</name>
  <value>nm-local-dir, nm-log-dirs</value>
</property>

<property>
  <name>yarn.nodemanager.windows-secure-container-executor.job-name</name>
  <value>nodemanager-job-name</value>
</property>  

yarn.nodemanager.windows-secure-container-executor.allowedには、ノードマネージャーを実行しているサービスアカウントの名前が含まれている必要があります。このユーザーは、hadoopwintuilsvc機能にアクセスすることを許可されます。

yarn.nodemanager.windows-secure-container-executor.impersonate.allowedには、クラスタでコンテナを作成することを許可されているユーザーが含まれている必要があります。これらのユーザーは、hadoopwinutilsvcによってなりすまされることが許可されます。

yarn.nodemanager.windows-secure-container-executor.impersonate.deniedには、コンテナの作成を明示的に禁止されているユーザーが含まれている必要があります。hadoopwinutilsvcは、これらのユーザーになりすますことを拒否します。

yarn.nodemanager.windows-secure-container-executor.local-dirsには、ノードマネージャーのローカルディレクトリが含まれている必要があります。hadoopwinutilsvcは、これらのディレクトリの下でのファイル操作のみを許可します。これは$yarn.nodemanager.local-dirs, $yarn.nodemanager.log-dirsと同じ値を含んでいますが、hadoopwinutilsvcのXML設定処理は置換を実行しないため、値は最終値である必要があります。すべてのパスは絶対パスでなければならず、環境変数の置換は実行されません。パスはLOCAL_INVARIANT大文字小文字を区別しない文字列比較で比較され、検証されたファイルパスはlocal-dirs設定にリストされているパスのいずれかで始まる必要があります。パスセパレータとしてコンマを使用します:,

yarn.nodemanager.windows-secure-container-executor.job-nameには、すべてのコンテナを追加する必要があるWindows NTジョブ名を含める必要があります。この設定はオプションです。設定されていない場合、コンテナはグローバルNodeManagerジョブに追加されません。通常、これはNMが割り当てられているジョブに設定されるため、NMをキルするとすべてのコンテナもキルされます。Hadoopwinutilsvcは、このジョブの作成を試みません。コンテナが起動されるときに、ジョブが存在する必要があります。値が設定されていてジョブが存在しない場合、コンテナの起動はエラー2「指定されたファイルが見つかりません」で失敗します。このグローバルNMジョブはコンテナジョブとは関係ありません。コンテナジョブは常に各コンテナに対して作成され、コンテナIDを名前に使用します。この設定は、すべてのコンテナと親NMにまたがるグローバルジョブを制御するため、ネストされたジョブが必要です。ネストされたジョブは、Windows 8以降とWindows Server 2012以降でのみ使用できます。

有用なリンク