Hadoop 分散ファイルシステム (HDFS) で認可が有効になっている場合、データの読み取りやディレクトリの作成などの操作を実行するには、必要なパーミッションが必要です。 このトピックでは、HDFS 認可を有効にする方法について説明します。
背景情報
Hadoop は、ユーザーアイデンティティを決定するために、次の 2 つのモードを提供しています。
-
simple モード:HDFS に接続しているクライアントのオペレーティングシステムが、ユーザーのアイデンティティを決定します。 UNIX 系システムでは、これは
whoamiコマンドに相当します。 -
Kerberos モード:クライアントの Kerberos 認証情報がそのアイデンティティを決定します。
EMR クラスターの作成時に Kerberos モードを有効にできます。 詳細については、「Kerberos」をご参照ください。
前提条件
EMR クラスターが必要です。 詳細については、「クラスターの作成」をご参照ください。
操作手順
-
Kerberos が有効なクラスターでは、HDFS の認可はデフォルトで設定されています (umask は 027)。 追加の設定やサービスの再起動は必要ありません。
-
simple モードのクラスターの場合は、次の手順に従って設定を追加し、サービスを再起動する必要があります。
-
クラスターサービスページに移動します。
-
上部メニューで、必要に応じてリージョンとリソースグループを選択します。
-
対象のクラスターの操作列で、Services をクリックします。
-
[Services] ページの HDFS サービスセクションで、Configure をクリックします。
-
[Service Configuration] エリアで、パラメーターを変更します。
パラメーター
説明
dfs.permissions.enabled
権限チェックを有効にします。 値を true に設定します。
デフォルト値は false です。
dfs.datanode.data.dir.perm
DataNode のローカルディレクトリパスのパーミッション。
fs.permissions.umask-mode
新しいファイルとディレクトリのデフォルトのパーミッションを定義するパーミッションマスク。
dfs.namenode.acls.enabled
デフォルト値は false です。 このパラメーターを true に設定すると、アクセス制御リスト (ACL) のサポートが有効になります。 これにより、特定のユーザーとグループのパーミッションを管理できます。
ACL 関連のコマンドには、
hadoop fs -getfacl [-R] <path>とhadoop fs -setfacl [-R] [-b |-k -m |-x <acl_spec> <path>] |[--set <acl_spec> <path>]が含まれます。dfs.permissions.superusergroup
スーパーユーザーグループの名前。 デフォルト値は hadoop です。 このグループのユーザーはスーパーユーザー権限を持ちます。
-
変更を保存します。
-
ページの下部にあるSaveをクリックします。
-
表示されるダイアログボックスで、実行理由を入力し、Save をクリックします。
-
-
サービスを再起動します。
-
HDFS サービスページの右上隅で、 を選択します。
-
表示されるダイアログボックスで、Execution Reason を入力し、OK をクリックします。
-
Confirm ダイアログボックスで、OK をクリックします。
ページの上部にあるOperation Historyをクリックして、タスクの進捗を監視します。再起動が完了するまで待ちます。
-
例
-
SSH を使用してクラスターに接続します。 詳細については、「クラスターへの接続」をご参照ください。
-
次のコマンドを実行して、emrtest ユーザーに切り替えます。
-
次のコマンドを実行して、emrtest ユーザーとしてディレクトリを作成します。
-
次のコマンドを実行して、作成されたディレクトリのパーミッションを表示します。
hadoop fs -ls /tmpコマンドは、次のような出力を返します。
drwxr-x--x - emrtest hadoop 0 2022-10-21 14:08 /tmp/emrtest drwxr-x--x - hadoop hadoop 0 2022-10-21 10:06 /tmp/hadoop-yarn drwx-wx-wx - hive hadoop 0 2022-10-21 10:13 /tmp/hive drwxr-x--x - hadoop hadoop 0 2022-10-21 10:23 /tmp/kyuubi-staging drwxrwxrwt - hadoop hadoop 0 2022-10-21 10:23 /tmp/logs -
次のコマンドを実行して、ディレクトリに ACL を設定し、foo ユーザーに rwx パーミッションを付与します。
-
次のコマンドを実行して、ディレクトリのパーミッションを表示します。
hadoop fs -ls /tmp/コマンドは、次のような出力を返します。
drwxrwx--x+ - emrtest hadoop 0 2022-10-21 14:08 /tmp/emrtest drwxr-x--x - hadoop hadoop 0 2022-10-21 10:06 /tmp/hadoop-yarn drwx-wx-wx - hive hadoop 0 2022-10-21 10:13 /tmp/hive drwxr-x--x - hadoop hadoop 0 2022-10-21 10:23 /tmp/kyuubi-staging drwxrwxrwt - hadoop hadoop 0 2022-10-21 10:23 /tmp/logs説明drwxrwx--x+ のように、パーミッション文字列の末尾にあるプラス記号 (+) は、ACL が設定されていることを示します。
-
次のコマンドを実行して、ACL の詳細を表示します。
hadoop fs -getfacl /tmp/emrtestコマンドは、次のような出力を返します。
# file: /tmp/emrtest # owner: emrtest # group: hadoop user::rwx user:foo:rwx group::r-x mask::rwx other::--x
su emrtest
hadoop fs -mkdir /tmp/emrtest
hadoop fs -setfacl -m user:foo:rwx /tmp/emrtest