

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

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

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

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

 **部署时间：**每个账户大约 30 分钟，具体取决于 StackSet 参数。

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

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

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

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

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

 **请注意，此解决方案同时适用[于 AWS Security Hub 和 AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-are-securityhub-services.html)。**

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

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

使用您的 StackSets AWS Organizati [ons 中的委托管理员账户](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 Security Hub 管理员账户中，该账户与您的 Security Hub 管理员位于同一区域。此模板使用嵌套堆栈。
+ 选择要安装的安全标准。默认情况下，仅选择 SC（推荐）。
+ 选择要使用的现有 Orchestrator 日志组。`Yes`如果之前的安装中`SO0111-ASR- Orchestrator`已经存在，请选择此选项。
+ 选择是否启用解决方案的 Web UI。如果您选择启用此功能，则还必须输入要分配管理员角色的电子邮件地址。
+ 选择收集与解决方案运行状况相关的 CloudWatch 指标的首选项。

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

 [第 2 步：将修复角色安装到每个 AWS Security Hub 成员账户中](#step-2-stackset) 

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

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

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

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

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

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

   1. 输入堆栈的名称。

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

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

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

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

       **提供堆栈名称 Jira 项目信息以及 Jira API 凭证。**  
![\[票务系统集成堆栈 jira\]](http://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"}`（任务）
      +  **账户 ID**：使用 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 字段 IDs：
      +  **优先级 IDs**：1（最高）、2（高）、3（中）、4（低）、5（最低）
      +  **问题类型 ID**：因 Jira 项目而异（例如，任务为 10006）
      +  **账户 ID**：格式 `123456:494dcbff-1b80-482c-a89d-56ae81c145a4` 

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

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

 **配置 StackSet 选项** 

![\[配置堆栈集选项\]](http://docs.aws.amazon.com/zh_cn/solutions/latest/automated-security-response-on-aws/images/configre-stackset-options.png)


1. 在**账号**参数中，输入 AWS Security Hub 管理员账户的账户 ID。

1. 在 “**指定区域**” 参数中，仅选择开启 Security Hub 管理员的区域。等待此步骤完成后再进入步骤 2。

## 第 2 步：将修复角色安装到每个 AWS Security Hub 成员账户中
<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 Security Hub 管理员账户的 12 位数账户 ID。此值向管理员账户的解决方案角色授予权限。  | 

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

1. 开启自动部署，这样 AWS Organizations 中的新账户就可以获得这些权限。

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

    **指定 StackSet 细节**   
![\[指定堆栈集详细信息\]](http://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 控件。  | 
|   **加载 PC1321 成员堆栈**   |   `no`   |  指定是否安装成员组件以自动修复 PC1321 控件。  | 
|   **加载 NIST 成员堆栈**   |   `no`   |  指定是否安装成员组件以自动修复 NIST 控件。  | 
|   **为 Redshift 审计日志创建 S3 存储桶**   |   `no`   |  选择`yes`是否应为 FSBP RedShift .4 修复创建 S3 存储桶。有关 S3 存储桶和补救措施的详细信息，请查看 *AWS Security Hub* 用户指南中的 [Redshift.4 补救措施](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-redshift-4)。  | 
|   **Sec Hub 管理员账户**   |   *<Requires input>*   |  输入 AWS Security Hub 管理员账户的 12 位数账户 ID。  | 
|   **命名空间**   |   *<Requires input>*   |  输入最多 9 个小写字母数字字符的字符串。此字符串成为 IAM 角色名称和 Action Log S3 存储桶的一部分。对成员堆栈部署和成员角色堆栈部署使用相同的值。每个解决方案部署的字符串都应是唯一的，但在堆栈更新期间无需更改。  | 
|   **EnableCloudTrailForASRAction日志**   |   `no`   |  选择`yes`是否要在 CloudWatch 仪表板上监控解决方案执行的管理事件。该解决方案会在您选择的每个成员账户中创建一个 CloudTrail 跟踪`yes`。您必须将解决方案部署到 AWS 组织中才能启用此功能。**此外，您只能在同一个账户的单个地区启用此功能。**[要了解由此产生的额外成本，请参阅 “成本” 部分。](cost.md#additional-cost-action-log)  | 

 **账户** 

![\[accounts\]](http://docs.aws.amazon.com/zh_cn/solutions/latest/automated-security-response-on-aws/images/accounts.png)


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

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