

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

# IAM 角色和許可參考
<a name="next-gen-iam-reference"></a>

**用於評估的 IAM 角色**

為了執行評估，新一代的 Resilience Hub 需要能夠擔任具有許多唯讀許可的 IAM 角色，以探索和了解 資源 AWS 的組態。

您可以在 IAM 主控台中建立 IAM AWS 角色。選擇**自訂信任政策**，並使用如下的信任政策：

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

如需許可，請選擇 `AWSResilienceHubAsssessmentExecutionPolicy`受管政策和 `ReadOnlyAccess`受管政策。需要此`ReadOnlyAccess`政策才能獲得最佳的失敗模式評估效能。

**IAM 服務連結角色**

新一代 Resilience Hub 會使用 `AWSResilienceHubServiceRolePolicy`受管政策自動建立服務連結角色。只有 AWS Organizations 支援需要此角色。

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

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