

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

# 为 AWS 安全代理创建 IAM 角色
<a name="create-iam-role"></a>

AWS 安全代理以三种方式使用 IAM 角色：

1.  **应用程序角色：**创建 AWS 安全代理应用程序时使用。对于 IAM Identity Center 和管理员访问链接用例，该服务扮演此角色以授予 WebApp 用户与 AWS 安全代理 API 交互的权限。

1.  **渗透测试服务角色：**在创建代理空间时指定为可用角色列表。稍后， WebApp 用户在创建渗透测试时会选择其中一个角色。AWS 安全代理服务扮演此角色在测试期间访问您的 AWS 资源。

1.  **操作者角色：**用于对您的目标 Web 应用程序（例如 AWS API Gateway API API）的请求进行身份验证和授权。这些角色是在创建代理空间期间提供的。AWS 安全代理扮演角色与您的目标应用程序进行交互。

## 应用程序角色
<a name="_application_role"></a>

应用程序角色用于在服务中创建 AWS 安全代理应用程序。对于 IAM Identity Center 和管理员访问链接身份验证方案，AWS 安全代理服务扮演此角色来授予 WebApp 用户与 AWS 安全代理 API 交互的必要权限。

### 所需权限
<a name="_required_permissions"></a>

此角色需要以下权限：
+ 调用 AWS 安全代理 API 操作
+ 读取和写入应用程序配置数据
+ 访问用户会话信息
+ 管理 WebApp 用户的身份验证令牌

### 信任策略
<a name="_trust_policy"></a>

信任策略必须允许 AWS 安全代理服务担任此角色：

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

### 权限策略
<a name="_permissions_policy"></a>

该角色应包括以下权限：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "securityagent:GetApplication",
        "securityagent:UpdateApplication",
        "securityagent:ListAgentInstances",
        "securityagent:CreatePentestSession"
      ],
      "Resource": "arn:aws:securityagent:*:*:application/*"
    }
  ]
}
```

**注意**  
根据您的特定应用程序要求和最低权限原则自定义权限。

## 渗透测试服务角色
<a name="_penetration_test_service_role"></a>

渗透测试服务角色是在创建代理空间时以可用角色列表的形式指定的。当 WebApp 用户创建渗透测试时，他们会选择其中一个角色。然后，AWS 安全代理服务将扮演此角色来访问和测试您的 AWS 资源。

### 所需权限
<a name="_required_permissions_2"></a>

在渗透测试期间，此角色需要访问和分析您的 AWS 资源的权限：
+ 阅读并描述 VPC 配置和网络拓扑
+ 检查 EC2 实例、安全组和网络 ACL
+ 分析 IAM 策略和资源权限
+ 读取 CloudWatch 日志和指标
+ 访问与安全测试相关的 AWS 服务配置

### 信任策略
<a name="_trust_policy_2"></a>

信任策略必须允许 AWS 安全代理服务在渗透测试操作中扮演此角色：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "securityagent.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "your-external-id"
        }
      }
    }
  ]
}
```

**注意**  
在允许跨账户或服务访问时，使用外部 ID 可提高安全性。

### 权限策略
<a name="_permissions_policy_2"></a>

该角色应包括对您的 AWS 资源的只读访问权限。考虑使用以下托管策略：
+  `SecurityAudit`-用于安全审计的 AWS 托管策略
+  `ViewOnlyAccess`- Read-only 访问大多数 AWS 服务

或者创建具有特定权限的自定义策略：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "vpc:Describe*",
        "iam:Get*",
        "iam:List*",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams",
        "cloudwatch:Describe*",
        "cloudwatch:Get*",
        "cloudwatch:List*",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": "*"
    }
  ]
}
```

**重要**  
仅授予渗透测试范围所需的最低权限。根据您要在安全测试中包含的 AWS 服务，查看和调整权限。

## 演员角色
<a name="_actor_role"></a>

Actor 角色用于在渗透测试期间对目标 Web 应用程序的请求进行身份验证和授权。这些角色是在代理空间创建期间提供的，AWS 安全代理假设它们与您的目标应用程序终端节点（例如 AWS API Gateway API、Lambda 函数 URL 或其他 AWS-hosted 应用程序）进行交互。

### 所需权限
<a name="_required_permissions_3"></a>

此角色需要以下权限：
+ 调用 API Gateway 端点
+ 执行 Lambda 函数
+ 访问特定于应用程序的 AWS 资源
+ 使用目标应用程序的身份验证机制进行身份验证
+ 对您的应用程序终端节点执行 HTTP 操作

### 信任策略
<a name="_trust_policy_3"></a>

信任策略必须允许 AWS 安全代理服务担任此角色：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "securityagent.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "your-external-id"
        }
      }
    }
  ]
}
```

### 权限策略
<a name="_permissions_policy_3"></a>

权限取决于您的目标应用程序架构。以下是常见场景的示例：

#### 适用于 API Gateway 应用程序
<a name="_for_api_gateway_applications"></a>

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"
      ],
      "Resource": "arn:aws:execute-api:us-east-1:*:your-api-id/*"
    }
  ]
}
```

#### 对于 Lambda 函数网址
<a name="_for_lambda_function_urls"></a>

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "lambda:InvokeFunctionUrl",
        "lambda:InvokeFunction"
      ],
      "Resource": "arn:aws:lambda:us-east-1:*:function:your-function-name"
    }
  ]
}
```

#### 适用于使用 Cognito 身份验证的 Application Load Balancer
<a name="_for_application_load_balancer_with_cognito_authentication"></a>

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cognito-idp:InitiateAuth",
        "cognito-idp:RespondToAuthChallenge"
      ],
      "Resource": "arn:aws:cognito-idp:us-east-1:*:userpool/your-user-pool-id"
    }
  ]
}
```

**重要**  
配置 Actor Role 权限以匹配目标应用程序的身份验证和授权要求。该角色的访问权限应与安全客户端在渗透测试期间模拟的用户或服务相同。