

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 啟用對 Amazon Elastic Kubernetes Service 叢集的 AWS Resilience Hub 存取
<a name="enabling-eks-in-arh"></a>

AWS Resilience Hub 透過分析 Amazon EKS 叢集的基礎設施來評估 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集的彈性。 AWS Resilience Hub 會使用 Kubernetes 角色型存取控制 (RBAC) 組態來評估其他 Kubernetes (K8) 工作負載，這些工作負載會部署為 Amazon EKS 叢集的一部分。若要 AWS Resilience Hub 讓 查詢 Amazon EKS 叢集以分析和評估工作負載，您必須完成下列操作：
+ 在與 Amazon EKS 叢集相同的帳戶中建立或使用現有 AWS Identity and Access Management (IAM) 角色。
+ 啟用 Amazon EKS 叢集的 IAM 使用者和角色存取權，並授予其他唯讀許可給 Amazon EKS 叢集內的 K8s 資源。如需啟用 IAM 使用者和角色存取 Amazon EKS 叢集的詳細資訊，請參閱[啟用 IAM 使用者和角色存取您的叢集 - Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html)。

使用 IAM 實體存取 Amazon EKS 叢集，是由在 Amazon EKS 控制平面上執行的 [AWS IAM Authenticator for Kubernetes](https://github.com/kubernetes-sigs/aws-iam-authenticator#readme) 啟用。驗證器會從 取得組態資訊`aws-auth ConfigMap`。

**注意**  
如需所有`aws-auth ConfigMap`設定的詳細資訊，請參閱 GitHub 上的[完整組態格式](https://github.com/kubernetes-sigs/aws-iam-authenticator#full-configuration-format)。
如需不同 IAM 身分的詳細資訊，請參閱《IAM 使用者指南》中的[身分 （使用者、群組和角色）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)。
如需 Kubernetes 角色型存取控制 (RBAC) 組態的詳細資訊，請參閱[使用 RBAC 授權](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)。

AWS Resilience Hub 會使用帳戶中的 IAM 角色查詢 Amazon EKS 叢集內的資源。若要 AWS Resilience Hub 讓 存取 Amazon EKS 叢集內的資源， 所使用的 IAM 角色 AWS Resilience Hub 必須對應至具有足夠唯讀許可的 Kubernetes 群組，才能存取 Amazon EKS 叢集內的資源。

AWS Resilience Hub 允許 使用下列其中一個 IAM 角色選項來存取您的 Amazon EKS 叢集資源：
+ 如果您的應用程式設定為使用角色型存取來存取資源，則在建立應用程式時傳遞給 AWS Resilience Hub 的叫用者角色或次要帳戶角色將用於在評估期間存取您的 Amazon EKS 叢集。

  下列概念圖顯示應用程式設定為角色型應用程式時， 如何 AWS Resilience Hub 存取 Amazon EKS 叢集。  
![\[Diagram showing AWS Resilience Hub accessing EKS clusters in primary and secondary accounts.\]](http://docs.aws.amazon.com/zh_tw/resilience-hub/latest/userguide/images/EKS-accounts.png)
+ 如果您的應用程式設定為使用目前的 IAM 使用者來存取資源，您必須在`AwsResilienceHubAssessmentEKSAccessRole`與 Amazon EKS 叢集相同的帳戶中建立名稱為 的新 IAM 角色。然後，此 IAM 角色將用於存取您的 Amazon EKS 叢集。

  下列概念圖顯示當應用程式設定為使用目前的 IAM 使用者許可時， 如何 AWS Resilience Hub 存取部署在您的主要帳戶中的 Amazon EKS 叢集。  
![\[Icons representing login, current IAM role, assume role, and AWS Resilience Hub options.\]](http://docs.aws.amazon.com/zh_tw/resilience-hub/latest/userguide/images/SingleAccountEKS.png)

  下列概念圖顯示當應用程式設定為使用目前的 IAM 使用者許可時， 如何 AWS Resilience Hub 存取部署在次要帳戶上的 Amazon EKS 叢集。  
![\[Icons representing AWS 帳戶 access roles and permissions for primary and secondary accounts.\]](http://docs.aws.amazon.com/zh_tw/resilience-hub/latest/userguide/images/MultiAccountEKS.png)

# 授予 Amazon EKS 叢集中資源的 AWS Resilience Hub 存取權
<a name="grant-permissions-to-eks-in-arh"></a>

AWS Resilience Hub 可讓您存取位於 Amazon EKS 叢集上的資源，前提是您已設定必要的許可。

**將探索和評估 AWS Resilience Hub Amazon EKS 叢集內資源所需的許可授予**

1. 設定 IAM 角色以存取 Amazon EKS 叢集。

   如果您已使用角色型存取來設定應用程式，您可以略過此步驟並繼續步驟 2，並使用您用來建立應用程式的角色。如需 AWS Resilience Hub 如何使用 IAM 角色的詳細資訊，請參閱 [AWS Resilience Hub 如何與 IAM 搭配使用](security_iam_service-with-iam.md)。

   如果您已使用目前的 IAM 使用者許可設定應用程式，則必須在與 `AwsResilienceHubAssessmentEKSAccessRole` Amazon EKS 叢集相同的帳戶中建立 IAM 角色。然後，存取 Amazon EKS 叢集時會使用此 IAM 角色。

   在匯入和評估應用程式時， AWS Resilience Hub 會使用 IAM 角色來存取 Amazon EKS 叢集中的資源。此角色應在與您的 Amazon EKS 叢集相同的帳戶中建立，並將與包含 AWS Resilience Hub 評估 Amazon EKS 叢集所需許可的 Kubernetes 群組進行映射。

   如果您的 Amazon EKS 叢集與 AWS Resilience Hub 呼叫帳戶位於相同的帳戶中，則應使用下列 IAM 信任政策來建立角色。在此 IAM 信任政策中， `caller_IAM_role` 用於目前 帳戶中以呼叫 APIs AWS Resilience Hub。
**注意**  
`caller_IAM_role` 是與您的 AWS 使用者帳戶相關聯的角色。

   如果您的 Amazon EKS 叢集位於跨帳戶 （與 AWS Resilience Hub 呼叫帳戶不同的帳戶），您必須使用以下 `AwsResilienceHubAssessmentEKSAccessRole` IAM 信任政策建立 IAM 角色：
**注意**  
作為先決條件，若要存取部署在 AWS Resilience Hub 與使用者帳戶不同的帳戶中的 Amazon EKS 叢集，您必須設定多帳戶存取。如需詳細資訊，請參閱 

1. 為 AWS Resilience Hub 應用程式建立 `ClusterRole`和 `ClusterRoleBinding`（或 `RoleBinding`) 角色。

   建立 `ClusterRoleBinding` `ClusterRole`並將授予 所需的唯讀許可， AWS Resilience Hub 以分析和評估屬於 Amazon EKS 叢集中特定命名空間一部分的資源。

   AWS Resilience Hub 可讓您完成下列其中一項，以限制對命名空間的存取，以產生彈性評估：

   1. 授予應用程式所有命名空間的 AWS Resilience Hub 讀取存取權。

      若要 AWS Resilience Hub 讓 評估 Amazon EKS 叢集內所有命名空間的資源彈性，您必須建立下列 `ClusterRole`和 `ClusterRoleBinding`。
      + `resilience-hub-eks-access-cluster-role` (`ClusterRole`) – 定義 AWS Resilience Hub 評估 Amazon EKS 叢集所需的許可。
      +  `resilience-hub-eks-access-cluster-role-binding` (`ClusterRoleBinding`) – 定義 Amazon EKS 叢集`resilience-hub-eks-access-group`中名為 的群組，授予其使用者在 中執行彈性評估所需的許可 AWS Resilience Hub。

      授予 AWS Resilience Hub 應用程式所有命名空間讀取存取權的範本如下：

      ```
      cat << EOF | kubectl apply -f -
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: resilience-hub-eks-access-cluster-role
      rules:
      - apiGroups:
          - ""
        resources:
          - pods
          - replicationcontrollers
          - nodes
        verbs:
          - get
          - list
      - apiGroups:
          - apps
        resources:
          - deployments
          - replicasets
        verbs:
          - get
          - list
      - apiGroups:
          - policy
        resources:
          - poddisruptionbudgets
        verbs:
          - get
          - list
      - apiGroups:
          - autoscaling.k8s.io
        resources:
          - verticalpodautoscalers
        verbs:
          - get
          - list
      - apiGroups:
          - autoscaling
        resources:
          - horizontalpodautoscalers
        verbs:
          - get
          - list
      - apiGroups:
          - karpenter.sh
        resources:
          - provisioners
          - nodepools
        verbs:
          - get
          - list
      - apiGroups:
          - karpenter.k8s.aws
        resources:
          - awsnodetemplates
          - ec2nodeclasses
        verbs:
          - get
          - list
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: resilience-hub-eks-access-cluster-role-binding
      subjects:
        - kind: Group
          name: resilience-hub-eks-access-group
          apiGroup: rbac.authorization.k8s.io
      roleRef:
        kind: ClusterRole
        name: resilience-hub-eks-access-cluster-role
        apiGroup: rbac.authorization.k8s.io
      ---
      EOF
      ```

   1. 授予讀取特定命名空間的 AWS Resilience Hub 存取權。

      您可以使用 限制 AWS Resilience Hub 存取特定命名空間集中的資源`RoleBinding`。若要達成此目的，您必須建立下列角色：
      + `ClusterRole` – 若要 AWS Resilience Hub 讓 存取 Amazon EKS 叢集中特定命名空間中的資源並評估其彈性，您必須建立下列`ClusterRole`角色。
        + `resilience-hub-eks-access-cluster-role` – 指定評估特定命名空間內資源的必要許可。
        + `resilience-hub-eks-access-global-cluster-role` – 指定評估叢集範圍資源的必要許可，這些資源不會與 Amazon EKS 叢集內的特定命名空間相關聯。 AWS Resilience Hub 需要存取 Amazon EKS 叢集上叢集範圍資源 （例如節點） 的許可，才能評估應用程式的彈性。

        建立`ClusterRole`角色的範本如下所示：

        ```
        cat << EOF | kubectl apply -f -
        apiVersion: rbac.authorization.k8s.io/v1
        kind: ClusterRole
        metadata:
          name: resilience-hub-eks-access-cluster-role
        rules:
          - apiGroups:
              - ""
            resources:
              - pods
              - replicationcontrollers
            verbs:
              - get
              - list
          - apiGroups:
              - apps
            resources:
              - deployments
              - replicasets
            verbs:
              - get
              - list
          - apiGroups:
              - policy
            resources:
              - poddisruptionbudgets
            verbs:
              - get
              - list
          - apiGroups:
              - autoscaling.k8s.io
            resources:
              - verticalpodautoscalers
            verbs:
              - get
              - list
          - apiGroups:
              - autoscaling
            resources:
              - horizontalpodautoscalers
            verbs:
              - get
              - list
        
        ---
        apiVersion: rbac.authorization.k8s.io/v1
        kind: ClusterRole
        metadata:
          name: resilience-hub-eks-access-global-cluster-role
        rules:
          - apiGroups:
              - ""
            resources:
              - nodes
            verbs:
              - get
              - list
          - apiGroups:
              - karpenter.sh
            resources:
              - provisioners
              - nodepools
            verbs:
              - get
              - list
          - apiGroups:
              - karpenter.k8s.aws
            resources:
              - awsnodetemplates
              - ec2nodeclasses
            verbs:
              - get
              - list
        
        ---
        EOF
        ```
      + `RoleBinding` 角色 – 此角色會授予 所需的許可 AWS Resilience Hub ，以存取特定命名空間內的資源。也就是說，您必須在每個命名空間中建立`RoleBinding`角色，讓 AWS Resilience Hub 存取指定命名空間內的資源。
**注意**  
如果您使用 `ClusterAutoscaler`進行自動擴展，則必須在 `RoleBinding`中另外建立 `kube-system`。這是評估 的必要項目`ClusterAutoscaler`，這是 `kube-system` 命名空間的一部分。  
透過這樣做，您將授予 AWS Resilience Hub 必要的許可來評估`kube-system`命名空間內的資源，同時評估 Amazon EKS 叢集。

        建立`RoleBinding`角色的範本如下所示：

        ```
        cat << EOF | kubectl apply -f -
        apiVersion: rbac.authorization.k8s.io/v1
        kind: RoleBinding
        metadata:
          name: resilience-hub-eks-access-cluster-role-binding
          namespace: <namespace>
        subjects:
          - kind: Group
            name: resilience-hub-eks-access-group
            apiGroup: rbac.authorization.k8s.io
        roleRef:
          kind: ClusterRole
          name: resilience-hub-eks-access-cluster-role
          apiGroup: rbac.authorization.k8s.io
        
        ---
        EOF
        ```
      + `ClusterRoleBinding` 角色 – 此角色授予 AWS Resilience Hub 存取叢集範圍資源所需的許可。

        建立`ClusterRoleBinding`角色的範本如下所示：

        ```
        cat << EOF | kubectl apply -f - 
        ---
        apiVersion: rbac.authorization.k8s.io/v1
        kind: ClusterRoleBinding
        metadata:
          name: resilience-hub-eks-access-global-cluster-role-binding
        subjects:
          - kind: Group
            name: resilience-hub-eks-access-group
            apiGroup: rbac.authorization.k8s.io
        roleRef:
          kind: ClusterRole
          name: resilience-hub-eks-access-global-cluster-role
          apiGroup: rbac.authorization.k8s.io
        
        ---
        EOF
        ```

1. 更新 `aws-auth ConfigMap` 以對應 `resilience-hub-eks-access-group`與用於存取 Amazon EKS 叢集的 IAM 角色。

   此步驟會在步驟 1 中使用的 IAM 角色與步驟 2 中建立的 Kubernetes 群組之間建立映射。此映射會將存取 Amazon EKS 叢集內資源的許可授予 IAM 角色。
**注意**  
`ROLE-NAME` 是指用於存取 Amazon EKS 叢集的 IAM 角色。  
如果您的應用程式設定為使用角色型存取，則角色應該是建立應用程式 AWS Resilience Hub 時傳遞給 的叫用者角色或次要帳戶角色。
如果您的應用程式設定為使用目前的 IAM 使用者來存取 資源，則它必須是 `AwsResilienceHubAssessmentEKSAccessRole`。
`ACCOUNT-ID` 應該是 Amazon EKS 叢集 AWS 的帳戶 ID。

   您可以使用下列`aws-auth``ConfigMap`其中一種方式建立 ：
   + 使用 `eksctl`

     使用下列命令來更新 `aws-auth` `ConfigMap`：

     ```
     eksctl create iamidentitymapping \
      --cluster <cluster-name> \
      --region=<region-code> \
      --arn arn:aws:iam::<ACCOUNT-ID>:role/<ROLE-NAME>\
      --group resilience-hub-eks-access-group \
      --username AwsResilienceHubAssessmentEKSAccessRole
     ```
   + 您可以將 IAM 角色詳細資訊新增至資料`ConfigMap`下的 `mapRoles`區段，`aws-auth``ConfigMap`以手動編輯 。使用下列命令來編輯 `aws-auth` `ConfigMap`。

     `kubectl edit -n kube-system configmap/aws-auth`

     `mapRoles` 區段包含下列參數：
     + `rolearn` – 要新增之 IAM 角色的 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。
       + ARN 語法 – `arn:aws:iam::<ACCOUNT-ID>:role/<ROLE-NAME>`。
     + `username` – 要映射至 IAM 角色的 Kubernetes 內使用者名稱 (`AwsResilienceHubAssessmentEKSAccessRole`)。
     + `groups` – 群組名稱應與**步驟 2 **() 中建立的群組名稱相符`resilience-hub-eks-access-group`。
**注意**  
如果`mapRoles`區段不存在，您必須手動新增此區段。

     使用下列範本將 IAM 角色詳細資訊新增至資料`ConfigMap`下的 `mapRoles`區段。

     ```
         - groups:
           - resilience-hub-eks-access-group
           rolearn: arn:aws:iam::<ACCOUNT-ID>:role/<ROLE-NAME>
           username: AwsResilienceHubAssessmentEKSAccessRole
     ```