授予对您的 Amazon EKS 集群中资源的 AWS Resilience Hub 访问权限 - AWS 弹性中心

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

授予对您的 Amazon EKS 集群中资源的 AWS Resilience Hub 访问权限

AWS Resilience Hub 允许您访问位于 Amazon EKS 集群上的资源,前提是您已配置所需的权限。

向授予发现和评估 Amazon EKS 集群内资源所需的权限 AWS Resilience Hub
  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 集群相同的账户中创建,并将与包含评估您的 Amazon EKS 集群所需的权限的 Kubernetes 组 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) — 定义评估您的 AWS Resilience Hub Amazon EKS 集群所需的权限。

      • resilience-hub-eks-access-cluster-role-bindingClusterRoleBinding)– 在您的 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
      • RoleBinding角色-此角色授予 AWS Resilience Hub 访问特定命名空间内资源所需的权限。也就是说,您必须在每个命名空间中创建RoleBinding角色 AWS Resilience Hub 才能访问给定命名空间内的资源。

        注意

        如果您将 ClusterAutoscaler 用于自动扩展,则您必须另外在 kube-system 中创建 RoleBinding。这是评测您的 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
  3. 更新 aws-auth ConfigMap 以将 resilience-hub-eks-access-group 与用于访问 Amazon EKS 集群的 IAM 角色进行映射。

    此步骤在步骤 1 中使用的 IAM 角色与步骤 2 中创建的 Kubernetes 组之间创建映射。此映射向 IAM 角色授予访问 Amazon EKS 集群内资源的权限。

    注意
    • 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 角色详细信息添加到数据下的 ConfigMapmapRoles 部分来手动编辑 aws-auth ConfigMap。要编辑aws-auth ConfigMap ,请键入以下命令。

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

      mapRoles 部分可能包括以下参数:

      • rolearn(IAM)角色的 Amazon 资源名称(ARN)

        • ARN 语法 – arn:aws:iam::<ACCOUNT-ID>:role/<ROLE-NAME>

      • username – Kubernetes 内要映射到 IAM 角色的用户名。AwsResilienceHubAssessmentEKSAccessRole

      • groups – 群组名称应与步骤 2resilience-hub-eks-access-group)中创建的群组名称相匹配。

      注意

      如果 mapRoles 部分不存在,则必须手动添加此部分。

      使用以下模板将 IAM 角色详细信息添加到数据下的 ConfigMapmapRoles 部分。

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