此文件說明如何設定和管理 Hadoop 的服務層級授權。
確定 Hadoop 已正確安裝、設定和設定。如需更多資訊,請參閱
服務層級授權是初始授權機制,用於確保連線到特定 Hadoop 服務的用戶端擁有必要的預先設定權限,並有權存取指定的服務。例如,MapReduce 叢集可以使用此機制允許設定的使用者/群組清單提交工作。
$HADOOP_CONF_DIR/hadoop-policy.xml
設定檔用於定義各種 Hadoop 服務的存取控制清單。
服務層級授權會在其他存取控制檢查(例如檔案權限檢查、工作佇列存取控制等)之前執行。
此區段說明如何透過設定檔 $HADOOP_CONF_DIR/hadoop-policy.xml
設定服務層級授權。
預設情況下,Hadoop 的服務層級授權已停用。若要啟用,請將組態屬性 hadoop.security.authorization 設定為 true,位置在 $HADOOP_CONF_DIR/core-site.xml
。
本節列出各種 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,MapReduce 工作用來與父節點管理員通訊。 |
security.refresh.policy.protocol.acl | RefreshAuthorizationPolicyProtocol 的 ACL,dfsadmin 和 rmadmin 指令用來更新現行安全政策。 |
security.ha.service.protocol.acl | HAService 通訊協定的 ACL,HAAdmin 用來管理名稱節點的活動和備用狀態。 |
$HADOOP_CONF_DIR/hadoop-policy.xml
為每個 Hadoop 服務定義一個存取控制清單。每個存取控制清單都有簡單的格式
使用者和群組清單都是以逗號分隔的名稱清單。兩個清單以空白分隔。
範例: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 範圍清單,來限制從一組機器存取服務。每個服務的屬性名稱都來自於對應 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
,並指示 NameNode 和 ResourceManager 透過 dfsadmin
和 rmadmin
命令的 -refreshServiceAcl
參數重新載入其各自的組態。
更新 NameNode 的服務層級授權組態
$ bin/hdfs dfsadmin -refreshServiceAcl
更新 ResourceManager 的服務層級授權組態
$ bin/yarn rmadmin -refreshServiceAcl
當然,可以在 $HADOOP_CONF_DIR/hadoop-policy.xml
中使用 security.refresh.policy.protocol.acl
屬性,來限制更新服務層級授權組態的能力,僅限於特定使用者/群組。
僅允許使用者 alice
、bob
和 mapreduce
群組中的使用者提交作業至 MapReduce 群集
<property> <name>security.job.client.protocol.acl</name> <value>alice,bob mapreduce</value> </property>
僅允許以屬於 datanodes 群組的使用者身分執行的資料節點與 NameNode 通訊
<property> <name>security.datanode.protocol.acl</name> <value>datanodes</value> </property>
允許任何使用者以 DFSClient 身分與 HDFS 群集通訊
<property> <name>security.client.protocol.acl</name> <value>*</value> </property>