サービスレベル認証ガイド

目的

このドキュメントでは、Hadoopのサービスレベル認証を構成および管理する方法について説明します。

前提条件

Hadoopがインストールされ、正しく構成およびセットアップされていることを確認してください。詳細については、以下を参照してください。

概要

サービスレベル認証は、特定のHadoopサービスに接続するクライアントが、必要な事前構成された権限を持ち、特定のサービスにアクセスする権限があることを保証する初期の認証メカニズムです。たとえば、MapReduceクラスターでは、このメカニズムを使用して、構成されたユーザー/グループのリストがジョブを送信できるようにすることができます。

$HADOOP_CONF_DIR/hadoop-policy.xml構成ファイルは、さまざまなHadoopサービスのアクセス制御リストを定義するために使用されます。

サービスレベル認証は、ファイル権限チェック、ジョブキューへのアクセス制御などの他のアクセス制御チェックよりも前に行われます。

構成

このセクションでは、構成ファイル$HADOOP_CONF_DIR/hadoop-policy.xmlを介してサービスレベル認証を構成する方法について説明します。

サービスレベル認証の有効化

デフォルトでは、Hadoopのサービスレベル認証は無効になっています。有効にするには、$HADOOP_CONF_DIR/core-site.xmlで構成プロパティ hadoop.security.authorization を true に設定します。

Hadoopサービスと構成プロパティ

このセクションでは、さまざまなHadoopサービスとその構成ノブをリストします。

プロパティ サービス
security.client.protocol.acl ClientProtocolのACL。DistributedFileSystemを介してユーザーコードによって使用されます。
security.client.datanode.protocol.acl ClientDatanodeProtocolのACL。ブロックリカバリ用のクライアントからデータノードへのプロトコルです。
security.datanode.protocol.acl DatanodeProtocolのACL。データノードがネームノードと通信するために使用されます。
security.inter.datanode.protocol.acl InterDatanodeProtocolのACL。世代タイムスタンプを更新するためのデータノード間のプロトコルです。
security.namenode.protocol.acl NamenodeProtocolのACL。セカンダリネームノードがネームノードと通信するために使用するプロトコルです。
security.job.client.protocol.acl JobSubmissionProtocolのACL。ジョブクライアントがジョブの送信、ジョブステータスの照会などでリソースマネージャーと通信するために使用します。
security.job.task.protocol.acl TaskUmbilicalProtocolのACL。マップタスクとリデュースタスクが親ノードマネージャーと通信するために使用します。
security.refresh.policy.protocol.acl RefreshAuthorizationPolicyProtocolのACL。dfsadminコマンドとrmadminコマンドが有効なセキュリティポリシーを更新するために使用します。
security.ha.service.protocol.acl HAAdminがネームノードのアクティブ状態とスタンバイ状態を管理するために使用するHAServiceプロトコルのACL。

アクセス制御リスト

$HADOOP_CONF_DIR/hadoop-policy.xmlは、各Hadoopサービスのアクセス制御リストを定義します。すべてのアクセス制御リストは、シンプルな形式を持っています。

ユーザーとグループのリストはどちらも、名前のコンマ区切りリストです。2つのリストはスペースで区切られています。

例:user1,user2 group1,group2

グループのリストのみを指定する場合は、行の先頭に空白を追加します。同様に、コンマ区切りのユーザーリストの後にスペースまたは何も続かない場合は、指定されたユーザーのセットのみを意味します。

*の特別な値は、すべてのユーザーがサービスにアクセスできることを意味します。

サービスにアクセス制御リストが定義されていない場合、security.service.authorization.default.aclの値が適用されます。security.service.authorization.default.aclが定義されていない場合は、*が適用されます。

ブロックされたアクセス制御リスト

場合によっては、サービスのブロックされたアクセス制御リストを指定する必要があります。これは、サービスへのアクセスが許可されていないユーザーとグループのリストを指定します。ブロックされたアクセス制御リストの形式は、アクセス制御リストの形式と同じです。ブロックされたアクセス制御リストは、$HADOOP_CONF_DIR/hadoop-policy.xmlを介して指定できます。プロパティ名は、「.blocked」をサフィックスとして付けることで導出されます。

例:security.client.protocol.aclのブロックされたアクセス制御リストのプロパティ名は、security.client.protocol.acl.blockedになります。

サービスの場合、アクセス制御リストとブロックされた制御リストの両方を指定できます。ユーザーがアクセス制御リストに含まれており、ブロックされたアクセス制御リストに含まれていない場合、そのユーザーはサービスへのアクセスを許可されます。

サービスにブロックされたアクセス制御リストが定義されていない場合、security.service.authorization.default.acl.blockedの値が適用されます。security.service.authorization.default.acl.blockedが定義されていない場合は、空のブロックされたアクセス制御リストが適用されます。

IPアドレス、ホスト名、IP範囲のリストを使用したアクセス制御

サービスへのアクセスは、サービスにアクセスしているクライアントのIPアドレスに基づいて制御できます。IPアドレス、ホスト名、IP範囲のリストを指定することにより、一連のマシンからのサービスへのアクセスを制限できます。各サービスのプロパティ名は、対応するACLのプロパティ名から派生します。ACLのプロパティ名がsecurity.client.protocol.aclの場合、ホストリストのプロパティ名はsecurity.client.protocol.hostsになります。

サービスにホストリストが定義されていない場合、security.service.authorization.default.hostsの値が適用されます。security.service.authorization.default.hostsが定義されていない場合は、*が適用されます。

ブロックされたホストのリストを指定できます。ホストリストに含まれているが、ブロックされたホストリストに含まれていないマシンのみがサービスへのアクセスを許可されます。プロパティ名は、「.blocked」をサフィックスとして付けることで導出されます。

例:security.client.protocol.hostsのブロックされたホストリストのプロパティ名は、security.client.protocol.hosts.blockedになります。

サービスにブロックされたホストリストが定義されていない場合、security.service.authorization.default.hosts.blockedの値が適用されます。security.service.authorization.default.hosts.blockedが定義されていない場合は、空のブロックされたホストリストが適用されます。

サービスレベル認証構成の更新

NameNodeとResourceManagerのサービスレベル認可設定は、Hadoopマスターデーモンの再起動なしに変更できます。クラスター管理者は、マスターノードの$HADOOP_CONF_DIR/hadoop-policy.xmlを変更し、それぞれdfsadminコマンドとrmadminコマンドの-refreshServiceAclスイッチを使用して、NameNodeとResourceManagerにそれぞれの設定をリロードするように指示できます。

NameNodeのサービスレベル認可設定をリフレッシュします。

   $ bin/hdfs dfsadmin -refreshServiceAcl

ResourceManagerのサービスレベル認可設定をリフレッシュします。

   $ bin/yarn rmadmin -refreshServiceAcl

もちろん、$HADOOP_CONF_DIR/hadoop-policy.xml内のsecurity.refresh.policy.protocol.aclプロパティを使用して、サービスレベル認可設定のリフレッシュ能力へのアクセスを特定のユーザー/グループに制限することができます。

ユーザーalicebob、およびmapreduceグループのユーザーのみがMapReduceクラスターにジョブを送信できるようにします。

<property>
     <name>security.job.client.protocol.acl</name>
     <value>alice,bob mapreduce</value>
</property>

グループdatanodesに属するユーザーとして実行されているDataNodeのみがNameNodeと通信できるようにします。

<property>
     <name>security.datanode.protocol.acl</name>
     <value>datanodes</value>
</property>

任意のユーザーがDFSClientとしてHDFSクラスターと通信できるようにします。

<property>
     <name>security.client.protocol.acl</name>
     <value>*</value>
</property>