

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 了解 Amazon EKS 如何创建 RBAC 角色和用户
<a name="default-roles-users"></a>

创建 Kubernetes 集群时，会在该集群上创建多个默认 Kubernetes 身份，以便 Kubernetes 正常运行。Amazon EKS 会为其每个默认组件创建 Kubernetes 身份。这些身份为集群组件提供 Kubernetes 基于角色的授权控制（RBAC）。有关更多信息，请参阅 Kubernetes 文档中的[使用 RBAC 授权](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)。

在向集群安装可选[附加组件](eks-add-ons.md)时，可能会向集群添加其他 Kubernetes 身份。有关本主题未涉及身份的更多信息，请参阅附加组件文档。

您可以使用 AWS 管理控制台或 `kubectl` 命令行工具，查看 Amazon EKS 在集群上创建的 Kubernetes 身份列表。所有用户身份都会出现在 `kube` 审计日志中，可通过 Amazon CloudWatch 向你提供。

## AWS 管理控制台
<a name="default-role-users-console"></a>

### 先决条件
<a name="_prerequisite"></a>

您使用的 [IAM 主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)必须拥有[所需权限](view-kubernetes-resources.md#view-kubernetes-resources-permissions)中描述的权限。

### 要使用AWS 管理控制台查看 Amazon EKS 创建的身份
<a name="to_view_amazon_eks_created_identities_using_the_shared_consolelong"></a>

1. 打开 [Amazon EKS 控制台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 在 **Clusters**（集群）列表中，选择包含要查看的身份的集群。

1. 选择**资源**选项卡。

1. 在 **Resource types**（资源类型）下，选择 **Authorization**（授权）。

1. 选择 **ClusterRoles**、**ClusterRoleBindings**、**Roles** 或 **RoleBindings**。所有以 **eks** 为前缀的资源均由 Amazon EKS 创建。Amazon EKS 创建的其他身份资源包括：
   + **ClusterRole** 和名为 **aws-node** 的 **ClusterRoleBinding**。**aws-node** 资源支持[适用于 Kubernetes 的 Amazon VPC CNI 插件](managing-vpc-cni.md)，Amazon EKS 会将其安装在所有集群上。
   + 名为 **vpc-resource-controller-role** 的 **ClusterRole** 和名为 **vpc-resource-controller-rolebinding** 的 **ClusterRoleBinding**。这些资源支持 [Amazon VPC 资源控制器](https://github.com/aws/amazon-vpc-resource-controller-k8s)，Amazon EKS 会将其安装在所有集群上。

   除了控制台中的资源外，即使以下特殊用户身份在集群配置中不可见，但它们仍存在于您的集群上：
   +  **`eks:cluster-bootstrap`** – 在集群引导期间用于 `kubectl` 操作。
   +  **`eks:support-engineer`** – 用于集群管理操作。

1. 选择特定资源以查看有关该资源的详细信息。默认情况下，信息在**结构化视图**中显示。在详细信息页面的右上角，您可以选择 **Raw view**（原始视图）以查看该资源的所有信息。

## Kubectl
<a name="default-role-users-kubectl"></a>

### 先决条件
<a name="_prerequisite_2"></a>

用来列出集群上的 Kubernetes 资源的实体 [AWS Identity and Access Management（IAM）或 OpenID Connect（OIDC）]，必须由 IAM 或您的 OIDC 身份提供者进行身份验证。必须向实体授予权限，才能为您希望该实体使用的集群上的 `Role`、`ClusterRole`、`RoleBinding` 和 `ClusterRoleBinding` 资源使用 Kubernetes `get` 和 `list` 动词。有关向 IAM 实体授予集群访问权限的更多信息，请参阅[向 IAM 用户和角色授予对 Kubernetes API 的访问权限](grant-k8s-access.md)。有关向经过您自己的 OIDC 提供者身份验证的实体授予集群访问权限的更多信息，请参阅[通过外部 OIDC 提供者向用户授予 Kubernetes 访问权限](authenticate-oidc-identity-provider.md)。

### 要使用 `kubectl` 查看 Amazon EKS 创建的身份
<a name="_to_view_amazon_eks_created_identities_using_kubectl"></a>

为要查看的资源类型运行命令。所有以 **eks** 为前缀的返回资源均由 Amazon EKS 创建。除命令输出中返回的资源，即使以下特殊用户身份在集群配置中不可见，但它们仍存在于您的集群上：
+  **`eks:cluster-bootstrap`** – 在集群引导期间用于 `kubectl` 操作。
+  **`eks:support-engineer`** – 用于集群管理操作。

 **ClusterRoles** – `ClusterRoles` 范围限定为您的集群，因此授予角色的任何权限都适用于集群上任何 Kubernetes 命名空间中的资源。

以下命令返回 Amazon EKS 在您的集群上创建的所有 Kubernetes `ClusterRoles`。

```
kubectl get clusterroles | grep eks
```

除了输出中返回的 `ClusterRoles`（具有前缀）外，还存在以下 `ClusterRoles`。
+  **`aws-node`** – 此 `ClusterRole` 支持[适用于 Kubernetes 的 Amazon VPC CNI 插件](managing-vpc-cni.md)，Amazon EKS 会将其安装在所有集群上。
+  **`vpc-resource-controller-role`** – 该 `ClusterRole` 支持 [Amazon VPC 资源控制器](https://github.com/aws/amazon-vpc-resource-controller-k8s)，Amazon EKS 会将其安装在所有集群上。

要查看 `ClusterRole` 的规范，请将以下命令中的 *eks:k8s-metrics* 替换为上一条命令输出中返回的 `ClusterRole`。以下示例返回 *eks:k8s-metrics* `ClusterRole` 的规范。

```
kubectl describe clusterrole eks:k8s-metrics
```

示例输出如下。

```
Name:         eks:k8s-metrics
Labels:       <none>
Annotations:  <none>
PolicyRule:
  Resources         Non-Resource URLs  Resource Names  Verbs
  ---------         -----------------  --------------  -----
                    [/metrics]         []              [get]
  endpoints         []                 []              [list]
  nodes             []                 []              [list]
  pods              []                 []              [list]
  deployments.apps  []                 []              [list]
```

 **ClusterRoleBindings**：`ClusterRoleBindings` 范围限定为您的集群。

以下命令返回 Amazon EKS 在您的集群上创建的所有 Kubernetes `ClusterRoleBindings`。

```
kubectl get clusterrolebindings | grep eks
```

除了输出中返回的 `ClusterRoleBindings` 外，还存在以下 `ClusterRoleBindings`。
+  **`aws-node`** – 此 `ClusterRoleBinding` 支持[适用于 Kubernetes 的 Amazon VPC CNI 插件](managing-vpc-cni.md)，Amazon EKS 会将其安装在所有集群上。
+  **`vpc-resource-controller-rolebinding`** – 该 `ClusterRoleBinding` 支持 [Amazon VPC 资源控制器](https://github.com/aws/amazon-vpc-resource-controller-k8s)，Amazon EKS 会将其安装在所有集群上。

要查看 `ClusterRoleBinding` 的规范，请将以下命令中的 *eks:k8s-metrics* 替换为上一条命令输出中返回的 `ClusterRoleBinding`。以下示例返回 *eks:k8s-metrics* `ClusterRoleBinding` 的规范。

```
kubectl describe clusterrolebinding eks:k8s-metrics
```

示例输出如下。

```
Name:         eks:k8s-metrics
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  eks:k8s-metrics
Subjects:
  Kind  Name             Namespace
  ----  ----             ---------
  User  eks:k8s-metrics
```

 **Roles** – `Roles` 范围限定为 Kubernetes 命名空间。Amazon EKS 创建的所有 `Roles` 范围限定为 `kube-system` 命名空间。

以下命令返回 Amazon EKS 在您的集群上创建的所有 Kubernetes `Roles`。

```
kubectl get roles -n kube-system | grep eks
```

要查看 `Role` 的规范，请将以下命令中的 *eks:k8s-metrics* 替换为上一条命令输出中返回的 `Role` 名称。以下示例返回 *eks:k8s-metrics* `Role` 的规范。

```
kubectl describe role eks:k8s-metrics -n kube-system
```

示例输出如下。

```
Name:         eks:k8s-metrics
Labels:       <none>
Annotations:  <none>
PolicyRule:
  Resources         Non-Resource URLs  Resource Names             Verbs
  ---------         -----------------  --------------             -----
  daemonsets.apps   []                 [aws-node]                 [get]
  deployments.apps  []                 [vpc-resource-controller]  [get]
```

 **RoleBindings** – `RoleBindings` 范围限定为 Kubernetes 命名空间。Amazon EKS 创建的所有 `RoleBindings` 范围限定为 `kube-system` 命名空间。

以下命令返回 Amazon EKS 在您的集群上创建的所有 Kubernetes `RoleBindings`。

```
kubectl get rolebindings -n kube-system | grep eks
```

要查看 `RoleBinding` 的规范，请将以下命令中的 *eks:k8s-metrics* 替换为上一条命令输出中返回的 `RoleBinding`。以下示例返回 *eks:k8s-metrics* `RoleBinding` 的规范。

```
kubectl describe rolebinding eks:k8s-metrics -n kube-system
```

示例输出如下。

```
Name:         eks:k8s-metrics
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  Role
  Name:  eks:k8s-metrics
Subjects:
  Kind  Name             Namespace
  ----  ----             ---------
  User  eks:k8s-metrics
```