

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

# 所需的 IAM 权限和角色
<a name="next-gen-iam-permissions"></a>

**AWS 管理的策略**

您可以将 `AWSResilienceHubV2AssessmentExecutionPolicy` 附加得到 IAM 身份。在运行评估时，此策略向其他 AWS 服务授予只读访问权限，以进行弹性发现、评估和管理。有关此策略中包含的权限的详细信息，请参阅[AWSResilienceHubV2AssessmentExecutionPolicy](next-gen-security-iam-awsmanpol.md#next-gen-security_iam_aws-v2-assessment-policy)。

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

如果您使用弹性测试，还要附上`AWSResilienceHubResilienceTestingPolicy`托管策略。该政策向Resilience Hub授予代表您启动和管理实验所需的 AWS Fault Injection Service (AWS FIS) 权限。有关此策略中包含的权限的详细信息，请参阅[AWSResilienceHubResilienceTestingPolicy](next-gen-security-iam-awsmanpol.md#next-gen-security_iam_aws-resilience-testing-policy)。

**注意**  
如果您的账户中没有该托管策略，请创建具有相同权限的内联策略。有关政策内容，请参阅[AWSResilienceHubResilienceTestingPolicy](next-gen-security-iam-awsmanpol.md#next-gen-security_iam_aws-resilience-testing-policy)。

**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 访问条目是管理集群身份验证的首选方法。您的集群必须使用`API`或`API_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_MAP`或`API_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"
```