

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

# 自动部署- StackSets
<a name="deployment-stackset"></a>

**注意**  
我们建议使用进行部署 StackSets。但是，对于单账户部署或测试或评估目的，请考虑使用[堆栈部署](deployment.md)选项。

在启动解决方案之前，请查看本指南中讨论的架构、解决方案组件、安全性和设计注意事项。按照本节中的分步说明配置解决方案并将其部署到您的 AWS 组织中。

 **部署时间：每个账户**大约 30 分钟，视 StackSet 参数而定。

## 先决条件
<a name="prerequisites-stackset"></a>

 [AWS 组织](https://aws.amazon.com/organizations/)可帮助您集中管理和管理您的多账户 AWS 环境和资源。 StackSets 与 AWS 组织合作效果最佳。

如果您之前已部署过该解决方案的 v1.3.x 或更早版本，则必须卸载现有解决方案。有关更多信息，请参阅[更新解决方案](update-the-solution.md)。

在部署此解决方案之前，请查看您的 AWS 安全中心部署：
+ 您的 AWS 组织中必须有一个委托的 Security Hub 管理员账户。
+ 应将安全中心配置为跨区域汇总调查结果。有关更多信息，请参阅 AWS 安全中心用户指南[中的跨区域](https://docs.aws.amazon.com/securityhub/latest/userguide/finding-aggregation.html)汇总调查结果。
+ 您应该在使用 AWS 的每个区域[为您的组织](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-prereq-config.html)激活 Security Hub。

此过程假设您有多个使用 AWS 组织的账户，并委托了一个 AWS 组织管理员账户和一个 AWS Security Hub 管理员账户。

 **该解决方案适用于 A [ WS 安全中心和 AWS 安全中心 CSPM ](https://docs.aws.amazon.com/securityhub/latest/userguide/what-are-securityhub-services.html)。**

## 部署概述
<a name="deployment-overview-stackset"></a>

**注意**  
StackSets 此解决方案的部署使用服务管理和自我 StackSets管理的组合。 Self-managed StackSets 当前必须使用，因为它们使用嵌套堆栈，而服务 StackSets管理尚不支持嵌套堆栈。

 StackSets 从您的 AWS 组织[中的](https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-cloudformation.html)委托管理员账户部署。

**规划**  
使用以下表单来帮助部 StackSets 署。准备数据，然后在部署期间复制并粘贴这些值。

```
AWS Organizations admin account ID: _______________
Security Hub admin account ID: _______________
CloudTrail Logs Group: ______________________________
Member account IDs (comma-separated list):
___________________,
___________________,
___________________,
___________________,
___________________
AWS Organizations OUs (comma-separated list):
___________________,
___________________,
___________________,
___________________,
___________________
```

 [（可选）步骤 0：部署票务集成堆栈 ](#step-0-stackset) 
+ 如果您打算使用票务功能，请先将票务集成堆栈部署到您的 Security Hub 管理员帐户中。
+ 从该堆栈复制 Lambda 函数名称并将其作为输入提供给管理堆栈（参见步骤 1）。

 [第 1 步：在委托的 Security Hub 管理员帐户中启动管理员堆栈 ](#step-1-stackset) 
+ 使用自管理 StackSet，将 `automated-security-response-admin.template` AWS CloudFormation 模板启动到与您的安全中心管理员位于同一区域的 AWS 安全中心管理员账户。此模板使用嵌套堆栈。
+ 选择要安装的安全标准。默认情况下，仅选择 SC（推荐）。
+ 选择要使用的现有 Orchestrator 日志组。选择以前的安装中`Yes`是否`SO0111-ASR-Orchestrator`已经存在。
+ 选择是否启用解决方案的 Web UI。如果您选择启用此功能，则还必须输入电子邮件地址才能分配管理员角色。
+ 选择收集与解决方案运行状况相关的 CloudWatch 指标的偏好。

有关自我管理的更多信息 StackSets，请参阅 * AWS CloudFormation 用户指南[中的](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html)授予自管理权限。*

 [第 2 步：将补救角色安装到每个 AWS 安全中心成员账户中 ](#step-2-stackset) 

等待步骤 1 完成部署，因为步骤 2 中的模板引用了步骤 1 创建的 IAM 角色。
+ 使用服务托管 StackSet，将 `automated-security-response-member-roles.template` AWS CloudFormation 模板启动到您的 AWS 组织中每个账户的单个区域。
+ 选择在新账户加入组织时自动安装此模板。
+ 输入您的 AWS 安全中心管理员账户的账户 ID。
+ 输入一个值`namespace`，该值将用于防止资源名称与同一账户中的先前部署或并发部署发生冲突。输入最多 9 个小写字母数字字符的字符串。

 [第 3 步：在每个 AWS Security Hub 成员账户和区域中启动成员堆栈 ](#step-3-stackset) 
+ 使用自管理 StackSets，在所有区域启动 `automated-security-response-member.template` AWS CloudFormation 模板，在这些区域中，您的 AWS 组织中的每个账户中都有 AWS 资源，由同一个安全中心管理员管理。
**注意**  
在服务管理 StackSets 支持嵌套堆栈之前，必须对加入该组织的所有新账户执行此步骤。
+ 选择要安装的安全标准剧本。
+ 提供 CloudTrail 日志组的名称（供某些补救措施使用）。
+ 输入您的 AWS 安全中心管理员账户的账户 ID。
+ 输入一个值`namespace`，该值将用于防止资源名称与同一账户中的先前部署或并发部署发生冲突。输入最多 9 个小写字母数字字符的字符串。这应与您为成员角色堆栈选择的`namespace`值相匹配，此外，每个成员账户的命名空间值不必是唯一的。

## （可选）步骤 0：启动票证系统集成堆栈
<a name="step-0-stackset"></a>

1. 如果您打算使用票务功能，请先启动相应的集成堆栈。

1. 选择为 Jira 提供的集成堆栈或 ServiceNow，或者将它们用作实现您自己的自定义集成的蓝图。

    **要部署 Jira 堆栈**，请执行以下操作：

   1. 输入堆栈的名称。

   1. 向您的 Jira 实例提供 URI。

   1. 为要向其发送票证的 Jira 项目提供项目密钥。

   1. 在 AWS Secrets Manager 中创建一个新的密钥值密钥，用于保存您的 J `Username` ira 和。`Password`
**注意**  
您可以选择使用 Jira API 密钥代替密码，方法是将用户名提供为`Username`，将 API 密钥提供为。`Password`

   1. 将此密钥的 ARN 作为输入添加到堆栈中。

       **提供堆栈名称、Jira 项目信息和 Jira API 证书。**  
![Jira 票务系统集成堆栈配置](https://docs.aws.amazon.com/zh_cn/solutions/latest/automated-security-response-on-aws/images/ticket-system-integration-stack-jira.png)

       **Jira 字段配置**：

      部署 Jira 堆栈后，您可以通过在 Lambda 函数上设置`JIRA_FIELDS_MAPPING`环境变量来自定义 Jira 票证字段。此 JSON 字符串会覆盖默认 Jira 票证字段，并且必须遵循 Jira API 字段结构。

      为空或未指定字段时的`JIRA_FIELDS_MAPPING`默认值：
      +  **优先级**:`{"id": "3"}`（中等优先级）
      +  **问题类型**：`{"id": "10006"}`（任务）
      +  **accountID**：使用 API 端点自动检索 `GET /rest/api/2/myself`

        带有自定义字段的示例配置：

        ```
        {
          "reporter": {"accountId": "123456:494dcbff-1b80-482c-a89d-56ae81c145a4"},
          "priority": {"id": "1"},
          "issuetype": {"id": "10006"},
          "assignee": {"accountId": "123456:another-user-id"},
          "customfield_10001": "custom value"
        }
        ```

        常用的 Jira 字段 ID：
      +  **优先级 ID**：1（最高）、2（高）、3（中）、4（低）、5（最低）
      +  **问题类型 ID**：因 Jira 项目而异（例如，任务为 10006）
      +  **账户 ID**：格式 `123456:494dcbff-1b80-482c-a89d-56ae81c145a4` 

        您可以使用 Jira REST API 找到您的 Jira 字段 ID 和账户 ID：
      +  `GET /rest/api/2/myself`用于账户 ID
      +  `GET /rest/api/2/priority`用于优先级 ID
      +  `GET /rest/api/2/project/{projectKey}`用于问题类型 ID

        有关更多信息，请参阅 [ Jira REST API v2 问题 POST 格式](https://developer.atlassian.com/server/jira/platform/rest/v10000/api-group-issue/#api-api-2-issue-post)。

         **要部署 ServiceNow 堆栈，请执行**以下操作：

   1. 输入堆栈的名称。

   1. 提供您的 ServiceNow 实例的 URI。

   1. 提供您的 ServiceNow 表名。

   1. 在中创建一个 API 密钥，该密钥 ServiceNow 具有修改您打算写入的表的权限。

   1. 使用密钥在 Secrets Manager 中创建密钥，`API_Key`并将密钥 ARN 作为堆栈的输入提供。

       **提供堆栈名称、 ServiceNow 项目信息和 ServiceNow API 凭证。**  
![ServiceNow 票务系统集成堆栈配置](https://docs.aws.amazon.com/zh_cn/solutions/latest/automated-security-response-on-aws/images/ticket-system-integration-stack-servicenow.png)

       **要创建自定义集成堆栈**：添加一个 Lambda 函数，解决方案协调器 Step Functions 可以在每次补救时调用该函数。Lambda 函数应采用 Step Functions 提供的输入，根据您的票证系统的要求构造负载，并请求您的系统创建票证。

## 第 1 步：在委托的 Security Hub 管理员帐户中启动管理员堆栈
<a name="step-1-stackset"></a>

1. 使用您的 [ Securit `automated-security-response-admin.template` y Hub 管理员帐户启动管理员堆栈](https://solutions-reference.s3.amazonaws.com/automated-security-response-on-aws/latest/automated-security-response-admin.template)。通常，在单个区域中每个组织一个。由于此堆栈使用嵌套堆栈，因此必须将此模板部署为自 StackSet管理堆栈。

### 参数
<a name="parameters"></a>


| 参数 | 默认值 | 说明 | 
| --- | --- | --- | 
|  **加载 SC 管理堆栈 **  |  `yes`  | 指定是否安装用于自动修复 SC 控件的管理组件。 | 
|  **加载 AFSBP 管理堆栈 **  |  `no`  | 指定是否安装用于自动修复 FSBP 控件的管理组件。 | 
|  **加载 CIS120 管理堆栈 **  |  `no`  | 指定是否安装用于自动修复 CIS120 控件的管理组件。 | 
|  **加载 CIS140 管理堆栈 **  |  `no`  | 指定是否安装用于自动修复 CIS140 控件的管理组件。 | 
|  **加载 CIS300 管理堆栈 **  |  `no`  | 指定是否安装用于自动修复 CIS300 控件的管理组件。 | 
|  **加载 PCI321 管理堆栈 **  |  `no`  | 指定是否安装用于自动修复 PCI321 控件的管理组件。 | 
|  **加载 NIST 管理堆栈 **  |  `no`  | 指定是否安装用于自动修复 NIST 控件的管理组件。 | 
|  **重用 Orchestrator 日志组 **  |  `no`  | 选择是否重复使用现有`SO0111-ASR-Orchestrator` CloudWatch 日志组。这简化了重新安装和升级，而不会丢失先前版本的日志数据。`yes`如果此账户中先前部署的`Orchestrator Log Group`仍然存在，则重复使用现有`Orchestrator Log Group`选择，否则`no`。如果您要从 v2.3.0 之前的版本执行堆栈更新，请选择 `no`  | 
|  **ShouldDeployWebUI**  |  `yes`  | 部署 Web 用户界面组件，包括 API 网关、Lambda 函数和 CloudFront 分发。选择 “是” 以启用基于 Web 的用户界面以查看调查结果和修复状态。如果您选择禁用此功能，您仍然可以使用 Security Hub CSPM 自定义操作配置自动修复并按需运行修复。 | 
|  **AdminUserEmail**  |  *（可选输入）*  | 初始管理员用户的电子邮件地址。该用户将拥有对 ASR Web UI 的完全管理权限。**仅**在启用 Web UI 时才需要。 | 
|  **使用 CloudWatch 指标 **  |  `yes`  | 指定是否启用用于监控解决方案的 CloudWatch 指标。这将创建一个用于查看指标的 CloudWatch 仪表板。 | 
|  **使用 CloudWatch 指标警报 **  |  `yes`  | 指定是否为解决方案启用 CloudWatch 指标警报。这将为解决方案收集的某些指标创建警报。 | 
|  **RemediationFailureAlarmThreshold**  |  `5`  | 为每个控制 ID 的修复失败百分比指定阈值。例如，如果您输入`5`，则当控制 ID 在给定日期失败的补救超过 5% 时，您将收到警报。<br />仅当创建警报时，此参数才起作用（请参阅**使用 CloudWatch 指标警报**参数）。 | 
|  **EnableEnhancedCloudWatchMetrics**  |  `no`  | If`yes`，创建其他 CloudWatch 指标以在 CloudWatch 仪表板上单独跟踪所有控件 ID，并以 CloudWatch 警报形式进行跟踪。<br />请参阅 [ “](cost.md#additional-cost-enhanced-metrics)成本” 部分，了解由此产生的额外费用。 | 
|  **TicketGenFunctionName**  |  *（可选输入）*  | 可选。如果您不想集成票务系统，请留空。否则，请提供[步骤 0 的堆栈输出中的 Lambda 函数名称](#step-0-stackset)，例如：`SO0111-ASR-ServiceNow-TicketGenerator`。 | 

 **配置 StackSet 选项 ** 

![配置 StackSet 选项页面](https://docs.aws.amazon.com/zh_cn/solutions/latest/automated-security-response-on-aws/images/configure-stackset-options.png)


1. 对于**账号**参数，输入 AWS 安全中心管理员账户的账户 ID。

1. 在 “**指定区域” ** 参数中，仅选择启用 Security Hub 管理员的区域。等待此步骤完成，然后继续执行步骤 2。

   您可以在 AWS CloudFormation 控制台的 StackSet 详细信息页面上查看 StackSet 操作状态。您应该在大约 15 分钟后收到**成功**操作状态。

## 第 2 步：将补救角色安装到每个 AWS 安全中心成员账户中
<a name="step-2-stackset"></a>

使用服务管理 StackSets 来部署[成员角色模板](https://solutions-reference.s3.amazonaws.com/automated-security-response-on-aws/latest/automated-security-response-member-roles.template)。`automated-security-response-member-roles.template`每个成员账户 StackSet 必须将其部署在一个区域中。它定义了允许通过 ASR Orchestrator 步骤函数进行跨账户 API 调用的全局角色。

### 参数
<a name="parameters-2"></a>


| 参数 | 默认值 | 说明 | 
| --- | --- | --- | 
|  **命名空间**  |  {{<Requires input>}}  | 输入最多 9 个小写字母数字字符的字符串。将唯一的命名空间添加为修复 IAM 角色名称的后缀。成员角色和成员堆栈中应使用相同的命名空间。对于每个解决方案部署，此字符串应是唯一的，但在堆栈更新期间无需更改。每个成员账户的命名空间值**不**必是唯一的。 | 
|  **Sec Hub 管理员账户 **  |  {{<Requires input>}}  | 输入 AWS 安全中心管理员账户的 12 位数账户 ID。此值向管理员账户的解决方案角色授予权限。 | 

1. 根据您的组织政策，部署到整个组织（典型值）或组织单位。

1. 开启自动部署，以便 AWS 组织中的新账户获得这些权限。

1. 在 “**指定区域” ** 参数中，选择单个区域。IAM 角色是全球性的。在 StackSet 部署过程中，您可以继续执行第 3 步。

   您可以在 AWS CloudFormation 控制台的 StackSet 详细信息页面上查看 StackSet 操作状态。您应该在大约 5 分钟后收到**成功**操作状态。

    **指定 StackSet 细节 **   
![指定 StackSet 详细信息页面](https://docs.aws.amazon.com/zh_cn/solutions/latest/automated-security-response-on-aws/images/specify-stackset-details.png)

## 第 3 步：在每个 AWS Security Hub 成员账户和区域中启动成员堆栈
<a name="step-3-stackset"></a>

由于[成员堆栈](https://solutions-reference.s3.amazonaws.com/automated-security-response-on-aws/latest/automated-security-response-member.template)使用嵌套堆栈，因此必须以自 StackSet管理方式部署。这不支持自动部署到 AWS 组织中的新账户。

### 参数
<a name="parameters"></a>


| 参数 | 默认值 | 说明 | 
| --- | --- | --- | 
|  **提供用于创建指标筛选器和警报的名称 LogGroup **  |  {{<Requires input>}}  | 指定用于记录 API 调用的 CloudWatch CloudTrail 日志组的名称。这用于 CIS 3.1-3.14 补救措施。 | 
|  **加载 SC 成员堆栈 **  |  `yes`  | 指定是否安装用于自动修复 SC 控件的成员组件。 | 
|  **加载 AFSBP 成员堆栈 **  |  `no`  | 指定是否安装用于自动修复 FSBP 控件的成员组件。 | 
|  **加载 CIS120 成员堆栈 **  |  `no`  | 指定是否安装用于自动修复 CIS120 控件的成员组件。 | 
|  **加载 CIS140 成员堆栈 **  |  `no`  | 指定是否安装用于自动修复 CIS140 控件的成员组件。 | 
|  **加载 CIS300 成员堆栈 **  |  `no`  | 指定是否安装用于自动修复 CIS300 控件的成员组件。 | 
|  **加载 PCI321 成员堆栈 **  |  `no`  | 指定是否安装用于自动修复 PCI321 控件的成员组件。 | 
|  **加载 NIST 成员堆栈 **  |  `no`  | 指定是否安装用于自动修复 NIST 控件的成员组件。 | 
|  **为 Redshift 审核日志记录创建 S3 存储桶 **  |  `no`  | 选择`yes`为 FSBP 修复创建 S RedShift.4 3 存储桶。有关 S3 存储桶和补救措施的详细信息，请查看 * AWS 安全中心用户指南[中的](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-redshift-4)Redshift.4 补救措施*。 | 
|  **Sec Hub 管理员账户 **  |  {{<Requires input>}}  | 输入 AWS 安全中心管理员账户的 12 位数账户 ID。 | 
|  **命名空间**  |  {{<Requires input>}}  | 输入最多 9 个小写字母数字字符的字符串。此字符串成为 IAM 角色名称和操作日志 S3 存储桶的一部分。对成员堆栈部署和成员角色堆栈部署使用相同的值。对于每个解决方案部署，字符串应是唯一的，但在堆栈更新期间无需更改。 | 
|  **EnableCloudTrailForASRActionLog**  |  `no`  | 选择`yes`是否要在 CloudWatch 仪表板上监控解决方案执行的管理事件。该解决方案会在您选择的每个成员账户中创建 CloudTrail 跟踪`yes`。您必须将解决方案部署到 AWS 组织中才能启用此功能。**此外，您只能在同一账户的单个区域启用此功能。**请参阅 [ “](cost.md#additional-cost-action-log)成本” 部分，了解由此产生的额外费用。 | 

 **账户** 

![账户部署配置页面](https://docs.aws.amazon.com/zh_cn/solutions/latest/automated-security-response-on-aws/images/accounts.png)


 **部署地点**：您可以指定账号或组织单位列表。

 **指定区域**：选择要修复调查结果的所有区域。您可以根据账户数量和区域调整相应的部署选项。区域并发可以是并行的。

您可以在 AWS CloudFormation 控制台的 StackSet 详细信息页面上查看 StackSet 操作状态。您应该收到每个账户和区域组合的**成功**操作状态。部署时间因所选的账户数量和区域而异。