AWS Resilience Hub 授與 Amazon EKS 叢集中資源的存取權 - AWS 韌性樞紐

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

AWS Resilience Hub 授與 Amazon EKS 叢集中資源的存取權

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

授與用 AWS Resilience Hub 於探索和評估 Amazon EKS 叢集內資源的必要許可
  1. 設定 IAM 角色以存取 Amazon EKS 叢集。

    如果您已使用以角色為基礎的存取來設定應用程式,則可以略過此步驟並繼續執行步驟 2,並使用您用來建立應用程式的角色。如需如何 AWS Resilience Hub 使用 IAM 角色的詳細資訊,請參閱AWS 彈性中樞如何與 IAM 搭配運作

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

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

    如果您的 Amazon EKS 叢集與 AWS Resilience Hub 呼叫帳戶位於相同的帳戶中,則應使用下列 IAM 信任政策建立角色。在此 IAM 信任政策中,用caller_IAM_role於目前帳戶來呼叫 API AWS Resilience Hub。

    注意

    caller_IAM_role是與您的 AWS 使用者帳戶相關聯的角色。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::eks_cluster_account_id:role/caller_IAM_role" }, "Action": "sts:AssumeRole" } ] }

    如果 Amazon EKS 叢集位於跨帳戶 (與 AWS Resilience Hub 呼叫帳戶不同的帳戶),您必須使用下列 AwsResilienceHubAssessmentEKSAccessRole IAM 信任政策建立 IAM 角色:

    注意

    先決條件是,若要存取部署在不同於 AWS Resilience Hub 使用者帳戶的帳戶中的 Amazon EKS 叢集,您必須設定多帳戶存取。如需詳細資訊,請參閱

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::eks_cluster_account_id:role/AwsResilienceHubExecutorRole" }, "Action": "sts:AssumeRole" } ] }
  2. 為 AWS Resilience Hub 應用程式建立ClusterRoleClusterRoleBinding (或RoleBinding) 角色。

    建立ClusterRoleClusterRoleBinding將授與必要的唯讀許可, 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) — 定義評估 Amazon EKS 叢集所需的許可。 AWS Resilience Hub

      • 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 verbs: - get - list - apiGroups: - karpenter.k8s.aws resources: - awsnodetemplates 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
    2. 授與讀 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 verbs: - get - list - apiGroups: - karpenter.k8s.aws resources: - awsnodetemplates verbs: - get - list --- EOF
      • RoleBindingrole — 此角色授與存取特定命名空間內資源的必要權限。 AWS Resilience Hub 也就是說,您必須在每個命名空間中建立RoleBinding角色, AWS Resilience Hub 才能存取指定命名空間內的資源。

        注意

        如果您使用自動調度ClusterAutoscaler資源,則必須RoleBinding在中另外建立。kube-system這對於評估您的ClusterAutoscaler,這是kube-system命名空間的一部分是必要的。

        這樣,您將授予 AWS Resilience Hub 評估 Amazon EKS 叢集時所需的權限,以評估kube-system命名空間內的資源。

        創建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
      • ClusterRoleBindingrole — 此角色授與存取叢集範圍資 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
  3. 更新aws-auth ConfigMap以使用用於存取 Amazon EKS 叢集的 IAM 角色對應。resilience-hub-eks-access-group

    此步驟會在步驟 1 中使用的 IAM 角色與步驟 2 中建立的 Kubernetes 群組之間建立對應。此對應授予存取權管理角色的許可,以存取 Amazon EKS 叢集內的資源。

    注意
    • ROLE-NAME是指用於存取 Amazon EKS 叢集的 IAM 角色。

      • 如果您的應用程式設定為使用以角色為基礎的存取,則該角色應該是建立應用程式 AWS Resilience Hub 時傳送給的呼叫者角色或次要帳戶角色。

      • 如果您的應用程式設定為使用目前的 IAM 使用者存取資源,則該應用程式必須是AwsResilienceHubAssessmentEKSAccessRole.

    • ACCOUNT-ID應該是 Amazon EKS 叢集的 AWS 帳戶識別碼。

    您可以使aws-authConfigMap用下列其中一種方式建立:

    • 使用 eksctl

      使用下列指令來更新 aws-authConfigMap

      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
    • 您可以aws-authConfigMap通過將 IAM 角色詳細信息添加到ConfigMap下面數據的mapRoles部分來手動編輯。使用下列指令來編輯aws-authConfigMap

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

      mapRoles部分由以下參數組成:

      • rolearn— 要新增的 IAM 角色的 Amazon 資源名稱 (ARN)

        • 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