クラスター作成時に Kerberos 認証を有効にすると、E-MapReduce (EMR) は YARN に対して以下の 3 つのセキュリティ機能を自動的に有効化した高セキュリティクラスターを作成します。
Kerberos 認証
EMR は高セキュリティクラスターにおいて、YARN に関連するすべての Kerberos パラメーターを自動的に構成します。手動での設定は不要です。Kerberos のバックグラウンド情報については、「概要」をご参照ください。
YARN のリモートプロシージャコール (RPC) サービスまたは HTTP サービスにアクセスするには、クライアントが事前に Kerberos 認証を通過する必要があります。以下の例では、認証後に各サービスタイプを呼び出す方法を示します。
# RPC サービス
kinit
yarn node -list
kdestroy
# HTTP サービス
kinit
curl --negotiate -u: http://master-1-1:8088/ws/v1/cluster/nodes
kdestroyACL に基づく権限付与
YARN のアクセス制御リスト (ACL) 機能は、高セキュリティクラスターで自動的に有効になります。デフォルトでは、hadoop ユーザーグループのみが YARN サービスおよびキューの管理、YARN ジョブの送信を行う権限を持ちます。yarn.acl.enable を true に設定することで、ACL 機能を有効にできます。
管理権限
yarn.admin.acl のデフォルト値は hadoop(hadoop の前に半角スペースあり)であり、これにより hadoop ユーザーグループにサービス管理者権限が付与されます。ほとんどの場合、EMR クラスタープロセスは hadoop ユーザーグループに属する Linux ユーザーとして実行されます。Hadoop におけるデフォルトのユーザーグループマッピングは、各ノードの OS グループ情報を基にしています。
yarn.admin.aclパラメーターは、<user> <user group>形式を使用し、ユーザーとユーザーグループの間には半角スペースを 1 つ入れます。複数のユーザーを指定する場合はカンマで区切り、複数のユーザーグループも同様にカンマで区切ります。例:user1,user2 group1,group2。ユーザーグループのみを指定する場合は、先頭に半角スペースを追加します。パラメーターを半角スペース 1 文字のみに設定すると、すべてのユーザーおよびユーザーグループの権限が無効になります。
キュー管理権限
YARN におけるキュー権限は、ジョブの送信とキューの管理という 2 種類の操作をカバーします。
高セキュリティクラスターのデフォルトの capacity-scheduler.xml 構成では、以下のように設定されています。
yarn.scheduler.capacity.root.acl_submit_applications=(半角スペース 1 文字 — ジョブを送信できるユーザーはいません)yarn.scheduler.capacity.root.acl_administer_queue= hadoop(hadoopの前に半角スペースあり — hadoop ユーザーグループがキューを管理できます)
hadoop ユーザーグループに属さないユーザーは、キューにジョブを送信できません。現在のユーザーがどのユーザーグループに属しているかを確認するには、id コマンドを実行します。
ACL の無効化
クラスターのユーザー数が少なく、ACL が不要な場合は、上記の両方のパラメーターをクリアしてキューをリフレッシュします。EMR コンソールで YARN サービスページに移動し、ステータス タブをクリックします。ResourceManager コンポーネントを見つけ、操作 列の その他 アイコンをクリックし、refresh_queues を選択します。実行理由を入力し、OK をクリックします。「確認」メッセージで OK をクリックします。
Ranger との ACL 連携
ユーザーのキュー権限を視覚的に管理するには、ACL を Ranger と併用します。Ranger は Capacity Scheduler のみをサポートします。構成の詳細については、「Ranger で YARN を有効化し、関連する権限を構成する」をご参照ください。
キューごとの ACL 構成
個別のキューに対して特定のユーザーまたはユーザーグループを許可するには、capacity-scheduler.xml に以下のパラメーターを追加します。
yarn.scheduler.capacity.root.<queue-path>.acl_submit_applicationsyarn.scheduler.capacity.root.<queue-path>.acl_administer_queue
パラメーターの詳細については、「Queue Properties」および「YARN スケジューラ」トピック内の「キューの ACL 構成」セクションをご参照ください。
キューへのマッピング
ユーザーまたはユーザーグループをキューに自動的にマッピングするには、capacity-scheduler.xml 内の yarn.scheduler.capacity.queue-mappings を構成します。yarn.scheduler.capacity.queue-mappings-override.enable を true に設定すると、マッピングされたユーザーまたはユーザーグループは割り当てられたキューにのみジョブを送信できます。
ジョブ管理権限
YARN のジョブ管理権限には、VIEW_APP および MODIFY_APP が含まれます。
| 権限 | 制御対象 |
|---|---|
VIEW_APP | ジョブ情報および YARN コンポーネントのログを表示します。デフォルトでは、mapred-site.xml で mapreduce.job.acl-view-job=* が設定されており、MapReduce においてすべてのユーザーに VIEW_APP 権限が付与されます。ただし、これはエンジン側の VIEW_APP 制限を含みません。 |
MODIFY_APP | YARN 内のジョブを変更または停止します。ジョブの停止には、ACL を管理するための ADMINISTER_QUEUE 権限が使用されます。 |
LCE
LCE の必要性
高セキュリティクラスター以外では、コンテナは DefaultContainerExecutor を使用し、ジョブを送信したユーザーに関係なく、すべてのコンテナを hadoop アカウントで実行します。このため、異なるユーザーからのジョブが同一の OS ID を共有することになり、認証による分離が不可能になります。ユーザーは他のユーザーに属する YARN 関連ファイルにアクセスまたは変更する可能性があり、テナント間でリソースが相互にアクセスされるリスクがあります。
| コンテナエグゼキュータ | コンテナの実行方法 |
|---|---|
DefaultContainerExecutor | ジョブを送信したユーザーに関係なく、常に hadoop アカウントで実行 |
Linux Container Executor (LCE) | ジョブを送信したユーザーのアカウントで実行(setuid ビットを使用) |
LCE の動作原理
高セキュリティクラスターでは、Linux Container Executor (LCE) を使用して、setuid ビットに基づき、ジョブを送信したユーザーのアカウントでコンテナを実行します。これにより、コンテナからリスクが高く不要な権限を取り消し、ユーザー間でのリソースアクセスを防止します。
LCE の前提条件
LCE を機能させるには、ジョブを送信する各ユーザーに対応する Linux アカウントが、すべての NodeManager ノードの OS 上に存在している必要があります。
推奨アプローチ: EMR コンソールのユーザー管理機能を使用します。これにより、ユーザーが OpenLDAP サービスに追加され、nslcd サービスを通じて各ノード上の Linux アカウントにマッピングされます。OpenLDAP サービスはクラスター内にデプロイされている必要があります。
代替アプローチ: Linux アカウントを手動で管理します。既存の各ノードに Linux アカウントを追加し、ブートストラップアクションスクリプトを追加して、新規ノード起動時に自動的にアカウントが作成されるようにします。