

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用基于角色的访问控制（RBAC）设置 Apache Livy 和 Spark 应用程序权限
<a name="job-runs-apache-livy-rbac"></a>

为了部署 Livy，Amazon EMR on EKS 会创建一个服务器服务账户和角色，以及一个 Spark 服务账户和角色。这些角色必须具有必要的 RBAC 权限才能完成设置和运行 Spark 应用程序。

**服务器服务账户和角色的 RBAC 权限**

Amazon EMR on EKS 会创建 Livy 服务器服务账户和角色，来管理 Spark 作业的 Livy 会话，以及路由进出入口和其他资源的流量。

此服务账户的默认名称为 `emr-containers-sa-livy`。必须拥有以下权限。

```
rules:
- apiGroups:
  - ""
  resources:
  - "namespaces"
  verbs:
  - "get"
- apiGroups:
  - ""
  resources:
  - "serviceaccounts"
    "services"
    "configmaps"
    "events"
    "pods"
    "pods/log"
  verbs:
  - "get"
    "list"
    "watch"
    "describe"
    "create"
    "edit"
    "delete"
    "deletecollection"
    "annotate"
    "patch"
    "label"
 - apiGroups:
   - ""
   resources:
   - "secrets"
   verbs:
   - "create"
     "patch"
     "delete"
     "watch"
 - apiGroups:
   - ""
   resources:
   - "persistentvolumeclaims"
   verbs:
   - "get"
     "list"
     "watch"
     "describe"
     "create"
     "edit"
     "delete"
     "annotate"
     "patch"
     "label"
```

**Spark 服务账户和角色的 RBAC 权限**

Spark 驱动程序 Pod 需要一个与该 Pod 位于同一命名空间的 Kubernetes 服务账户。该服务账户需要拥有权限才能管理执行程序容器组（pod）和驱动程序容器组（pod）所需的任何资源。除非命名空间中的默认服务账户具有所需的权限，否则驱动程序会失败并退出。需要以下 RBAC 权限。

```
rules:
- apiGroups:
  - ""
    "batch"
    "extensions"
    "apps"
  resources:
  - "configmaps"
    "serviceaccounts"
    "events"
    "pods"
    "pods/exec"
    "pods/log"
    "pods/portforward"
    "secrets"
    "services"
    "persistentvolumeclaims"
    "statefulsets"
  verbs:
  - "create"
    "delete"
    "get"
    "list"
    "patch"
    "update"
    "watch"
    "describe"
    "edit"
    "deletecollection"
    "patch"
    "label"
```