View a markdown version of this page

所需的 IAM 权限和角色 - AWS Resilience Hub

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

所需的 IAM 权限和角色

AWS 管理的策略

您可以将 AWSResilienceHubV2AssessmentExecutionPolicy 附加得到 IAM 身份。在运行评估时,此策略向其他 AWS 服务授予只读访问权限,以进行弹性发现、评估和管理。有关此策略中包含的权限的详细信息,请参阅AWSResilienceHubV2AssessmentExecutionPolicy

注意

它用下一AWSResilienceHubV2AssessmentExecutionPolicy代的 R AWSResilienceHubAsssessmentExecutionPolicy esilience Hub 取代了之前使用的版本。

如果您使用弹性测试,还要附上AWSResilienceHubResilienceTestingPolicy托管策略。该政策向Resilience Hub授予代表您启动和管理实验所需的 AWS Fault Injection Service (AWS FIS) 权限。有关此策略中包含的权限的详细信息,请参阅AWSResilienceHubResilienceTestingPolicy

注意

如果您的账户中没有该托管策略,请创建具有相同权限的内联策略。有关政策内容,请参阅AWSResilienceHubResilienceTestingPolicy

IAM 在评估和弹性测试中的作用

要进行评估或弹性测试,下一代 Resilience Hub 必须扮演具有所需权限的 IAM 角色。该角色发现并读取您的 AWS 资源配置,并在启用弹性测试后代表您启动和管理 AWS FIS 实验。

有两种方法可以创建或配置此角色:

  • 创建新的服务角色(推荐)— 当您在下一代 Resilience Hub 控制台中创建或编辑服务时,可以在 “权限模型” 下选择 “创建新角色” 。控制台会自动使用正确的信任策略创建 IAM 角色并附加AWSResilienceHubV2AssessmentExecutionPolicy托管策略。

  • 使用现有服务角色 -如果您已经配置了角色,或者您更愿意在控制台之外创建角色,请选择使用现有服务角色。然后从列表中选择角色并确保该角色具有下述所需的信任策略和权限。

手动创建角色

要手动创建角色,请打开 IAM 控制台。选择自定义信任策略并使用如下信任策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "resiliencehub.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": {} } ] }

要获得权限,请附加AWSResilienceHubV2AssessmentExecutionPolicy托管策略。如果您使用弹性测试,还要附上AWSResilienceHubResilienceTestingPolicy托管策略。

IAM Service-Linked 角色

下一代 Resilience Hub 使用AWSResilienceHubServiceRolePolicy托管策略自动创建 Service-Linked 角色。

Terraform 状态文件访问权限

如果您将 Terraform 状态文件包含到下一代弹性中心服务中,请使用如下策略提供从亚马逊 S3 存储桶读取 Terraform 文件的权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::s3-bucket-name/path-to-state-file" }, { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::s3-bucket-name" } ] }

亚马逊 EKS 权限

如果您要将亚马逊 EKS 集群纳入您的下一代 Resilience Hub 服务,请遵循以下 3 步流程,提供下一代 Resilience Hub 权限,允许其使用 Kubernetes 基于角色的访问控制 (RBAC) 读取亚马逊 EKS 集群的配置数据。

第 1 步:将以下内容应用到您的 Amazon EKS 集群

这为下一代 Resilience Hub 提供了对所有命名空间所需的 Kubernetes 资源的只读访问权限:

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 - services 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

第 2 步:将 IAM 角色映射到 Kubernetes 群组

将您创建的 IAM 角色映射到 resilience-hub-eks-access-group Kubernetes 群组。您可以使用亚马逊 EKS 访问条目(推荐)或 aws-auth ConfigMap.

选项 A:使用 EKS 访问条目(推荐)

EKS 访问条目是管理集群身份验证的首选方法。您的集群必须使用APIAPI_AND_CONFIG_MAP身份验证模式。

aws eks create-access-entry \ --cluster-name cluster-name \ --principal-arn arn:aws:iam::ACCOUNT-ID:role/ResilienceHubRole \ --type STANDARD \ --kubernetes-groups '["resilience-hub-eks-access-group"]'

选项 B:使用 aws-auth ConfigMap

如果您的集群使用CONFIG_MAPAPI_AND_CONFIG_MAP身份验证模式,则可以改为编辑 aws-auth ConfigMap :

使用 eksctl:

eksctl create iamidentitymapping \ --cluster cluster-name \ --region region \ --arn arn:aws:iam::ACCOUNT-ID:role/ResilienceHubRole \ --group resilience-hub-eks-access-group \ --username AwsResilienceHubAssessmentEKSAccessRole

或者手动编辑 ConfigMap:

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

mapRoles在数据部分下方添加以下内容:

- groups: - resilience-hub-eks-access-group rolearn: arn:aws:iam::ACCOUNT-ID:role/ResilienceHubRole username: AwsResilienceHubAssessmentEKSAccessRole

第 3 步:验证

确认 RBAC 资源存在且角色映射已到位:

kubectl get clusterrole resilience-hub-eks-access-cluster-role kubectl describe clusterrolebinding resilience-hub-eks-access-cluster-role-binding

如果使用访问条目(选项 A):

aws eks describe-access-entry \ --cluster-name cluster-name \ --principal-arn arn:aws:iam::ACCOUNT-ID:role/ResilienceHubRole

如果使用 aws-auth ConfigMap (选项 B):

kubectl get configmap aws-auth -n kube-system -o yaml | grep -A 3 "ResilienceHubRole"