

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

# 适用于 AWS FIS 实验的 IAM 角色
<a name="getting-started-iam-service-role"></a>

AWS Identity and Access Management (IAM) 是一项可帮助管理员安全地控制 AWS 资源访问权限的 AWS 服务。要使用 AWS FIS，您必须创建一个 IAM 角色来授予 AWS FIS 所需的权限，这样 AWS FIS 才能代表您运行实验。您可以在创建实验模板时指定此实验角色。对于单账户实验，适用于实验角色的 IAM 策略必须授予权限，以便修改实验模板中指定为目标的资源。对于多账户实验，实验角色必须向 Orchestrator 角色授予为每个目标账户代入 IAM 角色的权限。有关更多信息，请参阅 [多账户实验的权限](multi-account-prerequisites.md#permissions)。

亚马逊建议您遵守授予最低权限的标准安全实践。您可以通过在策略中指定特定资源 ARNs 或标签来实现此目的。

为了帮助您快速开始使用 AWS FIS，我们提供了 AWS 托管策略，您可以在创建实验角色时指定这些策略。或者，您也可以在创建专属内联策略文档时使用这些策略作为模型。

**Topics**
+ [前提条件](#create-fis-role-prereqs)
+ [选项 1：创建实验角色并附加 AWS 托管策略](#fis-role-managed-policy)
+ [选项 2：创建实验角色并添加内联策略文档](#fis-role-inline-policy-document)

## 前提条件
<a name="create-fis-role-prereqs"></a>

在开始之前，请安装 AWS CLI 并创建所需的信任策略。

**安装 AWS CLI**  
在开始之前，请安装并配置 AWS CLI。配置时 AWS CLI，系统会提示您输入 AWS 凭据。本过程中的示例假定您已配置好默认区域。否则，请为每个命令添加 `--region` 选项。有关更多信息，请参阅[安装或更新 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)和[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。

**创建信任关系策略**  
实验角色必须具有允许 AWS FIS 服务担任该角色的信任关系。创建 `fis-role-trust-policy.json` 文本文件并添加以下信任关系策略。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                  "fis.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```
建议您使用 `aws:SourceAccount` 和 `aws:SourceArn` 条件键来防止出现[混淆代理人问题](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。源帐户是实验所有者，而源 ARN 是实验 ARN。例如，您应将以下条件块添加到信任策略。  

```
"Condition": {
    "StringEquals": {
        "aws:SourceAccount": "{{account_id}}"
    },
    "ArnLike": {
        "aws:SourceArn": "arn:aws:fis:{{region}}:{{account_id}}:experiment/*"
    }
}
```

**添加代入目标账户角色的权限（仅限多账户实验）**  
对于多账户实验，您需要拥有允许 Orchestrator 账户代入目标账户角色的权限。您可以修改以下示例，并将其添加为内联策略文档以代入目标账户角色：  

```
{
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource":[
        "arn:aws:iam::{{target_account_id}}:role/{{role_name}}"
    ]
}
```

## 选项 1：创建实验角色并附加 AWS 托管策略
<a name="fis-role-managed-policy"></a>

使用 AWS FIS 的其中一个 AWS 托管策略快速入门。

**创建实验角色并附加 AWS 托管策略**

1. 验证您的实验中是否有 AWS FIS 操作的托管策略。否则，您需要改为创建专有的内联策略。有关更多信息，请参阅 [AWS 的托管策略 AWS 故障注入服务](security-iam-awsmanpol.md)。

1. 运行以下 [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) 命令，创建角色并添加先决条件中创建的信任策略。

   ```
   aws iam create-role --role-name {{my-fis-role}} --assume-role-policy-document file://{{fis-role-trust-policy.json}}
   ```

1. 使用以下[attach-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html)命令附加托 AWS 管策略。

   ```
   aws iam attach-role-policy --role-name {{my-fis-role}} --policy-arn {{fis-policy-arn}}
   ```

   以下{{fis-policy-arn}}内容之一在哪里：
   + arn:aws:iam::aws:policy/service-role/AWSFaultInjectionSimulatorEC2Access
   + arn:aws:iam::aws:policy/service-role/AWSFaultInjectionSimulatorECSAccess
   + arn:aws:iam::aws:policy/service-role/AWSFaultInjectionSimulatorEKSAccess
   + arn:aws:iam::aws:policy/service-role/AWSFaultInjectionSimulatorNetworkAccess
   + arn:aws:iam::aws:policy/service-role/AWSFaultInjectionSimulatorRDSAccess
   + arn:aws:iam::aws:policy/service-role/AWSFaultInjectionSimulatorSSMAccess

## 选项 2：创建实验角色并添加内联策略文档
<a name="fis-role-inline-policy-document"></a>

此选项适用于未创建托管策略的操作，或仅包含特定实验所需的权限。

**创建实验并添加内联策略文档**

1. 运行以下 [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) 命令，创建角色并添加先决条件中创建的信任策略。

   ```
   aws iam create-role --role-name {{my-fis-role}} --assume-role-policy-document file://{{fis-role-trust-policy.json}}
   ```

1. 创建 `fis-role-permissions-policy.json` 文本文件并添加权限策略。有关可用作起始点的策略的示例，请参阅以下内容。
   + **故障注入操作**：从以下策略开始。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Sid": "AllowFISExperimentRoleFaultInjectionActions",
                 "Effect": "Allow",
                 "Action": [
                     "fis:InjectApiInternalError",
                     "fis:InjectApiThrottleError",
                     "fis:InjectApiUnavailableError"
                 ],
                 "Resource": "arn:*:fis:*:*:experiment/*"
             }
         ]
     }
     ```

------
   + **Amazon EBS 操作**：从以下政策开始。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "ec2:DescribeVolumes"
                 ],
                 "Resource": "*"
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "ec2:PauseVolumeIO"
                 ],
                 "Resource": "arn:aws:ec2:*:*:volume/*"
             }
         ]
     }
     ```

------
   + **Amazon EC2 操作** — 从[AWSFaultInjectionSimulatorEC2访问](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSFaultInjectionSimulatorEC2Access.html)策略开始。
   + **Amazon ECS 操作** — 从[AWSFaultInjectionSimulatorECSAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSFaultInjectionSimulatorECSAccess.html)策略开始。
   + **Amazon EKS 行动** — 从[AWSFaultInjectionSimulatorEKSAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSFaultInjectionSimulatorEKSAccess.html)政策开始。
   + **网络操作**-从[AWSFaultInjectionSimulatorNetworkAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSFaultInjectionSimulatorNetworkAccess.html)策略开始。
   + **Amazon RDS 操作** — 从[AWSFaultInjectionSimulatorRDSAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSFaultInjectionSimulatorRDSAccess.html)策略开始。
   + **Systems Manager 操作**-从[AWSFaultInjectionSimulatorSSMAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSFaultInjectionSimulatorSSMAccess.html)策略开始。

1. 使用以下[put-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/put-role-policy.html)命令添加您在上一步中创建的权限策略。

   ```
   aws iam put-role-policy --role-name {{my-fis-role}} --policy-name {{my-fis-policy}} --policy-document file://{{fis-role-permissions-policy.json}}
   ```