

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

# 使用基于角色的访问控制（RBAC）设置集群访问权限
<a name="spark-operator-security-rbac"></a>

为了部署 Spark Operator，Amazon EMR on EKS 会为 Spark Operator 和 Spark 应用程序创建两个角色和服务账户。

**Topics**
+ [

## Operator 服务账户和角色
](#spark-operator-sa-oper)
+ [

## Spark 服务账户和角色
](#spark-operator-sa-spark)

## Operator 服务账户和角色
<a name="spark-operator-sa-oper"></a>

Amazon EMR on EKS 会创建 **Operator 服务账户和角色**来管理 Spark 任务的 `SparkApplications` 以及其他资源（例如服务）。

此服务账户的默认名称为 `emr-containers-sa-spark-operator`。

以下规则适用于此服务角色：

```
 rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - "*"
- apiGroups:
  - ""
  resources:
  - services
  - configmaps
  - secrets
  verbs:
  - create
  - get
  - delete
  - update
- apiGroups:
  - extensions
  - networking.k8s.io
  resources:
  - ingresses
  verbs:
  - create
  - get
  - delete
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - update
  - patch
- apiGroups:
  - ""
  resources:
  - resourcequotas
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - apiextensions.k8s.io
  resources:
  - customresourcedefinitions
  verbs:
  - create
  - get
  - update
  - delete
- apiGroups:
  - admissionregistration.k8s.io
  resources:
  - mutatingwebhookconfigurations
  - validatingwebhookconfigurations
  verbs:
  - create
  - get
  - update
  - delete
- apiGroups:
  - sparkoperator.k8s.io
  resources:
  - sparkapplications
  - sparkapplications/status
  - scheduledsparkapplications
  - scheduledsparkapplications/status
  verbs:
  - "*"
  {{- if .Values.batchScheduler.enable }}
  # required for the `volcano` batch scheduler
- apiGroups:
  - scheduling.incubator.k8s.io
  - scheduling.sigs.dev
  - scheduling.volcano.sh
  resources:
  - podgroups
  verbs:
  - "*"
  {{- end }}
  {{ if .Values.webhook.enable }}
- apiGroups:
  - batch
  resources:
  - jobs
  verbs:
  - delete
  {{- end }}
```

## Spark 服务账户和角色
<a name="spark-operator-sa-spark"></a>

Spark 驱动程序 Pod 需要一个与该 Pod 位于同一命名空间的 Kubernetes 服务账户。此服务账户需要权限才能创建、获取、列出、修补和删除执行程序 Pod，以及为驱动程序创建 Kubernetes 无头服务。除非 Pod 命名空间中的默认服务账户具有所需权限，否则驱动程序会失败并在没有服务账户的情况下退出。

此服务账户的默认名称为 `emr-containers-sa-spark`。

以下规则适用于此服务角色：

```
 rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - "*"
- apiGroups:
  - ""
  resources:
  - services
  verbs:
  - "*"
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - "*"
- apiGroups:
  - ""
  resources:
  - persistentvolumeclaims
  verbs:
  - "*"
```