YARN 보안 컨테이너

YARN 보안 컨테이너 (Secure Containers)

보안 클러스터의 YARN 컨테이너는 운영체제 기능을 사용해 컨테이너에 실행 격리(execution isolation)를 제공합니다. 보안 컨테이너(secure containers)는 작업 사용자의 자격 증명으로 실행됩니다. 운영체제가 컨테이너에 대한 접근 제한을 강제합니다. 컨테이너는 애플리케이션을 제출한 사용자로 실행되어야 합니다.

보안 컨테이너는 보안된(secured) YARN 클러스터의 맥락에서만 동작합니다.

출처: 문서

본문

개요 (Overview)

보안 클러스터의 YARN 컨테이너는 운영체제 기능을 사용해 컨테이너에 실행 격리를 제공합니다. 보안 컨테이너는 작업 사용자의 자격 증명으로 실행됩니다. 운영체제가 컨테이너에 대한 접근 제한을 강제합니다. 컨테이너는 애플리케이션을 제출한 사용자로 실행되어야 합니다.

보안 컨테이너는 보안된 YARN 클러스터의 맥락에서만 동작합니다.

컨테이너 격리 요구사항

컨테이너 실행기는 컨테이너가 필요로 하는 로컬 파일과 디렉터리(jar, 구성 파일, 로그 파일, 공유 객체 등)에 접근해야 합니다. NodeManager에 의해 시작되지만, 컨테이너는 NodeManager의 개인 파일과 구성에 접근할 수 없어야 합니다. 서로 다른 사용자가 제출한 애플리케이션을 실행하는 컨테이너는 격리되어 서로의 파일과 디렉터리에 접근할 수 없어야 합니다. 이름 붙은 파이프(named pipes), 임계 구역(critical sections), LPC 큐, 공유 메모리 같은 다른 시스템 비-파일 보안 객체에도 유사한 요구사항이 적용됩니다.

Linux 보안 컨테이너 실행기 (Linux Secure Container Executor)

Linux 환경에서 보안 컨테이너 실행기는 LinuxContainerExecutor입니다. 이는 컨테이너를 실행하기 위해 container-executor라는 외부 프로그램을 사용합니다. 이 프로그램은 setuid 접근 권한 플래그가 설정되어 있어 YARN 애플리케이션 사용자의 권한으로 컨테이너를 실행할 수 있습니다.

Configuration

yarn.nodemanager.local-dirs와 yarn.nodemanager.log-dirs에 대해 구성된 디렉터리는 구성된 NodeManager 사용자(yarn)와 그룹(hadoop)이 소유해야 합니다. 이 디렉터리에 설정된 권한은 drwxr-xr-x여야 합니다.

container-executor 프로그램은 root가 소유해야 하고 권한이 ---Sr-s---로 설정되어야 합니다.

NodeManager가 LinuxContainerExecutor를 사용하도록 구성하려면 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 보안 컨테이너 실행기 (Windows Secure Container Executor, WSCE)

Windows 환경에서 보안 컨테이너 실행기는 WindowsSecureContainerExecutor입니다. 이는 Windows S4U 인프라를 사용해 YARN 애플리케이션 사용자로 컨테이너를 실행합니다. WSCE는 hadoopwinutilsvc 서비스의 존재를 요구합니다. 이 서비스는 %HADOOP_HOME%\bin\winutils.exe가 service 명령줄 인자로 시작되어 호스팅합니다. 이 서비스는 LocalSystem 권한이 필요한 일부 권한 있는 연산을 제공하므로, NM이 전체 JVM과 모든 NM 코드를 상승된 컨텍스트에서 실행할 필요가 없습니다. NM은 hadoop.dll에 호스팅된 RCP 클라이언트에 대한 JNI 호출을 통해 Local RPC(LRPC)로 hadoopwinutilsvc 서비스와 상호작용합니다.

Configuration

NodeManager가 WindowsSecureContainerExecutor를 사용하도록 구성하려면 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는 nodemanager를 실행하는 서비스 계정의 이름을 포함해야 합니다. 이 사용자는 hadoopwinutilsvc 함수에 접근할 수 있게 됩니다.
  • yarn.nodemanager.windows-secure-container-executor.impersonate.allowed는 클러스터에서 컨테이너를 생성할 수 있는 사용자를 포함해야 합니다. 이 사용자들은 hadoopwinutilsvc에 의해 위장(impersonate)될 수 있습니다.
  • yarn.nodemanager.windows-secure-container-executor.impersonate.denied는 컨테이너 생성이 명시적으로 금지된 사용자를 포함해야 합니다. hadoopwinutilsvc는 이 사용자들을 위장하기를 거부합니다.
  • yarn.nodemanager.windows-secure-container-executor.local-dirs는 nodemanager 로컬 디렉터리를 포함해야 합니다. 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에 걸친 전역 작업을 제어하며, 따라서 중첩 작업(nested jobs)이 필요합니다. 중첩 작업은 Windows 8과 Windows Server 2012 이후에서만 사용할 수 있습니다.

유용한 링크 (Useful Links)

  • Windows Server 2003에서 S4U Kerberos 확장 탐구
  • Nested Jobs
  • Winutils는 도메인 사용자로 태스크를 생성할 수 있어야 함
  • 보안 Windows Container Executor 구현
  • Windows Secure Container Executor를 위한 NodeManager의 권한 있는 계정 실행 필요성 제거

더 알아보기 (Learn more)