本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Resilience Hub 授與 Amazon EKS 叢集中資源的存取權
AWS Resilience Hub 可讓您存取位於 Amazon EKS 叢集上的資源,前提是您已設定必要的許可。
授與用 AWS Resilience Hub 於探索和評估 Amazon EKS 叢集內資源的必要許可
-
設定 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" } ] }
-
為 AWS Resilience Hub 應用程式建立
ClusterRole
和ClusterRoleBinding
(或RoleBinding
) 角色。建立
ClusterRole
並ClusterRoleBinding
將授與必要的唯讀許可, AWS Resilience Hub 以便分析和評估屬於 Amazon EKS 叢集中特定命名空間一部分的資源。AWS Resilience Hub 可讓您透過完成下列其中一項,來限制其對命名空間的存取,以產生復原能力評估:
-
將所有命名空間的讀取權限授與 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
-
-
授與讀 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
role — 此角色授與存取特定命名空間內資源的必要權限。 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
-
ClusterRoleBinding
role — 此角色授與存取叢集範圍資 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
-
-
-
更新
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-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
-
您可以
aws-auth
ConfigMap
通過將 IAM 角色詳細信息添加到ConfigMap
下面數據的mapRoles
部分來手動編輯。使用下列指令來編輯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
— 要對應至 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
-
-