

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

# 必要的 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` 取代上一代 `AWSResilienceHubAsssessmentExecutionPolicy` 以與新一代的 Resilience 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 服務連結角色**

新一代 Resilience Hub 會使用 `AWSResilienceHubServiceRolePolicy`受管政策自動建立服務連結角色。

**Terraform 狀態檔案存取許可**

如果您要將 Terraform 狀態檔案包含在新一代 Resilience Hub 服務中，請提供許可，以使用下列政策從 Amazon 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}}"
    }
  ]
}
```

**Amazon EKS 許可**

如果您在新一代 Resilience Hub 服務中包含 Amazon EKS 叢集，請遵循下列 3 步驟程序，提供新一代 Resilience Hub 許可，以使用 Kubernetes 角色型存取控制 (RBAC) 讀取 Amazon 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 角色映射至 Kubernetes `resilience-hub-eks-access-group` 群組。您可以使用 Amazon 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"
```