AWS 安全秘籍(三)
我们已经讨论了许多关于安全的方面,例如保密性、完整性和可用性(CIA)以及认证、授权和审计(AAA)。审计可以通过持续监控、警报和定期审计来实现。适当的监控和警报也可以通过自动修复来提高可用性。在本章中,我们将研究、和。CloudWatch 是 AWS 中用于日志记录、监控和警报的主要服务。CloudTrail 可以记录 AWS API 调用。AWS Config 可以记录并评估配置是否符合预定义
原文:
annas-archive.org/md5/d3b64380faef86adc6afd7f2257d6ce3译者:飞龙
第七章:使用 CloudWatch、CloudTrail 和 Config 进行监控
我们已经讨论了许多关于安全的方面,例如保密性、完整性和可用性(CIA)以及认证、授权和审计(AAA)。审计可以通过持续监控、警报和定期审计来实现。适当的监控和警报也可以通过自动修复来提高可用性。在本章中,我们将研究Amazon CloudWatch、AWS CloudTrail和AWS Config。CloudWatch 是 AWS 中用于日志记录、监控和警报的主要服务。CloudTrail 可以记录 AWS API 调用。AWS Config 可以记录并评估配置是否符合预定义的配置规则。我们还将了解简单通知服务(SNS),它将帮助我们发送通知。
本章将涵盖以下食谱:
-
创建 SNS 主题以发送电子邮件
-
使用 CloudWatch 警报和指标
-
创建一个 CloudWatch 日志组
-
使用 EventBridge(之前是 CloudWatch Events)
-
在 CloudTrail 中读取并过滤日志
-
在 CloudTrail 中创建轨迹
-
使用 Athena 查询 S3 中的 CloudTrail 日志
-
使用 CloudFormation 模板将 CloudWatch 与 CloudTrail 集成
-
设置和使用 AWS Config
技术要求
在开始本章的操作之前,我们需要确保具备以下要求和知识:
-
我们需要一个有效的 AWS 账户来完成本章的所有操作。我们可以使用属于 AWS 组织的一部分的账户或独立账户。我将使用我们在第一章的使用 AWS 组织进行多账户管理食谱中创建的
awsseccb-sandbox-1账户。不过,我不会使用任何 AWS 组织功能,这意味着你也可以使用独立账户跟随这些步骤。 -
对于管理操作,我们需要一个具有
AdministratorAccess权限的用户来操作 AWS 账户。这可以是一个身份与访问管理(IAM)身份中心用户或 IAM 用户。我将使用我们在第一章的使用 IAM Identity Center 进行用户管理和 SSO食谱中创建的awsseccbadmin1IAM Identity Center 用户。不过,我不会使用任何 IAM Identity Center 功能,这意味着如果用户在账户中具有AdministratorAccess权限,你也可以使用 IAM 用户执行这些步骤。你可以按照设置 IAM、账户别名和账单警报食谱创建一个 IAM 用户。
本章的代码文件可在github.com/PacktPublishing/AWS-Security-Cookbook-Second-Edition/tree/main/Chapter07找到。
创建 SNS 主题以发送电子邮件
在本示例中,我们将学习如何创建一个 SNS 主题来发送电子邮件。SNS 是一个托管的发布/订阅消息服务,可以与多种端点一起使用,如电子邮件、短信(SMS)、Lambda、**简单队列服务(SQS)**等。
准备开始
为了成功完成本示例,我们需要一个有效的 AWS 账户,一个如技术要求部分所述的用户,以及一个有效的电子邮件地址。
如何操作…
我们可以按照以下方式配置 SNS 主题来发送电子邮件:
-
进入控制台中的简单通知服务(SNS)。
-
在左侧边栏,点击主题。
-
点击创建主题。
-
对于类型,选择标准。
-
对于名称和**显示名称(可选)**字段,输入有意义的值。我输入的名称是
MyEmailTopic,显示名称是My Email Topic。 -
保持其他选项不变,向下滚动至页面底部,点击创建主题。
-
进入我们主题的订阅标签。
-
点击创建订阅。
-
在创建订阅页面,将协议字段设置为电子邮件,并提供一个我们可以访问的电子邮件地址作为端点字段的值。
-
向下滚动并点击创建订阅。我们的订阅状态将初始为等待确认。
-
登录您的电子邮件,点击确认订阅超链接。我们应该会收到订阅确认消息。如果我们返回 AWS 控制台中的订阅并刷新页面,我们的状态应该是已确认。
我们已经在本示例中创建了一个 SNS 主题。我们将在本章中的后续示例中使用该主题。
它是如何工作的…
在本示例中,我们创建了一个带电子邮件订阅的 SNS 主题。为了避免垃圾邮件,AWS 要求我们通过点击发送到指定电子邮件地址的确认链接手动确认该电子邮件地址的所有权。
更多内容…
在本示例中,我们选择了电子邮件协议。当前支持的协议有:电子邮件、Amazon Kinesis 数据 Firehose、Amazon SQS、Amazon SQS、电子邮件-JSON、Amazon SQS、Amazon SQS、平台应用端点和SMS。电子邮件-JSON与电子邮件协议不同。电子邮件-JSON协议将输出结构化为 JSON,适用于自动读取并处理电子邮件的服务。
参见
-
您可以在
www.cloudericks.com/blog/getting-started-with-amazon-sns-service上阅读更多关于 SNS 的信息。 -
我们还可以使用简单电子邮件服务(SES)来发送电子邮件通知,而不是使用 SNS。SES 是一种基于云的电子邮件服务,用于发送和接收电子邮件。它使用简单邮件传输协议(SMTP)接口,所有到 SMTP 端点的连接应使用传输层安全性(TLS)加密。SES 的默认端口是
25,但为了避免弹性计算云(EC2)限制电子邮件流量,我们还可以使用端口587或2587。了解更多关于 SES 的信息,请访问www.cloudericks.com/blog/getting-started-with-amazon-ses。
使用 CloudWatch 警报和度量标准
在这个示例中,我们将使用已有的度量标准来创建一个CloudWatch 警报。作为关于 CloudWatch 的第一个示例,我们还将学习一些 CloudWatch 的重要功能。
准备就绪
为了成功完成这个示例,我们需要以下内容:
-
一个有效的 AWS 账户和如技术要求部分所述的用户。
-
根据本章中创建 SNS 主题以发送电子邮件示例中的步骤创建一个带有电子邮件订阅的 SNS 主题。
如何操作…
我们可以使用现有的度量标准创建 CloudWatch 警报,步骤如下:
-
进入控制台中的
CloudWatch服务。 -
从左侧边栏展开警报,然后点击处于警报状态。
-
点击创建警报。
-
点击选择度量标准。这将显示我们基于所使用服务的所有可用度量标准。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_1.jpg
图 7.1 – 选择度量标准
-
点击计费。
-
点击按服务。
-
选择
Amazon EC2并点击选择度量标准。这将带我们到指定度量标准和条件页面。 -
在指定度量标准和条件页面的度量标准部分,使用以下屏幕截图所示的默认设置:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_2.jpg
图 7.2 – 估计费用度量标准配置
- 在条件部分,定义阈值为
1,并使用其他字段的默认值。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_3.jpg
图 7.3 – 度量标准的条件
-
点击下一步。
-
在配置操作页面,选择警报状态触发器中的处于警报状态。在向以下 SNS 主题发送通知下,选择选择现有 SNS 主题选项,并选择我们在准备就绪部分中为这个示例创建的 SNS 主题。保持其他选项不变,如下图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_4.jpg
图 7.4 – 度量标准的通知配置
-
向下滚动并点击下一步。
-
为我们的警报提供名称和警报描述(可选)值。我已将名称设置为
MyEC2BillingAlarm,并将警报描述设置为My EC2 Billing Alarm。点击下一步。 -
查看详细信息,向下滚动,并点击创建警报。警报现在会出现在警报页面上。最初,警报的状态字段将显示为数据不足。该状态应在一段时间后更改为正常。确保我们有一个正在运行的 EC2 实例。当警报状态更改为报警状态时,我们应该会收到配置 SNS 的电子邮件通知。
重要提示
我为阈值使用了一个相对较低的值,并使用了足够的 EC2 服务来触发警报。您可以根据需要使用适合您的要求的阈值值。
工作原理…
在创建 CloudWatch 警报时,我们指定了度量标准。我们还可以指定评估度量标准的时间段、在触发警报之前评估的此类时间段的数量,以及在评估期间内,超过阈值所需的数个数据点,才能触发警报。警报触发器还可以进一步触发其他操作,例如通过电子邮件发送通知、配置自动扩展操作以及执行 EC2 操作,例如重启失败的实例。
CloudWatch 警报有三种状态,分别是数据不足、正常和报警。在获取足够的数据进行分析之前,状态将为数据不足。当它有足够的数据点进行评估,并且结果在指定的时间段内没有超过阈值时,状态将为正常。如果结果在指定的时间段内超过了阈值,则触发警报,CloudWatch 警报将进入报警状态。
还有更多内容…
让我们通过一些与 CloudWatch 相关的重要概念:
-
CloudWatch 度量标准支持警报、度量标准和仪表盘。
-
CloudWatch Logs 提供日志流和日志组,以便我们可以记录来自应用程序的数据。
-
CloudWatch 事件支持使用 AWS Lambda 进行通知和自动修复。
-
AWS 提供了一些开箱即用的度量标准,并允许我们为应用程序创建自定义度量标准。
-
亚马逊 CloudWatch 可以与 AWS X-Ray 集成,以提供与应用程序性能相关的跟踪和度量。
-
CloudWatch 与 SNS、SQS、AWS Lambda、AWS Auto Scaling 等服务集成,用于通知和自动修复。
-
在左侧边栏的警报下,我们有一个专门的计费选项。
-
默认的 EC2 度量标准支持重要的操作,包括 CPU 利用率、磁盘读写操作、网络输入和输出操作,以及状态检查失败。
另见
-
了解 CloudWatch 自定义度量标准,请阅读:
www.cloudericks.com/blog/getting-started-with-amazon-cloudwatch-custom-metrics。 -
CloudWatch 仪表板为我们提供了一个单一的地方来查看相关的指标。阅读关于在 CloudWatch 中创建仪表板的内容,请访问
www.cloudericks.com/blog/creating-an-amazon-cloudwatch-dashboard。
创建一个 CloudWatch 日志组
在这个配方中,我们将创建一个 CloudWatch 日志组,该日志组将在本书中的其他配方中使用。
准备工作
为了成功完成这个配方,我们需要一个有效的 AWS 账户和一个如 技术 要求 部分所描述的用户。
如何做…
我们可以按如下方式创建 CloudWatch 日志组:
-
在控制台中进入
CloudWatch服务。 -
从左侧边栏展开 日志。
-
点击 日志组 并点击 创建日志组。
-
给日志组起一个能描述其用途的名称,其他设置保持默认,然后点击 创建。
这将为我们创建一个新的日志组。
它是如何工作的…
创建日志组时需要提供的设置不多。我们可以在其他配方中使用这个日志组,在那里我们将日志记录到 CloudWatch。一个日志组是多个日志流的集合。一个日志流是来自同一来源的日志事件序列。日志组中的日志流共享相同的保留、监控和访问控制设置。我们可以指定每个日志组中包含哪些日志流。一个日志组中的日志流数量没有限制。
更多内容…
日志组可能会被其他服务和功能使用,例如我们在本书中看到的 VPC 流日志。日志组也可以用于我们自定义构建的应用程序和微服务。
另见
阅读更多关于 CloudWatch 日志的信息,请访问 www.cloudericks.com/blog/getting-started-with-amazon-cloudwatch-logs。
使用 EventBridge(以前是 CloudWatch 事件)
在这个配方中,我们将学习如何创建并使用 EventBridge 服务(以前称为 CloudWatch Events)。CloudWatch 事件为我们提供了来自各种 AWS 资源的近实时系统事件流,我们可以创建规则来根据事件数据采取行动。
准备工作
我们需要以下内容来成功完成这个配方:
-
一个有效的 AWS 账户和一个如 技术 要求 部分所描述的用户。
-
创建一个 SNS 主题,并通过本章中的 创建 SNS 主题以发送电子邮件 配方订阅电子邮件。
如何做…
我们可以按如下方式使用 EventBridge(或 CloudWatch 事件):
-
在控制台中进入
Amazon EventBridge服务。 -
在左侧边栏,展开 总线 并点击 规则。点击 创建规则。
提示
如果你正在使用 CloudWatch 服务创建事件,你需要从控制台进入Amazon CloudWatch服务。在左侧边栏中,选择事件下的规则,你将被重定向到 EventBridge 控制台,以创建一个带有CloudWatch 事件控制台已废弃消息的规则,并使用 EventBridge 控制台创建和管理事件总线和规则。点击创建规则。其余步骤与创建事件相同。
- 输入
my-sec-cb-rule-1作为名称和一个可选的描述我的安全 CB 规则 1。将事件总线选择保持为默认。最后,选择带事件模式的规则作为规则类型。点击下一步。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_5.jpg
图 7.5 – 规则详情
-
在事件源下,选择AWS 事件或 EventBridge合作伙伴事件。
-
在示例事件 - 可选下,保持示例事件类型为AWS 事件的默认选择,并且不选择任何示例事件。
重要提示
包含示例事件是可选的,但推荐这样做,因为它们可以帮助我们编写和测试事件模式或过滤条件。我们可以在创建事件模式时引用示例事件,或者使用它来测试事件模式是否匹配。
-
在创建方式下,选择使用模式表单。
-
在事件模式下,按照图 7 .6所示操作:
-
将事件源设置为AWS 服务。
-
将AWS 服务设置为
EC2。 -
将事件类型设置为EC2 实例状态变更通知。
-
将事件类型规格 1设置为任何状态。
-
将事件类型规格 2设置为任何实例。
-
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_6.jpg
图 7.6 – 事件模式部分
-
点击下一步。
-
在目标 1下,按照图 7 .7的示例操作。对于目标类型,选择AWS 服务。在选择目标下,选择SNS 主题。对于主题,选择我们为此食谱创建的主题,如准备部分所提到的。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_7.jpg
图 7.7 – 目标 1 部分
-
点击下一步。
-
在标签页面,可选择性地添加标签并点击下一步。标签是分配给 AWS 资源的标签,由一个键和一个可选的值组成。标签可用于搜索和筛选资源或跟踪 AWS 成本。
-
在审核和创建页面,检查所有详细信息,并点击右下角的创建规则。
我们现在应该会收到一封包含状态变更详情的通知电子邮件,每当 EC2 实例的状态发生变化时。要进行测试,请进入 EC2 控制台并创建一个新实例或更改现有实例的状态。
它是如何工作的…
在本教程中,我们选择了一个事件模式,并将服务名称设置为EC2,事件类型设置为EC2 实例状态变化通知,以匹配状态发生变化的 EC2 事件。除了事件模式,我们还可以选择计划,按计划调用我们的目标,就像使用 cron 作业一样。
我们配置为通知任何状态变化。我们也可以选择一个特定状态,比如待处理、运行中、关机中、已停止、停止中或已终止。我们还配置为将此规则应用于账户内的所有实例。我们也可以选择一个特定的 EC2 实例。我们选择了我们的 SNS 主题作为目标。当我们配置目标时,CloudWatch 事件将提供必要的权限,以便在规则触发时调用目标。
还有更多…
在配置事件时,我们选择了SNS 主题作为目标。以下是目前可供我们选择的目标类型的完整列表:Amazon Redshift、Amazon Redshift、Amazon Redshift、Batch 作业队列、CloudWatch 日志组、CodeBuild 项目、Amazon Redshift、EBS 创建快照、Amazon Redshift、EC2 重启实例 API 调用、ECS 任务、Firehose 流、Glue 工作流、Incident Manager 响应计划、Inspector 评估模板、Kinesis 流、Lambda 函数、SageMaker 管道、SNS 主题、SQS 队列、Step Functions 状态机、System Manager 自动化、Amazon Redshift、System Manager 运行命令。
另请参见
你可以在www.cloudericks.com/blog/getting-started-with-amazon-cloudwatch-events了解更多关于 CloudWatch 事件的信息。
在 CloudTrail 中读取和过滤日志
在这个教程中,我们将学习如何读取和过滤CloudTrail 日志事件,这些事件是自动生成的,并通过 CloudTrail 仪表盘提供。
准备工作
我们需要一个有效的 AWS 账户。我将使用我们在第一章中创建的awsseccb-sandbox-1账户。
如何操作…
我们可以按以下方式检查自动填充的事件日志:
-
登录到管理控制台,进入
CloudTrail服务。 -
点击左侧边栏的事件历史。这将带我们进入事件历史页面。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_8.jpg
图 7.8 – 事件历史
-
在查找属性下,从下拉菜单中选择用户名。在下一个字段中输入我们的用户名(或列表中的任何名称,如图 7.8所示),并使用按日期和时间筛选字段搜索该用户在 10 天内的所有活动。现在我们应该能看到筛选后的列表。
-
点击右上角的下载事件图标,然后点击下载为 CSV,将结果下载为 CSV 文件。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_9.jpg
图 7.9 – 下载事件
我们也可以将结果下载为 JSON 文件。
它是如何工作的…
AWS CloudTrail 是 Amazon 提供的一项服务,可以持续监控并记录 AWS 账户中的 API 活动。无需额外配置,CloudTrail 会将 API 活动事件记录到我们的账户中,并且事件日志可以通过 CloudTrail 控制台访问 90 天。在进入 事件历史 页面后,我们可以基于各种标准和时间范围进行过滤。在本教程中,我们是根据 用户名 参数进行过滤的。除了 用户名 外,我们还可以根据以下参数进行过滤:事件名称、资源类型、资源名称、事件来源、事件 ID、AWS 访问密钥 和 只读。
还有更多…
在这个教程中,我们查询了来自控制台的日志。我们也可以通过命令行界面(CLI)查询日志。以下是一些用于查询 CloudTrail 日志的重要 CLI 命令:
-
aws cloudtrail lookup-events命令可用于查询过去 90 天内自动生成的事件日志。如果有更多结果,将返回分页令牌。 -
我们可以通过指定
max-items选项来限制aws cloudtrail lookup-events命令返回的项数;例如,aws cloudtrail lookup-events --max-items 10。 -
我们可以使用
start-time和end-time参数指定日期范围;例如,aws cloudtrail lookup-events --start-time 2019-01-12 --end-time 2019-10-12。我们也可以通过这些参数指定小时、分钟和秒;例如,--start-time 2019-01-12T00:30:45。 -
我们可以使用
lookup-attributes参数指定任何参数的值;例如,aws cloudtrail lookup-events --lookupattributes "AttributeKey=Username,AttributeValue=i-07d6614e1dec5e537"。
让我们再看一些与 CloudTrail 日志相关的重要概念:
-
CloudTrail 服务通过分析事件并响应这些事件,帮助我们实现事件驱动的安全性。
-
CloudTrail 仅记录涉及 AWS API 调用的事件。因此,如果在 EC2 实例上运行的应用程序抛出错误,它将不会被捕获。CloudWatch 可以用于记录来自 EC2 上的应用程序或 Lambda 函数的日志。
-
默认情况下,CloudTrail 将在一个区域记录事件。然而,我们可以将 CloudTrail 配置为多区域的跟踪。CloudTrail 可以与其他 AWS 服务集成,以提供额外的安全性和合规性。这些集成包括:CloudWatch 用于触发警报、GuardDuty 用于分析模式、Macie 用于发现、分类和保护敏感数据等。
-
当前的 CloudTrail 定价模型如下:每个区域的第一层是免费的(简单存储服务(S3)和 Lambda 数据事件除外)。免费层之后,CloudTrail 会对管理事件和数据事件进行收费。
另见
您可以在www.cloudericks.com/blog/getting-started-with-aws-cloudtrail 阅读更多关于 CloudTrail 的内容。
在 CloudTrail 中创建轨迹
在本食谱中,我们将学习如何在CloudTrail中创建轨迹,并如何从关联的S3 存储桶中读取日志。默认情况下,CloudTrail API 事件日志会保存 90 天。数据事件,例如 S3 存储桶操作和 Lambda 调用,默认情况下也不会被记录。为了将日志保存超过 90 天,启用 S3 或 Lambda 的数据事件日志记录,并且在日志搜索中提供更多灵活性,我们可以创建一个轨迹,将数据记录到 S3 存储桶中。
准备工作
为了成功完成此食谱,我们需要一个有效的 AWS 账户,以及在技术 要求部分中描述的用户。
如何执行…
我们可以按如下方式在 CloudTrail 中创建轨迹:
-
登录到控制台中的
CloudTrail服务。 -
在左侧边栏点击轨迹。
-
点击创建轨迹。
-
提供一个轨迹名称值为
aws-sec-cb-events。 -
保持为我组织中的所有账户启用未勾选。要启用此选项,我们需要登录到我们组织的管理账户。
-
在存储位置下,选择创建一个新的S3 存储桶。
-
对于轨迹日志存储桶和文件夹,输入一个新的 S3 存储桶的唯一名称,并指定一个文件夹(前缀)来存储您的日志。我们也可以使用自动填充的值。记住——存储桶名称必须是全局唯一的。
-
对于日志文件 SSE-KMS 加密,取消勾选启用复选框。
-
对于日志文件验证,选择启用。
-
不要为SNS通知投递选择启用。
-
不要为CloudWatch 日志选择启用。
-
可选地,添加标签并点击下一步。
-
对于事件类型,选择管理事件。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_10.jpg
图 7.10 – 选择事件类型
- 在管理事件下,选择读取和写入用于API 活动,然后点击下一步。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_11.jpg
图 7.11 – 配置管理事件
-
在屏幕右下角点击下一步。
-
在审查和创建页面上,检查所有详细信息,然后点击创建轨迹。我们应该会看到轨迹成功创建的消息。
-
转到轨迹页面,点击我们轨迹的 S3 存储桶名称,进入我们轨迹的 S3 存储桶。我们也可以手动进入 S3 仪表板并访问此存储桶。我们应该会看到
CloudTrail和CloudTrail-Digest文件夹。在这些文件夹中,我们应该会看到按区域划分的子文件夹。 -
进入文件夹,直到我们看到实际的日志文件。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_12.jpg
图 7.12 – CloudTrail 日志文件
- 在 S3 中选择一个文件,然后在操作下拉菜单中点击使用 S3 Select 查询。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_13.jpg
图 7.13 – 使用 S3 Select 的查询
- 选择
JSON作为格式,行 作为 JSON 内容类型,GZIP作为压缩选项。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_14.jpg
图 7.14 – 输入设置
-
对于 输出设置,选择
JSON格式。 -
向下滚动,我们现在应该看到 结构化查询语言(SQL)查询语句。根据需要修改 SQL,并点击 运行 SQL 查询。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_15.jpg
图 7.15 – 运行 SQL 查询
我们应该在另一个文本框中看到实际的结果,如下图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_16.jpg
图 7.16 – 查询结果响应(部分)
- 点击 下载结果 下载结果。我们可以使用任何兼容的应用程序打开下载的文件,例如 Microsoft Word。
我们创建了一个跟踪,并在本教程中使用了它。从 跟踪 页面,我们可以进入跟踪的配置页面,然后可以选择 删除 或 停止日志记录(如有需要)。
它是如何工作的…
对于存储超过 90 天的日志,我们需要创建一个跟踪(trail),并将日志发送到 S3 桶中。在本教程中,我们创建了一个多区域的跟踪。我们配置了记录所有事件的选项,也可以选择记录特定活动。我们还在跟踪的配置页面看到可以停止日志记录的选项。停止日志记录将阻止任何新事件发送到日志,但现有日志仍然可以访问。
我们在 AWS CloudTrail 中配置了管理事件,以监控 AWS 服务 API 活动并跟踪读写操作,以及对资源和配置的更改,涵盖我们 AWS 账户中的所有活动。此设置捕获了如创建、删除、修改和描述 AWS 资源等操作,确保对审计和合规性的全面监管。
还有更多内容…
在这个食谱中,我们没有启用数据事件和 Insights 事件。数据事件记录诸如 S3 对象变更和 Lambda 函数调用等操作,提供详细的资源监控,但启用它们会增加日志记录成本。CloudTrail 允许记录数据事件选项,如S3、S3、S3、Amazon Q 应用、Amazon Q 商业应用、Amazon Q 商业数据源、Amazon Q 商业索引、S3、S3、AWS Cloud Map 命名空间、AWS Cloud Map 服务、B2B 数据交换、Bedrock 代理别名、Bedrock 知识库、Cassandra 表、S3、CloudTrail 渠道、CloudWatch 指标、S3、CodeWhisperer 自定义、Cognito 身份池、S3、EBS 直接 API、EMR 写前日志工作区、S3、Guard Duty 检测器、IoT 证书、IoT Greengrass 组件版本、IoT Greengrass 部署、IoT SiteWise 资产、IoT SiteWise 时间序列、IoT 设备、IoT TwinMaker 实体、IoT TwinMaker 工作区、Kendra 排名、Kinesis 流、Kinesis 流消费者、Kinesis 视频流、S3、机器学习 MIModel、托管区块链、托管区块链网络、托管区块链查询、医疗影像数据存储、Neptune 图数据库、用于 Active Directory 的私有 CA 连接器、用于 SCEP 的私有 CA 连接器、RDS 数据 API - 数据库集群、S3 访问点、S3 对象 Lambda、S3、SageMaker 端点、SageMaker 特征存储、SageMaker 指标实验试验组件、SNS 平台端点、SNS 主题、S3、Step Functions 状态机、供应链、SWF 域、系统管理器、系统管理器托管节点、瘦客户机设备、瘦客户机环境、Timestream 数据库、Timestream 表和X-Ray 跟踪等。这些选项提供了对我们 AWS 资源活动的额外洞察。
Insight 事件日志侧重于检测与修改或管理 AWS 资源相关的 API 调用的异常使用模式或潜在的安全威胁。Insight 事件不能单独选择,必须与管理事件配对,以确保对 AWS API 活动的全面日志记录和上下文分析,服务于安全、合规和操作目的。
在这个食谱中,我们直接从 S3 控制台查询了 S3 中的日志。为了在查询 S3 中的 CloudTrail 日志时获得更多的灵活性,我们可以使用 Amazon Athena。我们将在本章的使用 Athena 查询 S3 中的 CloudTrail 日志食谱中学习如何使用 Amazon Athena 查询 CloudTrail 日志。
另见
在 www.cloudericks.com/blog/deep-dive-into-aws-cloudtrail 了解更多关于 CloudTrail 的内容。
使用 Athena 查询 S3 中的 CloudTrail 日志
在这个配方中,我们将学习如何使用Amazon Athena查询 CloudTrail 日志。使用 Athena 查询 CloudTrail 日志为我们提供了更大的灵活性。例如,当多个账户将日志发送到 CloudTrail 的 S3 桶时,我们无法在 CloudTrail 控制台中基于账户 ID 进行筛选。然而,我们可以使用 Athena 来基于账户 ID 查询 CloudTrail 的 S3 桶中的日志。
准备工作
我们需要以下内容才能成功完成这个操作:
-
一个有效的 AWS 账户和技术 要求部分中描述的用户。
-
在 CloudTrail 中创建的追踪,按照本章节中的在 CloudTrail 中创建追踪配方操作。
-
如果我们是 Athena 新手,在运行查询之前,我们需要设置一个查询结果存储位置在 Amazon S3,步骤如下:
-
为查询结果创建一个桶。我将我的桶命名为
aws-sec-cb2-query-results。为您的桶选择一个唯一的名称。 -
转到管理控制台中的
Athena服务。 -
转到查询编辑器标签。如果我们是 Athena 新手,我们应该会看到一个警告,提示在运行第一次查询之前,您需要在 Amazon S3 中设置查询结果位置。点击编辑设置。
-
浏览 S3 并选择我们为查询结果创建的桶。
-
保持其他选项不变,点击保存。
-
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_17.jpg
图 7.17 – 设置查询结果位置
如何操作…
我们可以按照以下步骤设置 Athena 并查询 CloudTrail 日志:
-
登录到管理控制台中的
CloudTrail服务。 -
点击左侧边栏中的事件历史。这将带我们进入事件历史页面。
-
点击创建 Athena 表,如我们在图 7 9中看到的。
-
对于存储位置,选择我们追踪的 S3 桶。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_18.jpg
图 7.18 – 创建 Athena 表
-
向下滚动并点击创建表。我们应该看到一个成功消息,表已经创建。
-
现在,转到管理控制台中的
Athena服务。 -
转到查询编辑器标签。我们应该在左侧的表下看到我们的表,并在右侧看到查询编辑器窗口。表在从 CloudTrail 仪表板启动创建后,可能需要一些时间才能在 Athena 仪表板上显示。我们可以使用左侧边栏中的刷新图标手动刷新表格列表。
-
点击我们表格旁边的三个点按钮,然后点击预览表。将创建一个示例查询,我们可以修改它以满足我们的需求。
我在查询中将限制设置为
2,如下所示:SELECT * FROM "default"."cloudtrail_logs_aws_cloudtrail_logs_370598287390_66c52071"limit 2;。 -
点击运行。
-
点击页面右上方的下载结果图标,以 CSV 格式下载结果。
如果我们访问为存储结果创建的 S3 存储桶,在我的案例中是
aws-sec-cb2-query-results,我们应该能在那里看到保存的查询结果。
它是如何工作的…
在本教程中,我们使用 Amazon Athena 查询存储在 S3 中的 CloudTrail 日志。Athena 使用基于 SQL 的查询并创建虚拟表。如果我们是 Athena 新手,在执行查询之前,应该先在 Amazon S3 中设置查询结果存储位置。我们从 CloudTrail 仪表盘创建了一个 Athena 表。然后,我们进入 Athena 并运行了一个预览查询。我们修改了查询并执行了它。最后,我们从结果页面将结果导出为 CSV 文件。
还有更多…
让我们快速了解与 Amazon Athena 相关的一些重要概念:
-
Athena 是 AWS 提供的一项查询服务,用于通过 SQL 在 Amazon S3 中分析数据。
-
Athena 只能查询 S3 数据,而不能直接查询 CloudTrail。
-
Amazon Athena 现在支持联合查询。我们可以跨存储在关系型、非关系型、对象存储和自定义数据源中的数据运行 SQL 查询,然后将结果存储到 Amazon S3。撰写时,该功能处于预览阶段。Athena 是无服务器的。我们无需设置任何基础设施,只需为我们运行的查询付费。
-
Athena 与 AWS Glue 集成,使我们能够爬取数据源,填充表和分区定义,甚至维护模式版本控制。
跨账户 CloudTrail 日志记录
通过跨账户 CloudTrail 日志记录,我们可以将日志存储在与生成日志的账户不同的账户中。通过将日志存储在单独的账户中,我们将日志与源账户隔离,从而防止任何有权限访问源账户的人篡改日志。我们可以为日志账户提供账户级别的访问权限给有限的人群。将多个账户的日志发送到单一账户也为我们提供了一个中心位置来查询日志。
要设置跨账户的 CloudTrail 日志记录,我们需要两个 AWS 账户:一个日志账户(存储日志的地方)和一个日志发送账户(发送日志的地方)。如果我们使用 AWS Organizations,可以通过在创建轨迹时选择为我组织中的所有账户启用,从管理账户启用跨账户的 CloudTrail。这样,组织的轨迹将在所有成员账户中创建,这意味着我们不需要修改存储桶策略。然而,启用此选项可能会导致额外费用,因为如果成员账户已经有轨迹,则每个区域内只有第一个轨迹是免费的。
在本食谱中,我们没有选择使用 AWS Organizations 启用跨账户 CloudTrail 日志记录的选项。要在不使用 AWS Organizations 的情况下设置跨账户 CloudTrail 日志记录,首先在日志账户中配置一个 CloudTrail 跟踪,并设置一个 S3 桶来存储日志。修改桶策略以允许 CloudTrail 服务和来自两个账户的特定 IAM 角色将日志写入桶中。然后,在日志账户中创建一个跟踪,并指定日志账户的 S3 桶作为存储位置。验证来自日志账户的日志是否正确存储在日志账户中指定的 S3 桶内。此设置将源账户的日志隔离,并集中存储日志,从而增强了安全性和可管理性。
另见
-
阅读更多关于 Amazon Athena 的信息,请访问
www.cloudericks.com/blog/getting-started-with-amazon-athena。 -
阅读更多关于跨账户 CloudTrail 日志记录的信息,请访问
www.cloudericks.com/blog/getting-started-with-cross-account-cloudtrail-logging。
利用 CloudFormation 模板将 CloudWatch 与 CloudTrail 集成
在本食谱中,我们将学习如何将 CloudWatch 与 CloudTrail 集成。集成后,我们可以在 CloudWatch 中基于 CloudTrail 日志创建度量过滤器和警报。我们还将学习如何使用 AWS 提供的 CloudFormation 模板,在 CloudWatch 中创建一组使用 CloudTrail 日志的警报。
准备工作
我们需要以下内容才能成功完成这个食谱:
-
一个有效的 AWS 账户和如技术 要求部分所述的用户。
-
通过遵循本章节的在 CloudTrail 中创建跟踪食谱,创建一个跟踪。
重要提示
在创建跟踪时,你也可以通过对这些步骤做少量修改来执行本食谱中的操作。
如何操作…
我们可以按照以下步骤将 CloudWatch 与现有的跟踪集成:
-
进入管理控制台中的
CloudTrail服务。 -
从左侧边栏点击跟踪。
-
点击我们的跟踪名称,进入跟踪的配置页面。
-
向下滚动到CloudWatch 日志部分,并点击编辑。
-
对于
CloudWatch Logs,选择启用复选框。 -
对于日志组,选择新建并保持日志组名称不变,在我的案例中为
aws-cloudtrail-logs-370598287390-b9277b0a。我们也可以通过现有选项使用现有日志组。 -
对于IAM 角色,选择新建,提供角色名称,然后点击保存更改。
-
从
s3-us-west-2.amazonaws.com/awscloudtrail/cloudwatch-alarms-for-cloudtrail-api-activity/CloudWatch_Alarms_for_CloudTrail_API_Activity.json下载 CloudFormation 模板并保存在本地。 -
进入管理控制台中的
CloudFormation服务并点击创建堆栈。 -
对于准备模板,请选择选择现有模板选项。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_19.jpg
图 7.19 – 准备模板
- 在指定模板下,选择上传模板文件选项,使用选择文件选项上传我们在本节第 8 步下载的模板。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_20.jpg
图 7.20 – 指定模板
-
向下滚动并点击下一步。
-
在指定堆栈详细信息页面,提供堆栈名称和电子邮件地址,以便在 API 活动触发警报时,我们能收到通知。
-
保持云跟踪日志组名称不变,然后点击下一步。
-
在配置堆栈选项页面,保持默认设置不变,然后点击下一步。
-
在审核并创建页面,检查所有内容,然后点击提交。等待我们的 CloudFormation 堆栈创建完成。
-
在 CloudFormation 堆栈成功创建后,我们将收到一封电子邮件,要求我们验证电子邮件地址。要开始接收警报激活时的电子邮件通知,请点击电子邮件中的确认订阅链接。
-
如果我们进入
CloudWatch中的警报页面,我们将能够查看新创建的警报。我们可以等待警报状态变为OK或ALARM,并操作这些警报,以更好地了解它们。
它是如何工作的…
在这个教程中,我们通过设置 CloudTrail 将 CloudWatch 与 CloudTrail 集成。CloudTrail 请求我们授权将与我们账户中的 API 活动相关的 CloudTrail 事件传递到我们的日志组中。我们从控制台允许了这一操作。授予了以下权限:
-
CreateLogStream,在我们指定的日志组中创建一个日志流 -
PutLogEvents,将 CloudTrail 事件传递到日志流
我们使用了 AWS 提供的 CloudFormation 模板来为与安全性和网络相关的 API 活动设置了一些 CloudWatch 警报。如果我们删除 CloudFormation 堆栈,所有的警报也会被删除。
AWS 使用 SNS 发送通知,并为我们创建了 SNS 主题订阅。我们需要通过验证我们的电子邮件地址来确认电子邮件订阅,因为 SNS 在我们手动确认订阅之前不会发送通知。
还有更多…
在这个教程中,我们将 CloudWatch 与 CloudTrail 集成,并使用 Amazon 提供的 CloudFormation 模板创建了一些与安全性和网络相关的 API 活动警报。你可以按照本章中与 CloudWatch 警报和指标配合使用一节的另见部分的参考,将这些警报添加到仪表板中。
另见
阅读更多关于 CloudFormation 的信息,请访问 www.cloudericks.com/blog/aws-cloudformation-for-absolute-beginners。
设置和使用 AWS Config
在本教程中,我们将学习如何设置和使用 AWS Config。我们可以使用 Config 来记录和评估 AWS 资源的配置。我们可以创建定义安全标准的规则,并查找不符合安全标准的资源。Config 还支持在检测到问题时自动修复。
准备工作
为了成功完成本教程,我们需要以下内容:
-
一个有效的 AWS 账户和如技术 要求部分所述的用户。
-
如果您想添加 SNS 主题以接收通知,可以按照本章中的创建一个发送电子邮件的 SNS 主题教程创建一个带有电子邮件订阅的 SNS 主题。
-
为了测试,我们需要至少一个未启用多因素身份验证(MFA)的 IAM 用户。
如何操作…
首先,我们将首次设置 AWS Config,然后我们将看到如何使用 AWS Config。让我们开始吧:
-
当我们第一次登录管理控制台中的
AWS Config服务时,我们将看到一个入门页面。点击开始使用,我们将进入设置页面。 -
在录制方式部分,对于录制策略,选择所有资源类型,带有可自定义的覆盖**。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_21.jpg
图 7.21 – AWS Config 录制方式
- 对于录制频率,选择连续录制。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_22.jpg
图 7.22 – 录制频率
- 在覆盖设置部分,点击删除。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_23.jpg
图 7.23 – 覆盖设置
-
在数据治理部分,选择创建 AWS Config 服务关联角色。或者,我们可以选择我们账户中的角色。
-
在交付方式部分,选择创建一个存储桶并给出一个 S3 存储桶名称。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_24.jpg
图 7.24 – 交付方式部分
- 在Amazon SNS 主题部分,选择将配置更改和通知流式传输到 Amazon SNS 主题,然后选择从您的账户选择主题,最后选择我们在准备工作部分中创建的主题。或者,我们可以创建一个新主题,或者选择另一个账户中的主题。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_07_25.jpg
图 7.25 – 选择 Amazon SNS 主题
-
在页面底部,点击下一步。
-
在AWS 托管规则页面,搜索并选择
iam-user-mfa-enabled规则。点击下一步。如果需要,我们可以添加更多规则。完成设置过程后,我们也可以添加规则。 -
在审核页面,审核更改并点击右下角的确认。我们将被重定向到 AWS Config 仪表板。在仪表板中,我们可以看到按合规性评分的符合性包、合规状态、按非合规资源计数的非合规规则、资源清单、AWS Config 使用指标和AWS Config 成功指标。
-
如果我们有一个没有启用 MFA 的 IAM 用户,如在准备工作部分讨论的那样,我们应该看到该用户不符合我们的
iam-user-mfa-enabled规则。请注意,非合规资源在仪表板中显示可能需要一些时间。我们还可以对规则执行以下操作:管理修复、重新评估、删除结果和删除规则。
工作原理…
在这个教程中,我们在我们的账户上设置了 AWS Config。我们选择了记录此区域中支持的所有资源和包括全局资源(例如,AWS IAM 资源),以记录所有区域的所有资源。我们也可以通过取消勾选记录此区域中支持的所有资源,然后在特定类型字段中选择我们想要记录的资源,来配置特定资源的记录。
我们启用了 SNS 通知,通过从我们的账户选择一个带有电子邮件订阅的 SNS 主题来接收电子邮件通知。我们还可以选择另一个账户的 SNS 主题,方法是选择从另一个账户选择主题选项。在AWS Config 角色部分,我们选择了创建 AWS Config 服务链接角色。该角色授予 Config 只读访问权限,以便我们记录配置信息。该角色还授予将信息发送到 S3 和 SNS 的权限。
在这里,我们选择了iam-user-mfa-enabled规则,这是一个周期性规则。周期性规则定期运行,而非周期性规则(基于配置更改的规则)会在关联的配置发生更改时立即运行。
还有更多内容…
让我们了解一些与 AWS Config 相关的重要概念:
-
我们可以使用 AWS Config 进行的一些检查包括:检查是否启用了 MFA,检查 S3 存储桶是否为公开的,数据库是否已加密,VPC 流日志是否启用等。
-
我们可以使用 AWS Lambda 编写自己的自定义规则。
-
AWS Config 可以为规则执行自动修复操作。例如,我们可以根据规则更改 EC2 实例的配置。然而,AWS 可能会停止并重新启动 EC2 实例,因此我们需要考虑可能的停机时间。
-
要从新的控制台配置自动修复,我们可以进入我们的规则,点击操作下拉菜单,选择管理修复。
-
我们可以在多个账户中使用相同的 Config 规则,以确保它们都遵循一组共同的规则。
-
我们可以在 AWS Config 中创建一个聚合器,查看跨所有区域的多个账户的 AWS 资源清单或 Config 规则合规性状态。在当前控制台中,我们可以通过从左侧边栏进入聚合视图,然后点击添加聚合器来创建聚合器。
-
AWS Config 的收费基于记录的规则评估次数。
创建自定义规则的步骤可以总结如下:
-
创建一个 IAM 角色,该角色可以被 Lambda 使用,并具有所需的权限。为了向 AWS Config 报告,我们需要提供
AWSConfigRulesExecutionRole。为了将日志发送到 CloudWatch,我们需要添加AWSLambdaBasicExecutionRole。最后,我们需要授予它访问它将要监控的服务的权限(例如,访问 S3 时需要AmazonS3ReadOnlyAccess)。 -
通过选择我们在上一步中创建的 IAM 角色,并使用任何支持的编程语言,来创建一个 Lambda。
-
在 Lambda 中编写一些代码,以评估我们正在监控的服务参数(例如,S3 存储桶属性),每次评估后更新一个
ResultToken对象,并将一组ResultToken对象返回给 Config。ResultToken对象应包含以下信息:ComplianceResourceType(例如,AWS::S3::Bucket),ComplianceResourceId(例如,存储桶名称),ComplianceType(COMPLIANT或NON_COMPLIANT)和OrderingTimestamp。 -
在 Config 控制台中,我们可以进入规则,然后选择添加规则,并选择添加自定义规则。当你执行此操作时,相关的屏幕名称可能会有所不同。
-
将触发类型字段设置为配置更改或周期性。
-
接下来,我们可以选择为我们的规则设置修复操作或通知。
-
点击保存。我们的规则应与其他规则一起列在规则页面上。
另见
阅读更多关于 AWS Config 的内容,请访问 www.cloudericks.com/blog/getting-started-with-aws-config.vp。
第八章:GuardDuty、Macie、Inspector 和 Analyzer 的合规性
定期检查账户的合规性,并在发现任何不合规时收到通知,是保持账户安全的重要步骤。在本章中,我们将了解 AWS 内的一些服务,这些服务可以帮助我们检查合规性,通过附加的智能和规则。我们将学习Amazon GuardDuty、Amazon Macie和Amazon Inspector,它们利用机器学习和高级算法帮助我们检查合规性。AWS Config 是另一项可以帮助合规性的服务,但我们已在第七章中讲解过它。
本章包括以下操作:
-
设置并使用 Amazon GuardDuty
-
聚合来自多个账户的 GuardDuty 发现结果
-
设置并使用 Amazon Macie
-
设置并使用 Amazon Inspector
-
设置并使用 AWS Security Hub
-
使用 IAM Analyzer 检查未使用的访问权限
技术要求
在开始本章的操作之前,我们需要确保具备以下要求和知识:
-
我们需要一个有效的 AWS 账户来完成本章中的操作。如果我们使用 AWS 组织,我们可以使用组织的管理账户,因为在本章中我们将在 AWS 组织级别配置很多内容。我将使用在第一章中的多账户管理与 AWS 组织食谱中创建的
aws-sec-cookbook-1账户。 -
对于管理员操作,我们需要一个具有
AdministratorAccess权限的用户,才能访问我们正在使用的 AWS 账户。
本章的代码文件可在github.com/PacktPublishing/AWS-Security-Cookbook-Second-Edition/tree/main/Chapter08 获取。
设置并使用 Amazon GuardDuty
在本食谱中,我们将学习如何设置并使用 Amazon GuardDuty。GuardDuty 分析来自 CloudTrail 管理日志、VPC 流日志和 Route 53 DNS 日志等源的数据,并使用机器学习、异常检测和集成的威胁情报来发现恶意活动和未经授权的行为。请注意,如果您使用其他 DNS 解析器,如 OpenDNS 或 GoogleDNS,或设置了自己的 DNS 解析器,GuardDuty 无法访问和处理来自这些源的数据。GuardDuty 可以与 CloudWatch 和 SNS 集成,以触发警报并发送通知。GuardDuty 还可以聚合来自多个账户的数据。
准备工作
要成功完成这个操作,我们需要一个有效的 AWS 账户和一个用户,具体要求请参见技术要求部分。我们还需要一个 S3 存储桶。
如何操作…
如果我们第一次使用 GuardDuty,我们需要先启用 GuardDuty。让我们开始吧:
-
在 AWS 管理控制台中转到
GuardDuty服务。 -
如果我们是第一次使用 GuardDuty,应该会看到如下选项。如果 GuardDuty 已经启用,请跳到步骤 4。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_1.jpg
图 8.1 – 启用 GuardDuty
-
选择Amazon GuardDuty - 全功能,然后点击开始使用。我们现在应该看到欢迎使用 GuardDuty屏幕;点击启用 GuardDuty。
-
在
GuardDuty仪表板的左侧边栏点击发现。我们可以看到这里的发现按高、中和低分类。由于我们刚刚启用它,初始时可能不会看到任何发现。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_2.jpg
图 8.2 – 发现屏幕
- 我们可以点击任何一个事件,查看该发现提供的更多信息。然后我们可以向下滚动到操作、目标和附加信息部分,了解更多关于该事件的信息。
接下来,我们将在 GuardDuty 中进行 IP 白名单和黑名单管理。
在 GuardDuty 中进行 IP 白名单和黑名单管理
我们可以按照以下方式在 GuardDuty 中进行 IP 白名单和黑名单管理:
-
创建并上传以下两个文件,一个是信任的 IP 列表,另一个是威胁列表,并将它们上传到 S3 存储桶:
trusted-ips.txt:这是一个文本文件,包含我们希望信任的 IP 和 CIDR 范围。每个 IP 或 CIDR 范围应该占一行。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_3.jpg
图 8.3 – 信任的 IP 文件
threat-lists.txt:这是一个文本文件,包含我们希望添加到可疑 IP 列表中的 IP 和 CIDR 范围。每个 IP 或 CIDR 范围应该占一行。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_4.jpg
图 8.4 – 威胁列表文件
-
现在,返回到
GuardDuty仪表板。在左侧边栏点击列表。 -
在信任的 IP 列表下,点击添加信任的 IP 列表。
-
在名为添加信任的 IP 列表的弹出屏幕中,在列表名称字段为我们的列表命名。对于位置,输入您信任的 IP 列表的 S3 URL,格式为
https://myguarddutydemo.s3.amazonaws.com/trusted-ips.txt。对于格式,选择纯文本。然后勾选我同意复选框。最后,点击添加列表。我们现在应该可以在信任的 IP 列表下看到我们的列表。 -
勾选我们列表旁边的复选框。点击操作下拉菜单,然后点击激活。我们应该看到一条成功消息,指示该列表已被激活。可能需要一些时间才能使更改生效。
-
在威胁 IP 列表下,点击添加威胁 IP 列表。我们应该看到一个名为添加威胁 IP 列表的弹出屏幕。
-
重复步骤 3 到 5,但添加我们的威胁列表,而不是信任的 IP 列表。我们应该会在威胁 IP 列表下看到我们的列表。
-
为了验证信任的 IP 列表和威胁 IP 列表是否正常工作,我们可以模拟来自列表中 IP 的流量,并检查 GuardDuty 的发现结果:
-
白名单 IP(受信任的 IP):从我们
trusted-ips.txt文件中的 IP 地址生成流量。监控 GuardDuty 发现,确保该流量未被标记为可疑或恶意。 -
黑名单 IP(威胁 IP):从我们威胁列表文件中的 IP 地址生成流量。检查 GuardDuty 发现,确认该流量是否被标记为可疑或恶意。
-
-
审查 GuardDuty 仪表盘和发现,以确保白名单中的 IP 不会生成任何警报,并且黑名单中的 IP 已被正确标记。这样可以确认我们的列表被 GuardDuty 有效使用。
在本节中,我们通过分别将几个 IP 地址添加到受信任的 IP 列表和威胁列表中,将这些 IP 地址列入白名单和黑名单。我们将在本教程的 工作原理… 部分深入了解它们是如何工作的。
工作原理…
我们首先启用了 GuardDuty。当我们启用 GuardDuty 时,我们授予它权限以分析各种日志和数据源,如 VPC 流日志、AWS CloudTrail 管理事件日志、DNS 查询日志、AWS CloudTrail S3 数据事件日志、EKS 审计日志、Lambda 网络活动日志和 RDS 登录活动日志,以生成安全发现,正如你在执行本教程 如何操作… 部分的 第 3 步 时看到的那样。此外,GuardDuty 可以分析 弹性块存储(EBS)卷数据以检测恶意软件。当我们第一次在支持的区域启用 GuardDuty 时,我们的账户会自动加入 30 天的免费试用期,这期间可能还会默认包括一些保护计划。
默认情况下,当我们第一次启用 GuardDuty 时,所有保护计划都会激活,除了 S3 的运行时监控和恶意软件保护。这些可以通过 GuardDuty 控制台或 API 启用。GuardDuty 的恶意软件保护和运行时监控服务的使用受 Amazon GuardDuty 服务条款的约束。我们可以随时暂停或禁用 GuardDuty 或任何特定的保护计划,停止其处理和分析数据、事件和日志。然而,暂停或禁用 GuardDuty 不会影响 S3 的恶意软件保护。要停止对我们的 S3 存储桶进行恶意软件扫描,我们必须单独删除每个存储桶的恶意软件保护计划。请注意,GuardDuty 不管理或提供其分析的日志和数据的访问权限;我们可以通过各自的控制台或 API 配置这些数据源。
为了进行测试,我们从 GuardDuty 控制台生成了示例发现;GuardDuty 生成了 54 个示例事件(在我的案例中 – 这可能会有所不同,因为 GuardDuty 会在一年中增加和淘汰发现类型)。GuardDuty 事件分为三个严重性级别,从最低到最高,分别由蓝色、黄色和红色图标表示,蓝色为最轻,红色为最严重。点击发现后,我们将获得关于该发现的更多信息。
我们通过将一些 IP 地址添加到受信任 IP 和威胁列表中,分别将它们列入白名单和黑名单。GuardDuty 不会对已包含在受信任 IP 列表中的 IP 地址生成检测结果。这是为了避免误报,特别是来自公司 IP 地址的误报。然而,我们需要记住,攻击也可能来自内部。威胁列表由已知的恶意 IP 地址组成。我们提供的地址将与 AWS 基于其研究和经验所提供的地址一起使用。
我们可以将一个 IP 或 CIDR 范围添加到受信任 IP 列表和威胁列表中,格式多样,包括纯文本格式(每行一个 IP 或 CIDR),结构化威胁信息表达式(STIX)、开放威胁交换(OTX)CSV、FireEye iSIGHT 威胁情报 CSV、Proofpoint ET 情报源 CSV、AlienVault 声誉源 CSV。目前,受信任 IP 列表最多可以有 2,000 行,威胁列表最多可以有 250,000 行。
还有更多……
作为一项新功能,Amazon GuardDuty S3 恶意软件保护可以检测上传到我们选择的 Amazon S3 存储桶中的恶意文件。我们可以为属于我们账户的 S3 存储桶启用恶意软件保护,并使用 GuardDuty 控制台中嵌入的 Amazon CloudWatch 指标来监控恶意软件扫描状态。我们在 图 8 *.1 中已经看到了这个选项。
让我们了解一些与 GuardDuty 相关的重要概念:
-
GuardDuty 通过分析 VPC 流日志来检测受损的 EC2 实例——例如,GuardDuty 可以检测实例是否被用于 拒绝服务(DOS)攻击。
-
GuardDuty 可以检测我们的实例是否被用于加密货币挖矿。它还可以检测我们的凭证是否被盗,例如通过访问恶意 IP、使用 EC2 实例配置文件访问 EC2 以外的资源,或对 AWS 资源(如 S3、EC2、RDS 等)发出异常的 API 调用。
-
GuardDuty 可以扫描并检测 EC2 实例和 EKS 基础设施中的恶意文件。它还可以帮助识别上传到 S3 存储桶中的恶意文件。
-
GuardDuty 是一项区域性服务。即使启用了多个账户并使用了多个 AWS 区域,GuardDuty 的安全检测结果仍然保留在生成底层数据的同一地区。
-
我们可以将来自不同账户的 GuardDuty 检测结果汇总到一个账户中。我们将在 GuardDuty 中汇总多个账户的检测结果 配方中讨论这个内容。
-
我们可以将不同账户和区域的 GuardDuty 检测结果导出到一个 Amazon S3 存储桶中,以简化所有检测结果的汇总。这是一个新功能,区别于将多个账户的检测结果汇总到一个账户中。
-
我们可以使用 CloudWatch 和 SNS 来监控 GuardDuty 的检测结果并发送通知。
-
GuardDuty 的定价是基于分析的数据量:
-
对于 VPC 流日志和 DNS 日志分析,GuardDuty 根据分析的数据大小收费。
-
对于 CloudTrail 事件,GuardDuty 会根据分析的事件数量收费。
-
-
GuardDuty 支持商家或服务提供商处理、存储和传输信用卡数据,并已通过支付卡行业
(PCI)数据安全(DSS)标准的合规性验证。
设置 Amazon EventBridge 以监控来自 GuardDuty 的发现
设置 Amazon EventBridge 以监控来自 GuardDuty 的发现的步骤总结如下:
- 转到管理控制台中的
EventBridge服务。
重要说明
EventBridge 曾被称为 Amazon CloudWatch 事件。目前,如果我们导航到 CloudWatch 并点击事件部分下的规则,我们将被重定向到 EventBridge 控制台。
-
在左侧边栏中点击总线下的规则。
-
点击创建规则以进入创建规则页面。
-
在定义规则详细信息页面中,为我们的规则提供名称和描述。将事件总线的值保持为默认,规则类型为带事件模式的规则,然后点击下一步。
-
在构建事件模式部分,向下滚动到事件模式。
-
设置事件源为AWS 事件或 EventBridge合作伙伴事件。
-
设置AWS 服务为
GuardDuty。 -
设置事件类型为GuardDuty 发现。
-
点击下一步。在目标下,执行以下操作:
-
在选择目标下,从下拉菜单中选择SNS 主题。
-
选择一个主题。你可以通过参考 第七章 中的创建 SNS 主题以发送电子邮件配方来创建 SNS 主题。
-
-
点击下一步。
-
可选地,点击添加新标签,然后点击下一步。
-
审核规则并点击创建规则。
-
返回
GuardDuty服务并点击左侧边栏的设置。 -
向下滚动到示例发现并点击生成示例发现。稍后,检查我们为 SNS 主题配置的电子邮件地址的收件箱,应该会收到一封关于 GuardDuty 发现的邮件。
-
要配置和修改 GuardDuty 更新 EventBridge 和 S3 的频率,我们可以转到
GuardDuty服务,点击左侧边栏的设置,并在发现导出选项部分点击编辑。 -
如果我们尚未配置导出到 S3,则会提供一个立即配置选项来进行配置。
另见
阅读更多关于 GuardDuty 的信息,请访问 www.cloudericks.com/blog/getting-started-with-amazon-guardduty。
汇总来自多个账户的 GuardDuty 发现
在这个流程中,我们将配置 GuardDuty 以 聚合发现结果,将多个 AWS 账户的发现结果汇总到一个账户中。将多个账户的发现结果聚合到一个专用账户中,可以为我们提供一个查询所有账户发现结果的集中位置。我们也可以在一个地方为所有账户进行配置更改。
准备中
我们需要以下内容来成功完成这个流程:
-
需要两个有效的 AWS 账户。我们将它们称为聚合账户和日志账户。聚合账户将聚合来自成员账户的日志。
-
记下成员账户的 AWS 账户 ID 和电子邮件地址。如果我们使用的是 AWS Organizations 和 IAM 身份中心,正如我们在 第一章 中看到的,我们可以从 AWS Organizations 服务或 IAM 身份中心服务的管理账户中获取这些信息。
-
我们应该通过本章节中的 设置和使用 Amazon GuardDuty 流程,启用聚合账户和成员账户中的 GuardDuty。
如何操作…
我们可以按照以下方式配置 GuardDuty,以聚合成员账户的发现结果:
-
进入聚合账户的管理控制台中的
GuardDuty服务。 -
从左侧边栏点击 账户。
-
点击 通过邀请添加账户。
-
输入成员账户的 AWS 账户 ID 和电子邮件地址,然后点击 下一步。
-
我们应该能在 账户 页面看到我们的账户。状态 字段将显示 邀请未发送。
-
选择我们刚刚添加的账户,点击 操作 下拉菜单,然后点击 邀请。
-
在弹出窗口中,您可以选择性地提供消息。保持 同时向受邀者 AWS 账户的根用户发送电子邮件通知,并在受邀者的个人健康仪表板中生成警报 的选项未选中,然后点击 发送邀请。我们账户的状态应该会变为 已邀请。
-
进入成员账户的管理控制台中的
GuardDuty服务。 -
如果我们现在启用 GuardDuty,启用后将跳转到 邀请 页面。否则,请从左侧边栏进入 账户 页面并点击 接受邀请。
-
从左侧边栏点击 设置,进入 设置 页面并点击 生成示例发现。
-
进入聚合账户中的
GuardDuty仪表板,检查是否有来自我们成员账户的发现结果。
在这个流程中,我们配置了一个成员账户,将日志发送到聚合账户。聚合账户将聚合来自我们添加的成员账户以及以后添加的任何其他成员账户的日志。
它是如何工作的…
首先,我们登录到主账户,这个账户将聚合所有 GuardDuty 发现结果。然后,我们邀请了一个成员账户。我们已经记下了该账户的账户 ID,并且应该知道该账户的根邮箱地址。接着,我们登录到成员账户并接受邀请。之后,我们从成员账户生成了示例发现结果。最后,我们重新登录到主账户并验证,发现成员账户的发现结果已经出现在主账户中。
还有更多…
GuardDuty 会保留生成的发现结果 90 天。它将活动发现结果导出到 Amazon EventBridge(EventBridge)。此外,我们还可以选择将这些发现结果导出到 Amazon S3 存储桶。这使我们能够跟踪账户中潜在可疑活动的历史数据,并评估推荐的修复步骤的有效性。我们可以按照以下步骤进行:
-
按如下方式配置 KMS 密钥:
-
创建或选择一个 KMS 密钥:选择现有的 KMS 密钥或创建一个新的密钥。
-
将策略附加到 KMS 密钥:将策略附加到 KMS 密钥,以授予 GuardDuty 访问权限。请参阅代码文件中的
guardduty_kms_policy.json文件,了解示例策略内容。
-
-
按如下方式配置 S3 存储桶:
-
选择一个 S3 存储桶:可以创建一个新的存储桶或使用现有的存储桶。
-
更新存储桶策略:更新存储桶策略以允许 GuardDuty 上传。请参阅代码文件中的
guardduty_s3_bucket_policy.json文件,了解示例策略内容。
-
-
在 GuardDuty 控制台中按如下方式配置发现导出:
-
进入 GuardDuty 仪表盘。
-
通过点击左侧边栏的设置选项进入设置。
-
按如下方式配置导出选项:
-
向下滚动到发现导出选项部分。
-
点击立即配置。
-
输入 S3 存储桶和 KMS 密钥的 ARN。提供将导出发现结果的 S3 存储桶 ARN。提供用于加密发现结果的 KMS 密钥 ARN。
-
点击保存以应用设置。
-
-
通过执行上述步骤,我们可以配置 AWS GuardDuty 将其发现结果导出到 S3 存储桶,确保跨账户和区域聚合并保护数据。请确保根据需要使用实际值更新示例策略文件。
另见
在 GuardDuty 中阅读有关导出发现功能的更多信息:docs.aws.amazon.com/guardduty/latest/ug/guardduty_exportfindings.html。
设置和使用 Amazon Macie
在本文档中,我们将学习如何设置和使用 Amazon Macie。Macie 是 AWS 中基于机器学习的服务,主要用于发现、分类和保护敏感数据。Macie 可以分析 S3 存储桶中的数据,以查找诸如凭据、财务信息、受保护健康信息(PHI)、个人可识别信息(PII)、API 密钥、源代码等敏感信息,并将其分类为不同的安全级别。Macie 可与 CloudWatch 配合使用来发出警报并发送通知。Macie 还可以分析来自 CloudTrail 的 API 调用以检测异常。
准备工作
我们需要以下内容才能成功完成此文档:
-
我们需要一个有效的 AWS 帐户和用户,如技术要求部分所述。
-
我们需要一个 S3 存储桶。存储桶应该位于我们配置 Macie 的同一区域中。我已在
us-east-1区域创建了一个存储桶。 -
我们的 S3 存储桶应包含以下带有假敏感数据的文件,并提供与章节相关的代码文件:
-
credit-cards-data.txt带有样本信用卡数据 -
custom-data-license-plates.txt带有样本车牌
-
如何做…
我们可以按照以下步骤配置 Macie 来发现和分类 S3 存储桶中的风险:
- 转到 AWS 管理控制台中的
Amazon Macie服务。
重要提示
如果我们是第一次使用 Macie,应该会看到一个带有开始按钮的页面。单击开始。确保所选的区域与我们的存储桶相同,查看服务角色权限,并启用 Macie 开始 30 天的试用期。然后我们将进入摘要页面。自动敏感数据发现的 30 天免费试用不包括敏感数据发现作业。如果您启动并执行作业,则将根据作业分析的未压缩数据总量收取费用。
- 在 Macie 仪表板的左侧边栏中单击作业。
重要提示
如果我们尚未为敏感数据发现结果配置存储库,将收到警告。我们需要在启用 Macie 后的 30 天内设置此存储库。请注意,Macie 仅存储我们的敏感数据发现结果和发现结果,有效期为 90 天。我们可以立即单击配置以配置现有或新的存储桶作为敏感数据发现结果的存储库,或者我们可以稍后(在 30 天内)使用设置左侧边栏下的发现结果菜单项进行配置。
-
单击创建作业以启动作业创建过程。
-
在选择 S3 存储桶页面,选择选择特定的存储桶以选择要在作业中包含的存储桶。我们将选择在本文档的准备工作部分创建的存储桶。
-
滚动到底部并单击下一步。
-
对于审查 S3 存储桶页面,请审查和验证我们的存储桶选择,然后选择下一步。
-
对于精细化范围页面,选择一次性作业,为采样深度提供
100%的值,然后点击下一步。
重要提示
不选择一次性作业,我们可以选择定期作业选项,并将更新频率设置为每日、每周或每月,但让我们为这个示例选择一次性作业。在高级设置下,我们可以指定包含或排除某些对象的标准以进行作业分析。如果没有提供标准,作业将分析存储桶中的所有对象。目前,我们应该将这些设置保持为默认设置。
- 对于管理的数据标识符选项,选择推荐。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_5.jpg
图 8.5 – 管理的数据标识符选项
-
向下滚动并点击下一步。
-
对于自定义数据标识符,不添加任何内容,然后点击下一步。
-
对于选择允许列表,不添加任何内容,然后点击下一步。
-
在输入常规设置窗格中,在作业名称下输入
AWS Sec CB Demo。可选地,提供作业描述并根据需要添加任何标签。点击下一步。 -
在审阅和创建页面上,仔细检查配置设置以确保其准确性,并查看作业的预估总成本。点击提交。
-
如果我们转到作业页面,我们的作业状态将为活动(运行中)。等到状态变为完成。可能需要 10 到 15 分钟。
-
从列表中点击超链接作业名称,然后从显示结果下拉菜单中,点击显示发现以查看发现情况。点击发现以了解更多信息。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_6.jpg
图 8.6 – Macie 发现选项卡
在本节中,我们看到如何使用 Amazon Macie 查找包含银行账号或信用卡号等财务信息的 S3 对象。接下来,我们将看到如何使用自定义的 Macie 数据标识符。
添加自定义的 Macie 数据标识符
我们可以按照以下步骤配置和使用自定义的 Macie 数据标识符:
-
导航回 AWS 管理控制台中的 Macie 服务。
-
点击左侧边栏中的自定义数据标识符。
-
点击创建。
-
在名称下提供
UKLicensePlates。对于描述 - 可选,输入英国车牌,并将正则表达式设置为以下内容:([0-9][a-zA-Z][a-zA-Z]-?[0-9][a-zA-Z][a-zA-Z])|([a-zA-Z][a-zA-Z][a-zA-Z]-?[0-9][0-9][0-9])|([a-zA-Z][a-zA-Z]-?[0-9][0-9]-?[a-zA-Z][a-zA-Z])|([0-9][0-9][0-9]-?[a-zA-Z][a-zA-Z][a-zA-Z])|([0-9][0-9][0-9]-?[0-9][a-zA-Z][a-zA-Z]) -
将其他所有内容保持默认,然后点击提交。
-
通过按照上一节中的步骤创建新作业;但是,在自定义数据标识符页面上,选择在本节中创建的
UKLicensePlates。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_7.jpg
图 8.7 – 选择自定义数据标识符
- 一旦任务的状态显示为完成,在任务页面,从显示结果下拉菜单中,点击显示发现。我们应该能够看到一个新的发现,对应我们的自定义标识符任务。
它是如何工作的…
Macie 可以用于分析 S3 存储桶和 CloudTrail 日志。在本配方中,我们探索了 Amazon Macie,这是一项基于机器学习的 AWS 服务,帮助发现、分类和保护存储在 S3 存储桶中的敏感数据。我们设置了 Macie,启动了一个发现任务来扫描特定的 S3 存储桶,并观察它如何成功识别预定义的敏感数据类型,例如信用卡号码。接着,我们通过使用正则表达式创建了一个名为UKLicensePlates的自定义数据标识符,以识别存储在 S3 存储桶中的特定格式。这个自定义标识符被加入到新的发现任务中。任务完成后,我们确认 Macie 成功识别了六个车牌号码,展示了它在发现预定义和用户定义的敏感数据类型方面的能力。
还有更多…
让我们了解一些与 Macie 相关的重要概念:
-
Macie 可以在企业中用于多种用途。Macie 可以检测是否有敏感数据或源代码从异常的 IP 地址下载。Macie 可以检测哪些用户导致了最严重的高风险事件。Macie 可以按位置对事件进行分组,帮助我们检测来自未知位置的活动。Macie 还可以提供我们账户中 CloudTrail 事件的高层次分析。如果我们看到任何意外的调用,可以深入调查以找出根本原因。
-
Macie 和 GuardDuty 在分析 API 调用方面有功能重叠。与 GuardDuty 不同,Macie 的重点更多在于访问模式,例如上传或下载的数据量是否超过正常情况。一般来说,最好将 Macie 与 GuardDuty 结合使用,以获得更好的保护。
-
Macie 可以与 CloudWatch 一起使用,用于触发警报和发送通知。
-
Macie 可以汇总来自多个账户的数据。在设置好所需权限后,我们可以从集成页面的账户选项卡添加其他账户。
-
Macie 目前对 S3 内容分类和 CloudTrail 事件处理收费。
-
Macie 是一个区域性服务。Macie 必须在每个区域逐个启用,并帮助你查看该区域内所有账户的发现。
配置 Macie 警报通知与 Amazon EventBridge 和 SNS 的步骤可以总结如下:
-
进入控制台中的
Amazon EventBridge服务。 -
从左侧边栏中点击总线下的规则。
-
点击创建规则进入创建规则页面。
-
在定义规则详细信息页面,为我们的规则提供名称和描述。将事件总线和规则类型保持为带有事件模式的规则,然后点击下一步。
-
在构建事件模式部分,向下滚动到事件模式。
-
设置事件来源为AWS 服务。
-
设置AWS 服务为
Macie。 -
设置事件类型为Macie 发现。
-
点击下一步。
-
在目标部分,选择选择目标,从下拉菜单中选择SNS 主题。
-
选择一个主题。你可以通过按照第七章中的创建 SNS 主题以发送电子邮件流程来创建 SNS 主题。
-
点击下一步。
-
可选地,点击添加新标签,然后点击下一步。
-
审查规则并点击创建规则。
-
返回到Macie 服务并按照上一部分中的步骤为我们的 S3 存储桶创建任务。
-
一段时间后,检查我们为 SNS 主题配置的电子邮件收件箱,我们应该会收到关于 Macie 发现结果的电子邮件。
默认情况下,Macie 会自动将其发现结果发送到 Amazon EventBridge,进行进一步处理并与其他 AWS 服务集成。你可以根据以下步骤配置 Macie 将发现结果发送到额外的目标,并定义更新发送到每个目标的频率:
-
进入 Macie 控制台,点击左侧边栏上的设置。
-
向下滚动到发现结果发布,更新策略发现的频率。
另请参见
了解更多关于 Amazon Macie 的信息,请访问 www.cloudericks.com/blog/getting-started-with-amazon-macie。
设置和使用 Amazon Inspector
在本流程中,我们将学习如何设置和使用 Amazon Inspector。Inspector 是一项执行自动化安全评估的服务,用于发现部署在 AWS 上的应用程序中的漏洞或偏离标准实践的情况。我们可以直接在控制台中查看 Inspector 的发现结果,或者从 Inspector 提供的详细评估报告中查看。
准备工作
我们需要以下内容才能成功完成这个流程:
-
我们需要一个有效的 AWS 账户和一个用户,如技术要求部分所述。
-
还需要在默认 VPC 中,一个位于 VPC 公共子网的 EC2 实例。对于
Amazon Machine Image (AMI),选择Amazon Linux 2023 AMI。对于实例类型,选择t2.micro。对于密钥对(登录),选择一个已有的,或者创建一个新的。 在网络设置中,确保自动分配公共 IP的值为启用,并选择创建安全组,同时将允许 SSH 流量来自的值设置为任何地方。
如何执行…
我们可以按如下方式设置 Inspector:
-
在控制台中进入
Amazon Inspector服务。 -
如果是第一次登录,我们应该看到一个开始使用页面。目前,对于首次使用 Inspector 的账户,提供 15 天的免费试用。点击 开始使用。在 激活 Inspector 页面上,我们应该看到一条如下的消息:当您激活 Inspector 时,您授权 Inspector 获得权限,代表您在 AWS 中发现、分类并保护敏感数据,并生成有关潜在安全问题的发现报告。这将仅为您的账户激活 Inspector。点击 激活 Inspector 并等待完全激活。在左侧边栏中,我们应该能看到如下选项:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_8.jpg
图 8.8 – Amazon Inspector 的左侧边栏
如果我们展开 发现,我们可以看到选项,如 按漏洞、按实例、按容器镜像、按容器仓库、按 Lambda 函数 和 所有发现。我们还应该会看到类似以下的消息,但由于 Amazon 经常更新其用户界面和消息,具体内容可能会有所不同。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_9.jpg
图 8.9 – 启动 Amazon Inspector 后的消息
-
等待一段时间后,点击左侧边栏中的 账户管理,进入 实例 选项卡,验证我们的实例状态是否为 正在积极监控。监控方式 栏将显示 无代理,因为我们使用的是基于 EBS 的 EC2 实例。
-
在左侧边栏中,展开 发现,然后点击 所有发现。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_10.jpg
图 8.10 – Inspector 的发现菜单
由于我们使用的是刚刚启动的 EC2 实例,并且是 Amazon Linux,我们不会看到太多发现,但我们应该会看到一个 严重性 为 中等 的发现,内容为 端口 22 可通过互联网网关访问 –TCP。
我们在本节中快速探索了如何查看 Inspector 发现。接下来,我们将在本节的 更多内容… 部分中查看 Inspector 仪表板中提供的更多选项。
它是如何工作的…
Amazon Inspector 对 EC2 的扫描会从实例中提取元数据,并将其与安全建议进行比较,以生成发现,重点关注软件包漏洞和网络可达性问题。网络可达性扫描每 24 小时进行一次,而软件包漏洞扫描的频率则根据扫描方式有所不同。Amazon Inspector 根据账户的扫描模式设置,采用基于代理和无代理的扫描方式来收集软件清单并检测漏洞。
基于代理的扫描使用 SSM 代理从符合条件的实例中持续收集软件清单。这些扫描在 Linux 实例中识别操作系统和应用程序编程语言包的漏洞。要执行基于代理的扫描,实例必须具有受支持的操作系统,由 SSM 管理,并且不被特定标签排除。Amazon Inspector 使用各种 SSM 关联和插件定期收集清单数据并更新漏洞发现。此外,无代理扫描作为混合扫描模式的一部分,利用 EBS 快照从实例中收集清单数据,扫描操作系统和应用程序包漏洞。
Amazon Inspector 提供两种扫描模式:基于代理的扫描和混合扫描。基于代理的模式为 SSM 管理的实例提供持续扫描,而混合扫描结合了两种方法,对于 SSM 管理的实例使用基于代理的扫描,对于符合条件的 EBS 支持的实例使用无代理扫描。用户可以配置扫描模式,管理排除项,并确保适当设置 SSM 代理以优化漏洞检测,并保持对其 EC2 实例的有效安全监控。
还有更多…
我们在这个示例中探讨了 EC2 实例如何进行扫描。Amazon Inspector 还支持对以下资源进行扫描:
-
Amazon 弹性容器注册表(ECR):Amazon Inspector 扫描存储在 Amazon ECR 中的容器映像以查找漏洞。这确保您环境中使用的容器映像是安全的且没有已知问题。
-
AWS Lambda:Amazon Inspector 扫描 AWS Lambda 函数以查找漏洞,检查代码和依赖项以确保无服务器应用程序保持安全。
在这个示例中,我们在左侧边栏中探索了发现选项以查看发现。左侧边栏还提供了其他几个选项,包括以下内容:
-
导出 SBOMs:软件材料清单(SBOM)提供了系统内软件组件及其关系的详细列表。Amazon Inspector 可以生成和导出 SBOMs,这有助于理解和管理软件依赖关系,确保符合安全政策,并识别潜在漏洞。这有助于组织维护其软件组件的全面清单。
-
抑制规则:Amazon Inspector 中的抑制规则允许用户通过抑制特定类型或来源的发现来管理发现。这有助于减少噪音并专注于关键漏洞。用户可以根据漏洞 ID、资源标签或资源类型等标准创建抑制规则,以确保安全报告中只突出显示相关的发现。
-
按需扫描:按需扫描允许用户根据需要手动启动扫描,以检测 EC2 实例的漏洞或网络可达性问题。这在部署新软件或进行重大基础设施变更后特别有用。在 按需扫描 菜单下,使用 CIS 扫描 选项,我们可以评估 EC2 实例是否符合 互联网安全中心(CIS)基准,CIS 基准是保护 IT 系统和数据的最佳实践。这些扫描帮助组织遵循安全标准,并通过识别和解决不符合标准的配置,提升安全防护水平。
关于 Inspector Classic 的说明
Inspector 仪表板当前有一个名为 切换到 Inspector Classic 的侧边栏链接。Inspector Classic 是 Amazon Inspector 的原始版本,旨在帮助 AWS 用户通过检查漏洞和合规性问题来自动化应用程序的安全评估。尽管 Inspector Classic 最初至关重要,但它已在很大程度上被新的 Amazon Inspector 所取代,后者提供了增强的功能,并对安全评估提供了更全面、简化的方法。
Inspector Classic 仍然可供已有依赖关系的用户使用,但建议过渡到新的 Amazon Inspector,以便获取最新功能、提高性能和增强的安全能力。AWS 继续支持 Inspector Classic 以保持向后兼容性,但新用户和评估应该使用更新版的 Amazon Inspector 以实现最佳的安全管理。对于有兴趣使用 Inspector Classic 的用户,请参阅本书的第一版或在 另见 部分 提供的链接。
另见
-
你可以阅读更多关于 Amazon Inspector 的内容,访问
www.cloudericks.com/blog/a-deep-dive-into-amazon-inspector-capabilities-and-integrations。 -
阅读有关 Inspector Classic 的内容,请访问
www.cloudericks.com/blog/understanding-inspector-classic-and-transitioning-to-the-new-amazon-inspector。
设置和使用 AWS Security Hub
在本教程中,我们将探讨如何设置和使用 AWS Security Hub。Security Hub 聚合了来自 Config、GuardDuty、Macie 和 Inspector 等服务的发现,提供了一个集中平台来管理安全警报和自动化合规性检查。Security Hub 可以使用 CIS AWS 基础基准进行自动化合规性检查,在启用 Security Hub 时默认启用此功能。
准备工作
我们需要以下内容才能成功完成本教程:
-
如 技术 要求 部分所述,提供一个有效的 AWS 账户和用户。
-
按照 设置和使用 AWS Config 教程中的说明,设置 AWS Config 并启用记录功能,详见 第七章。
-
设置以下一个或多个服务:Amazon GuardDuty、Amazon Macie 和 Amazon Inspector,按照第七章 和 第八章 中的相应方法进行操作。
如何操作…
我们可以按照以下方式在一个区域内设置 Security Hub:
-
进入 AWS 管理控制台中的
Security Hub服务。 -
如果我们是第一次使用 Security Hub,应该会看到一个开始使用 Security Hub的部分。点击前往 Security Hub。在启用 AWS Config部分,我们应该看到一条消息,提示需要启用 AWS Config 并进行记录,可能还会提供相应步骤。我假设你已经按照准备工作部分中的内容完成了这些步骤。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_11.jpg
图 8.11 – 启用 Security Hub 时的启用 AWS Config 消息
- 在安全标准部分,从可用选项中选择我们要启用的安全标准,如图 8.12所示。在委托管理员部分,我们可以添加一个委托管理员账户来管理该组织的 Security Hub。最后,点击启用Security Hub。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_12.jpg
图 8.12 – 在启用 Security Hub 时设置安全标准
我们应该看到一个包含摘要、安全标准、见解等部分的界面。发现的更新可能需要一些时间。所以,在进行后续步骤之前,请稍等片刻。
-
点击左侧边栏中的安全标准。如果我们是从步骤 2继续操作,针对
AWS Foundational Security Best Practices v1.0.0和CIS AWS Foundations Benchmark v1.2.0标准,我们应该能看到查看结果和禁用标准选项。对于未启用的其他标准,我们应该看到启用标准选项。如果我们没有从步骤 2继续操作,我们应该使用启用标准选项启用AWS Foundational Security Best Practices v1.0.0和CIS AWS Foundations Benchmark v1.2.0标准,并稍等片刻,直到看到每个标准的安全得分。 -
一旦
AWS Foundational Security Best Practices v1.0.0的安全得分可用,点击查看结果。我们应该看到安全得分和失败的控制项值,如下所示,但具体细节可能因账户而异。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_13.jpg
图 8.13 – 查看安全标准的结果
- 点击左侧边栏中的见解。我们应该看到一个现有见解的列表,这些是已保存的过滤器,显示相关的发现。我们可以选择其中一个现有的见解,或通过点击创建见解按钮来创建一个新的见解。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_14.jpg
图 8.14 – 见解
- 从左侧边栏点击发现,进入发现页面。在这里,您可以查看来自各种服务集成的发现列表。您可以根据多个标准过滤此列表,例如生成发现的服务或发现的严重性。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_15.jpg
图 8.15 – 发现
- 从左侧边栏点击集成,进入集成页面,在这里我们可以看到当前启用的集成列表以及尚未启用的集成。对于已启用的集成,我们可以在集成页面禁用它们。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_16.jpg
图 8.16 – 集成
-
从左侧边栏点击使用情况,查看估算的使用情况和定价,包括试用期间的使用情况。
-
从左侧边栏进入配置。
-
如果未启用中央配置,我们将看到一个链接开始中央配置,并显示以下警告信息:本地配置仅限于新帐户,您对组织的安全设置的访问有限。如需更多配置选项,请切换到中央配置。切换后,配置策略将替代新组织帐户的有限配置设置。我们建议使用中央配置进行帐户管理**。
-
在配置页面的帐户部分,我们可以添加额外的成员帐户,与此帐户共享其发现。邀请将发送给成员帐户,他们必须接受邀请。
-
从左侧边栏点击自定义操作,将选定的洞察和发现发送到 Amazon EventBridge。
-
从左侧边栏点击自动化,根据我们定义的标准更新安全中心发现。
-
从左侧边栏点击地区,查看多个地区的发现。要开始汇总发现,点击配置发现汇总按钮,设置汇总地区,然后将其他地区链接到该地区,以便统一查看安全发现。
我们还可以通过点击左侧边栏的常规,然后点击禁用 AWS 安全中心来禁用安全中心。但是,如果适用的费用不是限制因素,始终建议为所有地区启用安全中心。
它是如何工作的……
AWS 安全中心作为 AWS 环境中安全监控和管理的集中平台。要开始使用,请在 AWS 管理控制台中激活该服务。启用后,配置安全中心以从多个 AWS 服务(如 Amazon GuardDuty、AWS Inspector 和 Amazon Macie)收集发现,以及第三方工具和自定义集成。
该服务为安全问题提供持续监控,在统一的仪表板上收集和组织发现。它根据问题的严重性和影响优先排序,帮助用户首先解决最关键的问题。在 Security Hub 控制台中,用户可以调查这些发现,以深入了解潜在的安全威胁和漏洞。此外,Security Hub 还通过与 AWS Lambda 集成支持自动响应,允许用户对检测到的安全问题自动执行修复措施。
总结来说,AWS Security Hub 提供了一个全面的解决方案,用于管理安全态势、合规性和事件响应,从而简化了安全操作并增强了 AWS 环境中的整体保护。
还有更多……
让我们快速浏览一下与 Security Hub 及其相关服务相关的一些重要概念:
-
Security Hub 是一个区域性服务。如果成本不是问题,建议在所有区域启用它。
-
Security Hub 可以与第三方安全工具集成,如 Alert Logic、Armor、Atlassian Opsgenie 等。
-
我们可以从 发现 页面归档安全发现,以便旧的发现不会出现在页面上。
-
CIS 为不同的服务器、应用程序和云提供商提供安全标准。例如,它们为 AWS 安全提供了一套特定的安全标准。
-
AWS 的 CIS 基准可以分为四类:身份与访问管理、日志记录、监控和网络。
-
IAM 访问分析器使用基于逻辑的推理分析我们 AWS 环境中的基于资源的策略,以告知我们账户中的哪些资源与外部主体共享。
-
AWS 防火墙管理器可用于跨账户和应用程序管理防火墙规则。
学习和理解 AWS 的 CIS 安全基准控制,可以在处理 AWS 基础设施时为我们提供更强的安全感。这些控制措施还可以帮助我们在工作中做出更好的决策,甚至在考试时也能有所帮助。
另见
-
了解更多关于 AWS Security Hub 的信息,请访问
www.cloudericks.com/blog/getting-started-with-aws-security-hub。 -
你可以在
docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards.html查找 Security Hub 支持的 CIS 安全标准列表。
使用 IAM 访问分析器检查未使用的访问权限
在本示例中,我们将展示如何利用 IAM 访问分析器来识别和管理环境中未使用的 IAM 资源。通过重点检测未使用的角色、访问密钥和其他关键组件,确保遵循安全最佳实践。通过配置分析器扫描未使用的资源,并解释其生成的结果,我们可以获得潜在安全风险的有价值见解。通过处理任何识别出的未使用资源,我们降低了未授权访问或滥用的风险,从而增强了 IAM 环境的整体安全性。
准备工作
成功完成此示例所需的条件:
-
一个有效的 AWS 账户和一个用户,如技术要求部分所述。
-
我们需要在 AWS 账户中有一些 IAM 用户和角色;可以通过参考第一章 和 第二章中的示例来创建这些。
如何操作…
我们可以按如下方式使用 IAM 分析器检查未使用的访问权限:
-
导航到控制台中的
IAM服务。 -
在访问报告下,点击访问分析器。
-
点击创建分析器。
-
在分析部分,我们可以看到外部访问分析和未使用的访问分析选项。选择未使用的访问分析选项。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_08_17.jpg
图 8.17 – 配置结果类型
-
在分析器详情部分,保持自动生成的名称不变。对于信任区,选择当前组织。
-
向下滚动并点击创建分析器。等待一段时间,直到结果被加载出来。
-
在左侧边栏点击访问分析器,以查看包含结果摘要的结果概览页面。
-
点击左侧边栏中的未使用的访问权限。我们应该看到与未使用访问权限相关的结果。
它是如何工作的…
使用 IAM 分析器检查未使用的访问权限,方法是将其作为安全扫描器来检查 IAM 资源。它分析整个环境中的角色、访问密钥和权限。通过检查这些资源最近是否被使用,它能够识别在特定期间内未被激活的元素。这可能表明不必要的访问权限或被遗忘的配置,可能会导致安全漏洞。通过这些见解,你可以加强访问控制并改善 IAM 环境的安全性。
还有更多内容…
尽管识别未使用的资源是一项有价值的功能,但 IAM 分析器还提供了更广泛的功能,帮助增强你的 IAM 安全性。
-
验证权限:IAM 分析器可以根据最佳实践验证策略,并识别可能授予无意访问权限的过度宽松设置。
-
监控外部共享:跟踪与 AWS 账户外部实体共享的资源。这有助于识别与无意访问权限相关的潜在安全风险,可能是外部用户或应用程序的权限。
-
自定义策略检查:定义你自己的安全标准,并利用 IAM 分析器根据这些自定义检查验证 IAM 策略。这使你能够在组织内强制执行特定的安全要求。
-
自动化策略生成:通过利用 IAM 分析器根据 CloudTrail 中的访问活动日志生成 IAM 策略,简化策略创建过程。这有助于确保策略反映实际的使用模式。
-
持续监控:IAM 分析器不是一次性的扫描工具;它提供对你的 IAM 环境的持续监控。这允许你在 IAM 配置变化时主动识别潜在的安全问题。
设置 Amazon EventBridge 来监控我们从 Access Analyzer 获取的结果的步骤总结如下:
-
转到控制台中的
Amazon EventBridge服务。 -
在左侧边栏的总线下点击规则。
-
点击创建规则进入创建规则页面。
-
在定义规则详细信息页面,提供规则的名称和描述。保持事件总线为默认,并将规则类型设置为带有事件模式的规则,然后点击下一步。
-
在构建事件模式部分,向下滚动至事件模式。
-
将事件源设置为AWS 服务。
-
将AWS 服务设置为
Access Analyzer。 -
将事件类型设置为访问分析器查找。
-
将事件类型规格 1设置为按 ARN 的任何资源。
-
点击下一步。在目标下,从选择目标的下拉菜单中选择SNS 主题。
-
选择一个主题。你可以通过参考第七章中的创建 SNS 主题以发送电子邮件食谱来创建 SNS 主题。
-
点击下一步。
-
可选,点击添加新标签,然后点击下一步。
-
审核规则后点击创建规则。
另见
阅读有关确保 IAM 安全的必要工具,详情请见www.cloudericks.com/blog/essential-tools-to-secure-iam。
第九章:高级身份与目录管理
在前几章中,我们已经为IAM 身份中心(前称AWS SSO)、IAM 用户、IAM 组、IAM 角色和 IAM 策略在身份与访问管理方面打下了基础,现在我们将深入探讨用户身份和目录管理的更高级内容。
我们将首先深入探讨在 AWS 中使用Amazon Cognito进行无服务器身份即服务的用户管理策略。本章将重点介绍 Cognito 的两个关键功能:用户池和身份池。用户池充当强大且可扩展的目录,处理用户注册、身份验证和与我们的应用程序集成,并具备多因素身份验证(MFA)和联合身份登录等功能。相反,身份池为经过身份验证的用户分配临时的 AWS 凭证,允许他们使用 AWS 服务,如 Amazon S3、Amazon DynamoDB 和 AWS Lambda。
接下来,我们将深入探讨 AWS 中的目录服务解决方案,包括 AWS Simple AD、AWS Active Directory 和 AD Connect。我们还将研究Microsoft Entra ID(之前称为Azure Active Directory)与 IAM 身份中心的集成,这使得 Entra ID 用户能够轻松访问 AWS 资源。
重要说明
本章的教程可能需要一些额外的知识,包括熟悉 Microsoft 产品(如 Active Directory 和 Microsoft Entra ID),以及本书尚未覆盖的 AWS 服务和功能。本章的教程并非理解和实践本书后续教程的必需内容。因此,如果你在阅读本书时缺乏对所需产品或服务的了解,并且目前不需要这些解决方案,可以仅阅读教程步骤以了解内容,直到需要时再进行实践,并确保你具备所需的先决知识。你也可以通过教程中提供的链接,学习到足够的所需产品和服务知识。
本章包含以下教程:
-
使用 Amazon Cognito 用户池
-
使用身份池访问 AWS 资源
-
使用 AWS Simple AD 创建轻量级目录解决方案
-
在 AWS 中使用 Microsoft Entra ID 作为身份提供者
技术要求
在开始本章的教程之前,我们需要确保具备以下要求和知识:
-
我们需要一个有效的 AWS 账户来完成本章中的食谱。如果我们使用 AWS Organizations,可以使用组织的管理账户,因为本章中将会在 AWS 组织层级配置许多内容。我将使用在第一章的使用 AWS Organizations 进行多账户管理食谱中创建的
aws-sec-cookbook-1账户。 -
对于管理操作,我们需要具有
AdministratorAccess权限的用户,以访问我们正在使用的 AWS 账户。
本书的代码文件可在 github.com/PacktPublishing/AWS-Security-Cookbook-Second-Edition 获得。本章的代码文件可在 github.com/PacktPublishing/AWS-Security-Cookbook-Second-Edition/tree/main/Chapter09 获得。
与 Amazon Cognito 用户池合作
Amazon Cognito 主要用于两种使用场景:通过其用户池功能为我们的应用程序提供安全的用户身份管理,以及通过其身份池功能利用临时凭证提供对 AWS 资源的安全访问。在本食谱中,我们将通过从 AWS 管理控制台创建用户池并在其中创建用户来探索 Amazon Cognito 的用户池功能。
准备就绪
若要完成此食谱,我们需要 Amazon Simple Notification Service(SNS)以便在我们计划使用 SMS 验证时发送 SMS。
重要提示
当我们开始使用 Amazon SNS 发送 SMS 消息时,我们的 AWS 账户会在 SMS 沙箱中操作。此沙箱作为一个安全空间,允许我们测试 Amazon SNS 功能而不会影响我们的发送者声誉。在沙箱中,我们只能向经过验证的目标电话号码发送 SMS 消息。
如果我们的 AWS 账户位于 SMS 沙箱中,并且我们希望在此食谱中使用 SMS 验证,可以按照以下步骤将电话号码添加到沙箱目标电话号码中:
-
登录到 AWS 管理控制台并导航到 Amazon SNS 服务。
-
点击左侧边栏中的文本消息(SMS)。
-
在账户信息下确认该账户位于 SMS 沙箱中。
-
在沙箱目标电话号码部分,点击添加电话号码。
-
在添加电话号码页面,输入电话号码,并选择正确的国家代码。同时,选择验证消息的语言,即将要发送的验证消息语言。
-
点击添加电话号码。这将带我们进入验证电话号码页面。
-
在验证电话号码页面,输入收到的验证码并点击验证电话号码。
如果成功验证,手机号码现在应该会显示在短信(SMS)页面的沙箱目标电话号码部分,并且验证状态应显示为已验证。
我们可以通过本食谱中另见部分提供的链接进一步探索 Amazon SNS。假设我们已经按照本节中的讨论设置好环境,现在可以开始创建 Cognito 用户池。
如何操作…
我们可以通过以下方式在 AWS 管理控制台中创建一个 Cognito 用户池:
- 登录到 AWS 账户管理控制台并导航到 Cognito 服务。我们应该看到根据业务案例开始的选项。默认选项是将用户目录添加到您的应用程序,这是通过用户池完成的。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_1.jpg
图 9.1 – 创建用户池业务案例
下拉菜单还包括授予访问 AWS 服务权限选项,适用于使用身份池的业务案例。
-
选择将用户目录添加到您的应用程序的业务案例,如图 9.1所示,并点击创建用户池。我们也可以通过点击左侧边栏的用户池菜单选项,进入用户池页面来创建用户池。
-
在提供商类型下,只选择Cognito 用户池(这是默认选项)。在Cognito 用户池登录选项下,选择用户名、电子邮件和电话号码。保持其他选项不变,点击下一步。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_2.jpg
图 9.2 – 配置身份验证提供商
-
在配置安全要求页面,将密码策略模式设置为Cognito 默认(这是默认选项)。
-
对于多重身份验证,选择需要 MFA - 推荐,然后选择身份验证器应用程序。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_3.jpg
图 9.3 – 在用户池创建期间配置 MFA 设置
- 在用户账户恢复部分,选择启用自助账户恢复 - 推荐。在用户账户恢复消息的传递方式下,选择仅通过电子邮件。然后点击下一步。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_4.jpg
图 9.4 – 在用户池创建期间配置用户账户恢复设置
- 在配置注册体验页面,选择启用自助注册,允许 Cognito 自动发送消息以验证和确认 - 推荐,并选择发送电子邮件消息,验证电子邮件地址。保持其他值不变,点击下一步。
重要提示
启用用户池中的用户注册功能允许来自互联网上任何地方的个人注册账户并登录到我们的应用程序。在我们准备好允许公众注册访问应用程序之前,需要避免启用该功能。我们还可以通过在注册体验页面中集成最多 50 个自定义属性来个性化注册体验。然而,重要的是要注意,一旦用户池建立,这些自定义属性的名称将无法修改。
- 在配置消息传递页面,选择使用 Cognito 发送电子邮件。
重要提示
我们可以初步使用 Cognito 的默认电子邮件地址进行开发,该地址每天最多支持发送 50 封电子邮件。如果我们已经通过 Amazon SES 建立了一个已验证的发件人,并希望使用其功能,则应选择使用 Amazon SES 发送电子邮件 - 推荐选项,并输入必要的 SES 详细信息。
- 在短信设置中,提供
SecCbCognitoUserPoolRole作为IAM 角色名称。保持其他设置不变,然后点击下一步。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_5.jpg
图 9.5 – 用户池创建期间的短信设置
重要提示
如果我们的 AWS 账户当前处于 SMS 沙盒环境中,我们必须将计划用于 SMS 验证的任何电话号码添加并验证到沙盒的已验证目标电话号码列表中,具体内容请参见本食谱中的准备工作部分。如果我们的账户不在沙盒中,我们需要按照 Amazon 在屏幕上提供的说明配置 SMS 消息服务,如图 9.5所示。请注意,设置 SMS 消息服务的详细过程超出了本书的范围。
- 在集成应用程序页面,选择
SecCbUserPool下的用户池名称,然后选择使用 Cognito 托管 UI。在域名部分,选择使用 Cognito 域名并输入一个唯一的域名前缀。
重要提示
我们还可以输入自己拥有的自定义域名,用于 Cognito 托管的注册和登录页面。要使用自定义域名,提供 DNS 记录和来自AWS 证书管理器(ACM)的证书是先决条件。对于生产工作负载,AWS 推荐使用自定义域名,以提升专业性和品牌形象。
- 在初始应用客户端部分,提供
Sec Cb App作为应用客户端名称。在客户端密钥下,选择生成客户端密钥,对于允许的回调 URL,提供一个身份验证后重定向的 URL,例如www.cloudericks.com。点击下一步。
重要提示
客户端密钥作为应用程序服务器端身份验证 API 请求的一种方式,提供了一层安全性,帮助防止第三方冒充您的客户端。需要注意的是,一旦 Amazon Cognito 为您的应用客户端生成了客户端密钥,便无法修改或删除。
-
审查所有细节并点击创建用户池。现在我们应该能在用户池页面上看到我们的新用户池。
-
从用户池页面,点击我们创建的用户池的超链接名称,访问其设置页面。设置页面应包含用户池概览部分以及删除用户池按钮,如下图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_6.jpg
图 9.6 – 用户池概览页面
- 向下滚动并导航到用户选项卡,这是第一个选项卡。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_7.jpg
图 9.7 – 用户池的用户选项卡
-
点击创建用户。
-
在创建用户页面,选择电子邮件和电话作为用于登录的别名属性。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_8.jpg
图 9.8 – 配置用于登录的别名属性
- 选择不发送邀请作为邀请信息选项。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_9.jpg
图 9.9 – 配置邀请信息
- 提供用户名、电子邮件地址、电话号码和临时密码,然后点击创建用户。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_10.jpg
图 9.10 – 新用户配置
新用户应该出现在用户选项卡中,如下图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_11.jpg
图 9.11 – 包含新用户的用户选项卡
-
从用户池的设置页面,导航到应用集成标签并点击初始应用客户端的超链接应用客户端名称,该客户端是在本教程中创建的。现在我们应该能看到我们应用的设置页面。
-
在应用程序设置页面的托管 UI部分,点击查看托管 UI。现在我们应该能看到默认的托管 UI 登录页面,如下所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_12.jpg
图 9.12 – 托管 UI 登录页面
-
输入我们在本教程中创建的用户的用户名和密码,然后点击登录。我们将进入更改密码屏幕。
-
在更改密码屏幕中,在带有新密码和再次输入新密码标签的复选框下输入新密码,然后点击发送。这将会向创建用户时提供的电话号码发送一个一次性密码(OTP),并要求我们输入该密码以进行验证,如下图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_13.jpg
图 9.13 – 短信验证
一旦验证成功,我们将被重定向到配置的 URL。如果您在跟随教程并提供了www.cloudericks.com URL,您应该看到一个类似于以下的页面:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_14.jpg
图 9.14 – 登录后页面
在本食谱中,我们创建了一个用户池,并通过 AWS 管理控制台创建了一个用户。或者,用户也可以通过托管 UI 的注册选项自行注册。对于登录和注册体验的自定义,以及配置 用户组、消息传递、应用集成 和 用户池 属性,可以通过用户池的设置页面进入相应的标签页进行操作,如 图 9 .7 所示。
它是如何工作的…
Amazon Cognito 提供了两项主要功能:用户池和身份池。用户池作为安全目录,处理应用用户的注册和登录操作,而身份池则是向认证用户颁发 AWS 凭证的机制,允许访问 AWS 服务。在本食谱中,我们创建了一个用户池。
对于用户池的登录选项,我们选择了 用户名、电子邮件 和 电话号码。我们可以将电子邮件或电话号码作为用户名,并使用它们代替用户名进行登录。为了增强安全性,我们还选择了多因素认证(MFA)并指定了账户恢复机制。为了提供更好的注册体验,我们启用了自助注册,并配置了自动消息验证。
我们使用了 Cognito 域 选项来托管 Cognito 的注册和登录页面,以简化操作。我们也可以使用自己拥有的自定义域。要使用自定义域,必须提供 DNS 记录和来自 ACM 的证书。对于生产工作负载,AWS 推荐使用自定义域,以增强专业性和品牌形象。
在我们的过程中没有设置自定义属性。不过,可以通过引入最多 50 个自定义属性来定制注册体验。一旦用户池建立,必须记住这些自定义属性的名称会变得固定,无法更改。然而,我们可以稍后添加新的属性。
在这个过程中还创建了一个初始的应用客户端,采用了默认设置。Amazon Cognito 客户端应用通过认证用户,并与 Amazon Cognito 交换令牌来获取临时 AWS 凭证。这些临时 AWS 凭证可以用来访问 AWS 资源。
Cognito 中的客户端应用可以分为三类:
-
公共客户端:通常是客户端应用程序,比如移动设备上的原生应用或基于浏览器的应用。在这种情况下,应用程序会从不能被信任存储客户端密钥的设备上发起 API 请求,因为这些设备可能会暴露密钥。
-
机密客户端:通常是服务器端应用程序,能够安全存储客户端密钥。API 请求会通过中央服务器路由,该服务器被认为是安全的,能够保护这些敏感信息。
-
自定义应用:此选项允许进行更为个性化的设置。您可以根据独特的需求和安全考虑,定义特定的授权类型、身份验证流程,以及是否需要客户端密钥。
我们将在下一节中探讨更多细节,包括替代的业务案例。
还有更多内容…
在此方案中,我们通过选择将用户目录添加到您的应用业务案例创建了一个 Amazon Cognito 用户池,如图 9.1所示。我们也可以从下拉菜单中选择授予访问 AWS 服务权限业务案例来创建身份池,如下图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_15.jpg
图 9.15 – 创建身份池业务案例
在此方案中,提供者类型下,我们仅选择了 Cognito 用户池(这是默认选项),如图 9.2所示。如该图所示,Cognito 用户池选项默认被选中且无法取消,此外我们还可以选择一个名为联合身份提供者的选项。如果我们选择联合身份提供者选项,将获得额外的登录选项,允许我们使用来自流行社交身份提供者(如 Facebook、Google、Amazon 和 Apple)的凭证,或通过 SAML 或Open ID Connect(OIDC)协议从外部目录获取凭证,如下图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_16.jpg
图 9.16 – 用户池的联合登录选项
选择Cognito 用户池选项是强制性的,因为它在我们的用户池中为直接用户和联合用户维护用户档案。然而,如果我们的目标是仅提供联合登录选项,我们可以在用户池中关闭自注册功能,从而强制要求只有管理员才有权限创建用户档案。此外,如果我们希望限制通过用户池进行的登录,可以取消选择用户池作为应用客户端中的身份提供者(IdP)。
我们还可以将 Amazon Cognito 与Amazon Verified Permissions集成,后者是一个精细化的授权服务,旨在强制执行基于角色和属性的访问控制,适用于使用 Amazon Cognito 进行身份验证的应用程序。Verified Permissions 根据用户的身份或访问令牌,评估其属性与特定资源的访问规则,并做出授权决策——要么授权访问,要么拒绝访问。此服务允许将所有应用程序和资源的授权集中到一个策略存储中。策略是用Cedar语言编写的,Cedar 是一种专门设计用于制定访问控制协议的开源语言。
在本配方中,我们通过控制台创建了一个用户池。我们也可以使用 aws cognito-idp create-user-pool CLI 命令创建一个用户池,传递 pool-name 和 region。尽管我们可以直接通过命令行指定所有用户池设置并参考文档,但使用包含所有配置的输入 JSON 文件是一种更简便和安全的方法。
另见
-
我们可以在
www.cloudericks.com/blog/getting-started-with-amazon-cognito阅读更多关于 Amazon Cognito 的内容。 -
我们可以在
www.cloudericks.com/blog/getting-started-with-amazon-sns-service阅读更多关于 Amazon SNS 服务的内容。 -
我们可以在
www.cloudericks.com/blog/getting-started-with-amazon-verified-permissions阅读更多关于 Amazon Verified Permissions 的内容。 -
我们可以在
www.cloudericks.com/blog/integrating-amazon-cognito-with-amazon-verified-permissions学习如何将 Amazon Cognito 与 Amazon Verified Permissions 集成。
使用身份池访问 AWS 资源
正如本章前面讨论的,Amazon Cognito 有两个主要的使用场景。虽然用户池帮助我们处理应用程序的身份和访问管理,身份池则扩展了这一功能,提供临时的 AWS 凭证,使我们能够安全地访问各种 AWS 服务,而无需长期密钥。在本配方中,我们将深入探讨身份池的使用,以有效地访问 AWS 资源。让我们深入了解身份池领域,利用其能力将身份池融入到我们的应用程序中,确保安全且可扩展地访问 AWS 资源,利用临时 AWS 凭证。
准备工作
为了完成本配方,除了 技术要求 部分提到的要求外,我们还需要确保以下附加要求已经到位:
-
一个 Amazon Cognito 用户池:Amazon Cognito 用户池作为我们身份池的身份骨架。在本章前面的 与 Amazon Cognito 用户池 配方中,我们创建了一个用户池。
-
带有 ALLOW_USER_PASSWORD_AUTH 的应用客户端:我们需要设置一个配置了
ALLOW_USER_PASSWORD_AUTH流程的应用客户端。可以通过在 AWS 管理控制台中导航到用户池设置,选择 应用集成 标签,并创建一个应用客户端来实现。或者,我们可以在初始应用客户端设置过程中包含身份验证流程,如 与 Amazon Cognito 用户池 配方中所述。 -
Amazon S3 存储桶:我们需要一个具有默认选项的 S3 存储桶,正如在第二章的技术要求部分中讨论的那样,用于展示用户池。我将使用一个存储桶名称
myawsbucket,位于us-east-1区域。S3 存储桶名称必须是全球唯一的;选择一个可用名称,并将我的存储桶名称替换为你选择的存储桶名称。
接下来,我们将看到如何实现 Cognito 身份池。
如何操作…
我们可以使用身份池有效地访问 AWS 资源,如下所示:
- 在 AWS 控制台中导航到
Amazon Cognito服务,搜索我们创建的 Cognito 用户池。进入用户标签,点击创建用户按钮。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_17.jpg
图 9.17 – 创建用户选项
- 提供用户资料详情:将用户名设置为
testuser,将电子邮件地址设置为 testuser@cloudericks.com。对于临时密码,选择设置密码选项,输入一个安全密码,最后点击创建用户。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_18.jpg
图 9.18 – 创建用户的详细信息
重要说明
为了避免通过 AWS CLI 认证此用户时遇到 MFA 挑战,我们应该在创建 Cognito 用户池时,在配置安全要求设置中选择无 MFA选项。
-
在 AWS 管理控制台中,进入
AmazonCognito服务。 -
点击身份池,然后点击创建身份池。
-
通过选择已认证访问和Amazon Cognito 用户池,配置身份池中的已认证身份来源。点击下一步进入配置权限页面。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_19.jpg
图 9.19 – 配置认证提供者
- 在配置权限页面,选择创建新 IAM 角色,并通过指定角色名称为已认证用户设置 IAM 角色。我们可以使用
MY_IDP_AUTHROLE作为IAM 角色名称。点击下一步。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_20.jpg
图 9.20 – 选择已认证角色
- 输入用户池 ID和应用客户端 ID的值。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_21.jpg
图 9.21 – 用户池详情
保留其他值为默认值并点击下一步。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_22.jpg
图 9.22 – 访问控制的属性
- 为身份池命名,并点击下一步完成配置。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_23.jpg
图 9.23 – 最终配置页面
-
在审查并创建页面,审查所有内容并点击创建身份池。
-
我们应该看到一个提示,说明角色已成功创建;点击 查看角色。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_24.jpg
图 9.24 – 成功创建角色后的身份池提示
- 已认证用户的角色应具有访问 S3 存储桶的权限。确保授予
AmazonS3ReadonlyAccess操作的访问权限。点击 添加权限 下拉菜单,选择 添加策略。搜索AmazonS3ReadonlyAccess策略,选择它并点击 添加权限。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_25.jpg
图 9.25 – 权限策略
-
要在用户池中验证用户,我们可以使用
Amazon Cognito Identity SDK或直接使用 AWS CLI 的cognito-idp命令。为此,进入 AWS CloudShell,并通过提供我们要验证的用户的<username>、<username>、<client-id>和<region>运行以下命令:aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=<username>,PASSWORD=<password> --client-id <client-id> --region <region>我们应该得到一个挑战响应,要求我们提供一个新密码。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_26.jpg
图 9.26 – 挑战响应,要求我们提供一个新密码
-
我们需要通过以下命令响应挑战,给用户设置一个新密码,提供
user-pool-id、user-pool-id、user-pool-id、user-pool-id、session和region。其中 session 应该是我们在前一条命令中收到的:aws cognito-idp admin-respond-to-auth-challenge --user-pool-id <user-pool-id> --client-id <client-id> --challenge-name NEW_PASSWORD_REQUIRED --challenge-responses NEW_PASSWORD=<new-password>,USERNAME=<username> --session <session> --region <region>我们应该看到一个界面,显示
RefreshToken和IdToken。我们应该看到如下界面,并注意记录IdToken的值。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_27.jpg
图 9.27 – 密码更改后的响应
-
要获取
IdentityId,请运行以下命令,提供我们之前创建的身份池的<identity-pool-id>、<region>和<user-pool-id>,以及我们从前一步获得的<id-token>:aws cognito-identity get-id --identity-pool-id <identity-pool-id> --logins "cognito-idp.<region>.amazonaws.com/<user-pool-id>=<id-token>" --region <region>我们应该看到一个界面,显示出
IdentityId。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_28.jpg
图 9.28 – get-id 命令的响应
-
使用从前一步骤获得的
IdentityId来获取临时 AWS 凭证:aws cognito-identity get-credentials-for-identity --identity-id <identity-id> --logins "cognito-idp.<region>.amazonaws.com/<user-pool-id>=<id-token>" --region <region>此命令将返回临时的 AWS 访问密钥和秘密密钥,以及一个会话令牌。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_29.jpg
图 9.29 – get-credentials-for-identity 命令的响应
-
使用前一步骤中获得的临时凭证配置 AWS CLI。
aws configure set aws_access_key_id <access-key> aws configure set aws_secret_access_key <secret-key> aws configure set aws_session_token <session-token>这些命令不会返回任何响应,如下所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_30.jpg
图 9.30 – 配置 AWS CLI
- 我们现在可以使用 AWS CLI,通过
aws s3ls命令列出我们的 S3 存储桶。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_31.jpg
图 9.31 – 对 s3 ls 命令的响应
- 导航回我们的身份池,然后点击用户统计。我们应该看到我们已经通过身份池成功进行了身份验证。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_32.jpg
图 9.32 – 用户统计
在这个示例中,我们使用身份池来访问 AWS 资源。
工作原理…
要使用 Amazon Cognito 用户池作为 IdP 并通过 AWS CLI 列出 S3 存储桶,我们首先创建了一个用户池和其中的一个用户。然后,我们设置了一个身份池,定义了 IAM 角色,并为经过身份验证的用户配置了权限,包括列出 S3 存储桶。
接下来,我们通过 AWS CLI 的cognito-idp命令获取了一个 ID 令牌,启动了身份验证,并从身份池获取了一个 ID。通过获取的 ID,我们检索了临时 AWS 凭证。配置 AWS CLI 后,我们使用它来列出我们的 S3 存储桶。
该过程通过基于身份的身份验证,允许安全且受控制的访问 S3 资源,确保用户被授权在 S3 服务上执行特定操作。
还有更多…
让我们进一步了解一些与 Amazon Cognito 相关的概念,这将有助于我们进一步理解该服务:
-
社交身份提供者:Cognito 用户池和身份池都可以配置为允许用户使用社交身份提供者(如 Facebook、Google 或 Amazon)进行登录。这扩展了我们应用程序的身份验证选项,并为希望使用其现有社交媒体帐户登录的用户提供了无缝的登录体验。
-
MFA:我们可以在 Cognito 用户池和身份池中启用 MFA 以增强安全性。使用 MFA,用户需要提供额外的身份验证因子,例如来自移动应用或短信的一次性代码,除了他们的密码。这显著增强了用户身份验证的安全性。 -
自定义身份验证挑战:Cognito 用户池允许我们设置自定义身份验证挑战。这对于需要用户在身份验证过程中完成特定任务或提供额外信息的场景非常有用。我们可以根据应用程序的要求自定义挑战流程。
深入探讨 Amazon Cognito 的每个功能需要一本专著。因此,在本示例和上一示例的“参见”部分提供了额外的链接,以便您进一步探索。
另请参阅
-
我们可以在Amazon Cognito 与联合身份提供者使用了解联合身份提供者的使用方法。
-
阅读更多关于如何使用 AWS Cognito 日志进行安全事件故障排除的内容,访问
www.cloudericks.com/blog/troubleshooting-security-incidents-using-aws-cognito-logs。
使用 AWS Simple AD 创建轻量级目录解决方案
AWS Simple AD,由一个兼容 Samba 4 Active Directory 的服务器提供支持,是由 AWS 提供的轻量级独立托管目录服务,特别适合中小型企业,满足其对目录服务的需求,同时避免了管理本地基础设施的复杂性。该服务有两个选项,Small 选项适用于最多 500 个用户(或大约 2,000 个对象,包括用户、组和计算机)的环境,而 Large 选项适用于最多 5,000 个用户(或大约 20,000 个对象)的环境。
Simple AD 提供了基本服务,如用户帐户管理、组成员管理、组策略应用、Amazon EC2 实例的安全连接以及基于 Kerberos 的 单点登录(SSO)功能。它兼容依赖 Microsoft Active Directory 的多种应用程序和工具,方便用户访问 AWS 应用程序,如 WorkSpaces、Amazon WorkDocs 和 Amazon WorkMail。然而,Simple AD 不支持某些服务,包括 Amazon AppStream 2.0、Amazon Chime 或 Amazon RDS for SQL Server 和 Oracle。
准备工作
为了成功完成此操作,我们需要以下内容:
-
一个有效的 AWS 账户和用户,具体描述见 技术 要求 部分。
-
配置一个至少包含两个子网并跨多个可用区的 VPC,遵循 第五章 中的 Setting up VPC plus VPC resources with minimal effort 配方。
如何操作…
我们将使用以下步骤:
- 登录到 AWS 管理控制台并进入
Directory Service。我们应该会看到如下屏幕。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_33.jpg
图 9.33 – 设置目录屏幕
- 从下拉菜单中选择
Simple AD,如 图 9.34 所示,然后点击 图 9.33 中显示的Set up directory按钮。点击Next。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_34.jpg
图 9.34 – 设置目录的下拉菜单
-
在
Select directory type页面,确保选择了Simple AD,然后点击Next。 -
在
Enter directory information页面,选择Directory size下的Small。对于Directory DNS name,输入corp.cloudericks.com,对于Directory NetBIOS name - optional,输入CORP。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_35.jpg
图 9.35 – 配置 Simple AD
-
向下滚动并为 管理员密码 提供一个值,并在 确认密码 字段中确认密码。对于 目录描述 - 可选 ,提供 Cloudericks 企业目录 的描述,并点击 下一步。
-
对于
VPC,选择至少有两个子网的 VPC,如 准备工作 部分所述。在 子网 下选择两个公共子网并点击 下一步。 -
在 子网 下,选择域控制器的子网。确保它们位于不同的可用区,并点击 下一步。
-
在 审核与创建 页面,审核所有详细信息并点击 创建目录 。目录的状态将显示为 创建中,创建完成后会变为 活动。
它是如何工作的…
AWS Simple AD 提供一个托管的与 Active Directory 兼容的目录服务,为用户提供一个简单的解决方案,用于用户身份验证、组管理和域加入操作。用户可以通过 AWS 管理控制台或 CLI 轻松创建 Simple AD 目录,指定域详细信息和规模要求。
创建完成后,Simple AD 支持标准目录功能,如 LDAP 身份验证和基于 Kerberos 的单点登录(SSO),使组织能够高效地管理用户帐户和访问控制。此服务对于寻求成本效益且不想管理复杂基础设施的小型和中型企业尤其有利,它提供了一种简单、无忧的 Active Directory 解决方案。
AWS Simple AD 允许高效的用户和组管理,支持基于 Kerberos 的单点登录(SSO),实现无缝访问多个应用程序,并与各种 AWS 服务(如 Amazon EC2、RDS 和 WorkSpaces)集成。Simple AD 还支持 LDAP,使其适用于需要目录服务进行身份验证和信息检索的应用程序。
还有更多…
以下是我们使用 AWS Simple AD 的不同方式:
-
用户和组管理 :Simple AD 允许高效管理用户和组。您可以创建、修改和删除用户帐户,并将其组织到组中,便于访问控制和权限管理。
-
SSO:Simple AD 支持基于 Kerberos 的单点登录(SSO),使用户可以一次登录,便能访问多个应用程序和服务,无需重新输入凭证。 -
轻量级目录访问协议(LDAP):Simple AD 支持 LDAP,允许需要目录服务的应用程序进行身份验证并从目录中检索信息。
-
与 AWS 服务的集成 :Simple AD 与多种 AWS 服务无缝集成,使您能够管理 AWS 环境中资源的访问和权限。
-
Amazon EC2:使用域凭证管理对 EC2 实例的访问。 -
Amazon RDS:与 RDS 实例集成进行数据库身份验证。 -
Amazon WorkSpaces:使用 Simple AD 管理用户对虚拟桌面的访问。 -
具成本效益的目录服务:Simple AD 为需要基本目录服务但不需要完整 Active Directory 设置的小到中型企业提供了一种成本效益高的解决方案。
在本食谱中,我们探讨了 Simple AD,这是一种适用于中小型企业的具有成本效益且简单的目录服务。AWS 还支持其他目录解决方案,包括AWS 托管 Microsoft AD,提供完全托管的 Active Directory 服务;AD 连接器,作为将目录请求重定向到本地 AD 的网关;Amazon Cognito 用户池,为 Web 和移动应用提供用户注册和登录功能;以及Amazon Cloud Directory,用于管理分层数据关系的可扩展目录。
另请参见
-
了解更多关于 Simple AD 的信息,访问
www.cloudericks.com/blog/getting-started-with-aws-simple-ad。 -
阅读有关 AWS 中的不同目录解决方案,如 AWS 托管 Microsoft AD、Simple AD、AD 连接器、Amazon Cognito 用户池和 Amazon Cloud Directory 的详细信息,访问
www.cloudericks.com/blog/exploring-aws-directory-solutions。
在 AWS 中使用 Microsoft Entra ID 作为身份提供者
在当今的技术环境中,许多组织采用多云策略,利用不同的公共云(如 AWS 和 Azure)来部署应用程序。这些组织中的一种常见做法是使用 Microsoft Entra ID 来管理用户身份。AWS IAM 身份中心提供了一种简便的方法,将我们的 AWS 账户与 Microsoft Entra ID 连接。这种集成带来了两个显著的好处:身份管理的集中化和用户体验的增强。
将身份管理集中到一个位置简化了 IT 团队的责任,并加强了安全协议。此外,它还免除了用户处理多个登录凭证的麻烦,简化了登录过程,减少了 IT 支持的需求。在本食谱中,我们将深入探讨将 Microsoft Entra ID 与 AWS IAM 身份中心集成,使用 Microsoft Entra ID 作为身份提供者(IdP)。最后,我们将通过演示如何使用 Entra ID 用户来管理 S3 桶作为 AWS 资源来完成此设置。
准备工作
为完成本食谱,除了技术要求部分中提到的内容之外,我们还需要确保以下附加要求得到满足:
-
拥有一个已设置 AWS IAM 身份中心的 AWS 账户是至关重要的。有关如何设置 IAM 身份中心的指导,请参考第一章的相关内容。
-
还必须拥有一个活动的 Microsoft Entra ID 租户。
-
在 Microsoft Entra ID 租户中拥有一个管理员用户是执行本食谱中的配置步骤的必要条件。
-
需要一个演示用户,包含名字、姓氏、显示名称和用户主体名称的属性数据,用于测试配置。我们将此演示用户命名为
demouser1。
重要提示
为了通过 Azure 中的 AWS SSO 企业应用程序成功将用户集成到 AWS IAM 身份中心中,用户需要提供以下属性的值:名字、姓氏、显示名称和用户主体名称。如果缺少这些属性,配置过程可能会遇到错误,从而妨碍用户平稳、安全地过渡到 AWS 环境。
接下来,我们将展示如何在 AWS 中使用 Microsoft Entra ID 作为 IdP。
如何操作…
我们首先从 AWS 下载元数据文件,配置 Microsoft Azure 以通过该元数据文件进行 IAM 身份中心集成,然后继续在 AWS 中设置 AWS IAM 身份中心。之后,我们将返回 Azure 完成配置,最后在 AWS 中验证用户。
从 AWS 下载元数据文件
-
登录具有管理 IAM 身份中心权限的 AWS 账户管理控制台,并进入 IAM 身份中心服务。
-
点击左侧边栏中的设置。
-
在设置页面,找到身份源部分,点击操作下拉菜单,选择更改身份源。
-
在更改身份源页面,选择外部身份提供者,然后点击下一步。
重要提示
在更改身份源页面,目前有三个选项:身份中心目录、活动目录和外部身份提供者。如果选择身份中心目录选项,则允许在 IAM 身份中心中管理用户和组,用户通过 AWS 访问门户登录。活动目录选项用于管理 AWS 托管的 Microsoft AD 中的用户和组。我们还可以灵活地使用 AWS 托管的 Microsoft AD 或 AD Connector 将 IAM 身份中心连接到现有的活动目录。在这种情况下,用户也通过 AWS 访问门户登录。第三个选项外部身份提供者,适用于通过外部 IdP(如 Microsoft Entra ID)管理用户和组。在这里,用户首先登录到 IdP 的登录页面,正如我们在本食谱中所看到的,然后被重定向到 AWS 访问门户,在那里他们可以访问自己的 AWS 账户和云应用程序。
点击下一步后,我们应该看到配置外部身份提供者页面,页面内容大致如下:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_36.jpg
图 9.36 – 配置外部身份提供者页面
- 在配置外部身份提供者页面中,在服务提供者元数据部分,点击下载元数据文件并将其保存在计算机上。此文件将在配置外部 IdP(例如 Microsoft Entra ID)时使用。
我们从 IAM 身份中心下载的元数据文件包含 IAM 身份中心证书及其元数据详细信息,这对于我们的 IdP(本例中是 Microsoft Entra ID)与 IAM 身份中心建立信任关系是必要的。作为替代,我们也可以直接从网页上复制这些信息并手动输入到 IdP 的服务提供者配置部分。
配置 Microsoft Azure 以进行 IAM 身份中心集成
我们可以按照以下步骤配置 Microsoft Azure 以进行 IAM 身份中心集成:
-
使用具有应用管理员角色或更高权限角色的用户登录到 Microsoft Azure 门户。
-
导航至
Microsoft Entra ID,并从左侧边栏点击企业应用。 -
点击新建应用,在浏览 Microsoft Entra Gallery页面中,搜索AWS IAM身份中心。
-
输入应用名称并点击创建。
-
在应用成功创建后,打开该应用。
-
从左侧边栏点击单点登录并选择
SAML作为 SSO 方法。 -
点击上传元数据文件,在上传元数据文件面板中,点击文件夹图标,选择我们在前一节步骤 5中下载的元数据文件。然后点击添加。
-
在基础 SAML配置面板中点击保存。
-
向下滚动到页面的SAML 证书部分并下载联合元数据XML 文件。
现在,我们可以返回 AWS 管理控制台的配置外部身份提供者页面,继续执行所需的步骤。有关 Azure 端步骤的详细操作步骤和截图,请参见本食谱中的另见部分。
继续进行 AWS IAM 身份中心设置
我们可以继续在 AWS 管理控制台中执行所需的 AWS IAM 身份中心步骤:
-
返回到配置外部身份提供者页面,如我们在从 AWS 下载元数据文件部分所做的那样。
-
在身份提供者元数据部分,点击选择文件,上传我们在配置 Microsoft Azure 以进行 IAM 身份中心集成部分下载的文件。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_37.jpg
图 9.37 – 上传身份提供者元数据
-
向下滚动并点击下一步。
-
向下滚动,在审查并确认部分,输入
ACCEPT,如以下图所示,然后点击更改身份源。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_38.jpg
图 9.38 – 审查并确认身份源更改
-
在设置页面中,我们现在应该看到启用自动配置的消息,并有一个启用按钮。点击启用。
-
一旦启用了配置,我们应该看到我们的身份源的SCIM 端点和访问令牌值,如下图所示。保存这些信息。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_39.jpg
图 9.39 – 访问令牌
现在让我们返回 Azure 门户,继续进行配置。
继续在 Microsoft Azure 中进行配置
现在让我们进入我们在配置 Microsoft Azure 与 IAM 身份中心集成部分中创建的 AWS IAM 身份中心企业应用,继续设置:
-
在左侧边栏的管理部分,点击配置,并将配置模式设置为自动。
-
在管理员凭证部分,输入我们在前一节第 6 步中保存的 AWS 身份中心 SCIM 端点,在租户 URL下输入,并在秘密令牌下输入访问令牌。
-
点击测试连接,如果成功,点击保存,然后在配置下点击保存。
-
在配置标签页上,点击开始配置。
-
在左侧边栏的管理部分,点击用户和组,然后在右侧面板中点击添加用户/组。
-
选择我们为演示创建的
demouser1用户并点击分配。
一旦配置成功,我们可以返回 AWS IAM 身份中心验证用户配置。用户在 AWS 中出现可能需要一些时间,通常大约需要 30 分钟。关于在 Azure 侧完成步骤的详细步骤和截图可以在本食谱的另见部分找到。
在 AWS IAM 身份中心验证用户
我们可以通过以下方式验证在 AWS IAM 身份中心的自动用户配置:
-
返回到 IAM 身份中心仪表板。
-
从左侧边栏点击用户。我们应该能在 AWS 身份中心中看到
demouser1用户。现在我们可以使用该用户的 Microsoft Entra ID 凭据登录 AWS 身份中心。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_40.jpg
图 9.40 – Azure 用户在 AWS 中
-
点击设置并复制 AWS 访问门户 URL。
-
将这个 URL 粘贴到另一个浏览器中。我们应该会看到一个提示,要求使用 Microsoft Entra ID 凭据登录。输入用户的主体名称和密码。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_41.jpg
图 9.41 – 以 Microsoft 用户身份登录
在输入用户的主体名称和密码后,我们应该会被重定向到 AWS 账户,并作为已登录用户进入。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_09_42.jpg
图 9.42 – Azure 用户在 AWS 账户中的凭证
在本教程中,我们使用 Microsoft Entra ID 作为 IdP,并使用 Microsoft Entra ID 凭据登录到 AWS 账户。接下来,我们需要使用 权限集 为该用户提供必要的权限和访问权限。我们还可以按照本教程中所做的类似方法,使用其他受支持的 IdP,而不仅仅是 Microsoft Entra ID。
它是如何工作的……
AWS Identity Center 和 Azure Entra ID 之间的单点登录(SSO)使用户能够使用其 Azure AD 凭据登录 AWS Identity Center。这带来许多好处,包括提高安全性和用户便利性、减少管理开销以及改善合规性。
AWS Identity Center 和 Azure Entra ID 之间的单点登录(SSO)通过从 Azure AD 生成 SAML 断言并将其发送到 AWS Identity Center 来实现。然后,AWS Identity Center 验证 SAML 断言并为用户创建会话,使他们能够无需再次输入凭据即可访问 AWS Identity Center 应用程序。
当将用户从 Azure 配置到 AWS IAM Identity Center 时,至关重要的是将他们无缝集成到 AWS 中,就像他们是本地 AWS 用户一样。这涉及将他们分配到特定的 AWS 账户,并授予与他们在组织中各自角色相符的权限集。
还有更多……
让我们探索一些与将 IAM Identity Center 与 Microsoft Entra ID 集成相关的重要概念:
-
用户预配:这是在应用程序或系统中自动创建和管理用户帐户的过程。在 AWS IAM Identity Center 和 Microsoft Entra ID 之间的 SSO 上下文中,用户预配使我们能够为已经在 Microsoft Entra ID 中的用户自动创建 AWS Identity Center 用户帐户。这可以通过减少未经授权访问我们应用程序和资源的风险来提高安全性,还可以通过释放 IT 员工专注于其他任务来减少管理开销。
-
组同步:这是在两个系统之间保持用户组同步的过程。在 IAM Identity Center 和 Microsoft Entra ID 之间的 SSO 上下文中,组同步使我们能够在 Microsoft Entra ID 和 IAM Identity Center 之间保持用户组同步。这确保了用户始终在两个系统中被分配到正确的组,这可以通过确保他们始终能够访问所需的应用程序和资源来改善用户体验。
-
属性映射:这是在两个系统之间映射用户属性的过程。在 AWS Identity Center 和 Microsoft Entra ID 之间的 SSO 上下文中,属性映射使我们能够在 Microsoft Entra ID 和 IAM Identity Center 之间映射用户属性。这一点非常重要,因为 IAM Identity Center 使用用户属性做出授权决策,因此通过映射正确的属性,我们可以确保用户始终被授予正确的访问权限。
让我们现在查看一些额外的参考资料,帮助我们进一步探索将 IAM Identity Center 与 Microsoft Entra ID 集成,特别是关于 Azure 端的变更。
另见
-
我们可以通过
www.cloudericks.com/blog/understanding-automatic-provisioning-with-aws-iam-identity-center深入了解 AWS IAM Identity Center 中的自动化配置功能。 -
包含在 Azure 端需要进行的配置的详细步骤和说明超出了本书的范围。我们可以通过
www.cloudericks.com/blog/understanding-microsoft-entra-sso-integration-with-iam-identity-center了解更多关于 Microsoft Entra SSO 与 AWS IAM Identity Center 的集成信息。
第十章:AWS 安全的附加服务和实践
在本书中,我们已经探讨了许多与安全相关的概念和服务。还有更多安全服务和实践可以帮助我们保护 AWS 基础设施的安全。在本章中,我们将探讨一些值得关注的额外服务和实践。与其他章节不同,我们不会对这些服务进行深入探讨。你可以参考另见部分提供的链接,进一步学习。我们将了解一些与安全相关的托管服务,如AWS 资源访问管理器(AWS RAM)、AWS Systems Manager 参数存储、AWS Secrets Manager、AWS Trusted Advisor和AWS Artifact。我们还将了解如何使用Amazon 机器镜像(AMIs)和来自 AWS Marketplace 的安全产品。
在本章中,我们将涵盖以下配方:
-
设置和使用 AWS RAM
-
使用 Systems Manager 参数存储存储敏感数据
-
使用 AWS Secrets Manager 管理 RDS 凭证
-
创建 AMI 而不是使用 EC2 用户数据
-
使用来自 AWS Marketplace 的安全产品
-
使用 AWS Trusted Advisor 获取建议
-
使用 AWS Artifact 进行合规性报告
技术要求
在深入了解本章的配方之前,我们需要确保已满足以下要求:
-
完成本章中的配方,至少需要一个有效的 AWS 账户。除非配方中特别提到,否则我将使用在第一章中的多账户管理与 AWS Organizations配方中创建的
awsseccb-sandbox-1账户,并且不会使用任何 AWS Organizations 功能。 -
对于管理操作,我们需要一个具有
AdministratorAccess权限的用户来访问我们正在使用的 AWS 账户。
本书的代码文件可以在github.com/PacktPublishing/AWS-Security-Cookbook-Second-Edition上找到。本章的代码文件可以在github.com/PacktPublishing/AWS-Security-Cookbook-Second-Edition/tree/main/Chapter10上找到。
设置和使用 AWS RAM
AWS RAM 使我们能够与其他 AWS 账户或 AWS 组织内部的其他账户安全地共享 AWS 资源。我们可以共享的资源包括传输网关、子网、AWS License Manager 配置和 Amazon Route 53 解析器规则。在这个配方中,我们将学习如何使用 AWS RAM 来共享子网。
准备工作
我们需要以下内容才能成功完成配方:
-
设置为管理账户并已按照在第一章中的多账户管理与 AWS Organizations配方中讨论的方式配置的 AWS Organizations。我将使用在该配方中创建的
aws-sec-cookbook-1账户。 -
在组织内的成员帐户以共享资源。
-
通过遵循第五章中的设置 VPC 及其 VPC 资源的最小化步骤食谱创建 VPC 和子网,然而,您可以跳过创建 NAT 网关。
如何操作…
我们可以按如下方式设置和使用 AWS RAM:
- 转到 AWS 管理控制台中的资源访问管理器服务。如果我们是第一次使用该服务,请点击左侧边栏中的设置,选择启用与 AWS Organizations 的共享选项,点击保存设置,然后返回到资源访问管理器仪表板。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_1.jpg
图 10.1 – 启用与 AWS Organizations 的共享
-
点击创建一个资源共享。
-
对于资源共享名称,提供
my-subnet-share值。 -
在资源 - 可选部分,在选择资源类型的下拉菜单中,选择子网,然后从子网列表中选择我们为本食谱创建的子网,正如在准备部分所讨论的那样。
-
向下滚动并点击下一步。我们将进入关联托管权限页面。保持默认设置,向下滚动并点击下一步。
-
在授予访问权限给主体页面的主体部分,选择仅在您的组织内共享,在选择主体类型下,选择AWS 帐户,输入另一个 AWS 帐户的帐户号,点击添加,向下滚动并点击下一步。这将跳转到审核和创建页面。审核详细信息,向下滚动并点击创建资源共享。
-
要验证资源共享,登录到我们在步骤 6中指定的帐户,然后进入 AWS 资源访问管理器仪表板。在左侧边栏中点击共享给我的资源下的资源共享。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_2.jpg
图 10.2 – 我们成员帐户中的共享资源
我们应该能看到被共享的子网。我们需要选择与我们创建共享时相同的区域,以查看这些共享。
它是如何工作的…
首先,我们在我们的 AWS 组织中启用了共享。这可以通过AWS RAM控制台完成,正如我们在本食谱中看到的那样。如果我们没有在 AWS 组织内启用共享,我们添加的帐户将被视为外部帐户,即使它们是我们组织的一部分。我们为一个子网添加了资源共享,并将其与我们组织单元(OU)内的另一个帐户共享。
还有更多…
我们与 AWS RAM 共享了一个子网资源类型。目前可用的资源类型选项包括:Aurora 数据库集群、容量预留、CodeBuild 项目、CodeBuild 报告组、专用主机、映像构建组件、映像构建镜像食谱、映像构建镜像、许可证配置、解析器规则、流量镜像目标、传输网关等。
另见
你可以在www.cloudericks.com/blog/getting-started-with-aws-ram阅读有关 AWS RAM 的更多信息。
使用 AWS 系统管理器参数存储存储敏感数据
我们可以使用系统管理器参数存储存储数据,可以选择加密或不加密,然后从各种服务中引用它,而无需在任何地方硬编码数据。在本操作中,我们将学习如何在 AWS 系统管理器参数存储中加密存储数据,然后从 EC2 实例中检索它。
准备就绪
我们需要以下内容才能成功完成本操作:
-
一个有效的 AWS 账户和在技术要求部分描述的用户。
-
在默认 VPC 中的 EC2 实例,位于 VPC 内的公共子网中。对于Amazon 机器映像(AMI),选择
Amazon Linux 2023 AMI;对于实例类型,选择t2.micro;对于密钥对(登录),选择你有权限访问的现有密钥对或创建一个新密钥对。在网络设置下,确保自动分配公有 IP的值为启用,并选择创建安全组,将允许来自设置为任何地方的 SSH 流量。我们在第五章中学习了 EC2。 -
你将受益于熟悉 KMS。在第三章中,我们学习了 KMS。
如何操作…
首先,我们将在 AWS 系统管理器参数存储中创建一个参数。然后,我们将附加一个角色,用于从 EC2 实例访问 AWS 系统管理器。最后,我们将从该 EC2 实例检索参数信息。
在 AWS 系统管理器参数存储中创建参数
我们可以按照以下方式创建一个系统管理器参数存储参数:
-
进入 AWS 管理控制台中的系统管理器服务。
-
从左侧边栏点击参数存储。
-
点击创建参数。
-
在创建参数页面,填写名称为
MySecureParameter,描述(可选)填写My Secure Parameter,并选择层级为标准。 -
对于类型,选择
SecureString;对于KMS 密钥源,选择我的当前账户;对于KMS 密钥 ID,保持默认值alias/aws/ssm不变;对于值,输入MySecureValue。 -
向下滚动并点击创建参数。我们应该会看到如下信息:创建参数请求成功!
接下来,我们将创建并将角色附加到我们的 EC2 实例,以便访问 AWS Systems Manager。
创建并附加角色以使用 AWS Systems Manager
要从 EC2 实例使用 AWS Systems Manager,我们需要将角色附加到 EC2 实例,如下所示:
-
转到 AWS 管理控制台中的
IAM仪表板。 -
从左侧边栏点击角色,然后点击创建角色。
-
在受信实体类型下,选择AWS 服务,然后从服务列表中选择
EC2,作为服务或使用案例。 -
向下滚动并选择EC2 角色用于 AWS Systems Manager。点击下一步。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_3.jpg
图 10.3 – 选择受信实体
-
在添加权限面板上,点击下一步。
-
在名称、审核并创建页面中,输入角色名称为
MySSMManInstanceRole,描述为Amazon SSM 管理实例核心角色。审核整个页面,然后点击创建角色。我们应该会看到角色创建成功的消息。 -
如同在《第二章》的通过 IAM 角色在 EC2 实例上进行跨服务访问一节中看到的那样,将此角色附加到我们的 EC2 实例。
从 AWS Systems Manager 参数存储中检索参数
我们可以从 EC2 实例中检索参数值。SSH 进入 EC2 实例并运行以下命令:
aws ssm get-parameters --names MySecureParameter --with-decryption --region us-east-1
我们应该会收到类似以下的响应:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_4.jpg
图 10.4 – 获取参数
参数值将被解密。我们还有一个get-parameter子命令,用于aws ssm CLI 命令;但是,当前AWS 提供的 AmazonEC2RoleForEC2角色不包括它。你可以手动添加权限,然后使用get-parameter。
它是如何工作的…
在本节中,我们在 AWS Systems Manager 参数存储中创建了一个参数并检索了它。我们可以从任何服务中使用该参数,而无需硬编码其值。现在,我们可以从一个地方更新该参数的值。
为了检索和解密加密的参数值,我们使用了get-parameters子命令,该命令是aws ssm CLI 命令的一部分,并带有--with-decryption选项。如果未指定,则默认选项为--no-with-decryption,并且不会解密值。
我们还可以通过将类型设置为String而不是Secure String来创建不加密的参数。
还有更多…
在本节中,我们只使用了 AWS Systems Manager 的一个功能,即参数存储。让我们快速浏览一下 AWS Systems Manager 的其他一些重要功能:
-
AWS Systems Manager 允许我们将 EC2 实例、S3 存储桶和关系数据库服务(RDS)实例等资源进行分组。完成此操作后,我们可以执行一些操作,例如在一组资源中安装补丁。
-
我们可以在 AWS 系统管理器参数存储中使用该参数,来自不同的服务,如 EC2、Lambda 和 CloudFormation。我们也可以在系统管理器的
run命令中使用该参数。 -
run命令可用于在一组 EC2 机器上自动执行管理任务和配置更改。 -
简单的系统管理器 EC2 角色允许我们从 EC2 实例上使用
run命令。 -
我们可以手动指定 EC2 目标实例或基于附加到 EC2 实例的标签来指定目标实例。
-
当我们从控制台配置
run命令时,AWS 会为我们提供相应的 CLI 命令,我们可以执行。 -
要使用
run命令,需要在实例上安装 SSM 代理。 -
我们还可以使用
run命令对本地系统执行操作。
另见
-
你可以在
www.cloudericks.com/blog/getting-started-with-aws-systems-manager-ssm上阅读更多关于 AWS 系统管理器的信息。 -
你可以在
www.cloudericks.com/blog/using-aws-kms-with-aws-ssm-parameter-store上阅读更多关于将 KMS 与 AWS 系统管理器参数存储结合使用的信息。
使用 AWS Secrets Manager 管理 RDS 凭证
在本食谱中,我们将学习如何使用 AWS Secrets Manager 管理 RDS 凭证。这是一种更安全的方式来管理和轮换 RDS 凭证,而不是手动操作。
准备工作
我们需要以下内容才能成功完成本食谱:
-
一个有效的 AWS 账户和如技术要求部分所述的用户。
-
在 RDS 中创建的 RDS 数据库实例,采用默认设置,但有以下例外:
-
对于实例配置,选择无服务器 v2以保持最低成本。
-
对于凭证设置,请提供主用户名和主密码的值,如下图所示:
-
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_5.jpg
图 10.5 – RDS 数据库的凭证设置
重要提示
如果我们在图 10 5中选择了在 AWS Secrets Manager 中管理选项,那么 RDS 将生成一个密码并将其存储在 Secrets Manager 中,而无需执行本食谱中列出的步骤。然而,我们希望演示如何手动存储密钥,因此选择了自主管理选项。
如何操作……
我们可以按如下方式配置 AWS Secrets Manager 来管理 RDS 数据库的凭证:
-
进入 AWS 管理控制台中的
Secrets Manager服务。 -
在左侧边栏,点击
Secrets。在Secrets页面,点击存储新密钥。 -
对于密钥类型,选择Amazon RDS 数据库的凭证,如下图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_6.jpg
图 10.6 – 在 AWS Secrets Manager 中选择秘密类型选项
-
将 主用户名 和 主密码 的值分别提供给 用户名 和 密码 字段。
-
对于 加密密钥 选项,从下拉菜单中选择默认的加密密钥。我们也可以按照 第三章 中的食谱创建一个 KMS 加密密钥并使用它,但在此食谱中,我们将使用默认密钥。
-
在 数据库 部分,选择我们在 准备阶段 创建的数据库并点击 下一步。
-
提供
prod/CloudericksApp/Postgres作为 秘密名称 字段的值,并提供 Cloudericks 应用程序的 Postgress 生产数据库访问权限 作为 描述 字段的值。可选地,添加任何标签,然后点击 下一步。 -
对于 配置自动轮换,启用 自动轮换。然后,选择 计划表达式生成器 作为 轮换计划,将 时间单位 设置为 天,并将 天数 设置为
30。对于 窗口持续时间 - 可选,保持默认选项,并选中 在秘密存储时立即轮换。下一次轮换将在您的计划 上开始。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_7.jpg
图 10.7 – 配置自动轮换
- 在 轮换函数 部分,选择 创建轮换函数。对于 Lambda 轮换函数,提供
postgres-rotation-lambda名称。选择 单用户 作为 轮换策略,然后点击 下一步。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_8.jpg
图 10.8 – 配置轮换函数
- 在 审查 页面,仔细检查所有详细信息。此外,还提供了不同语言的示例代码,包括 Java、JavaScript、C#、Python3、Ruby、Go 和 Rust,演示如何从我们的应用程序中检索秘密,如 图 10 .9 所示。最后,点击 存储。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_9.jpg
图 10.9 – 从 Secrets Manager 检索秘密的示例代码
-
一旦收到成功消息,转到新秘密以验证详细信息。
-
向下滚动并转到 概述 标签页,然后点击 检索秘密值 以查看我们的秘密。如果你想编辑它们,可以使用 编辑 按钮进行修改。
如果我们想删除一个秘密,可以进入该秘密,点击 操作 下拉菜单,然后点击 删除秘密。我们必须指定一个等待期,时间为 7 到 30 天之间,才能删除该秘密。
它是如何工作的…
在这个食谱中,我们将我们的 RDS 数据库凭证存储在 Secrets Manager 中。对于秘密类型,我们选择了 Amazon RDS 数据库凭证。以下是当前在控制台中可用的其他秘密类型选项:Redshift 集群凭证、DocumentDB 数据库凭证、其他数据库凭证 和 其他类型的秘密(例如,API 密钥)。
我们启用了 30 天的自动密钥轮换。我们还可以选择 60 天或 90 天,或提供最多 365 天的自定义周期。我为此配方选择了默认加密密钥。您也可以使用您创建的 KMS 密钥。我们在第三章中学习了有关 KMS 密钥的知识。
配置秘密后,我们的应用程序可以通过 Secrets Manager 进行 API 调用,以编程方式检索秘密。在存储秘密时,AWS 为我们提供了用于不同语言的示例代码以检索秘密。目前,Java、JavaScript、C#、Python3、Ruby、Go 和 Rust 均有示例代码。
我们看到警告称,此秘密存储后会立即进行第一次轮换。因此,如果我们的任何应用程序仍在使用硬编码凭据,并且未更新为使用 API 获取最新凭据,则这些应用程序将失败。
还有更多内容…
AWS Secrets Manager 可能看起来像 AWS Systems Manager 参数存储。让我们快速比较 Secrets Manager 和参数存储:
-
Secrets Manager 主要用于存储数据库凭据、API 密钥和 SSH 密钥。参数存储主要用于存储许可证代码、配置数据、用户定义的参数和数据库字符串,并且较少用于密码。
-
AWS Secrets Manager 按秘密每月和每次 API 调用收费。AWS Systems Manager 参数存储不收取标准参数的费用,但根据存储的高级参数数量和每次 API 交互收费高级参数。
-
Secrets Manager 具有与 RDS 数据库的内置集成。Secrets Manager 支持对 RDS 进行秘密的内置轮换。它还支持使用自定义 Lambda 函数对非 RDS 数据库进行轮换。
-
参数存储已与 AWS Systems Manager 集成。
另请参阅
在www.cloudericks.com/blog/comparing-aws-secrets-manager-and-parameter-store中阅读有关 AWS Secrets Manager 和 Parameter Store 的比较。
创建 AMI 而不使用 EC2 用户数据
在此配方中,我们将创建一个带有 Web 服务器的 AMI,然后从该 AMI 启动实例。从 AMI 创建的实例比通过 EC2 用户数据定义相同配置的实例具有更快的启动时间。在第五章的使用用户数据启动带 Web 服务器的 EC2 实例配方中,我们使用 EC2 用户数据更新了操作系统并在启动时设置了简单的 Web 服务器。
准备工作
我们需要以下内容才能成功完成该配方:
-
按技术要求部分描述的工作 AWS 帐户和用户。
-
根据第五章中的使用用户数据启动带 Web 服务器的 EC2 实例配方启动的 EC2 实例。
如何做…
我们可以从 EC2 实例创建 AMI 如下:
-
进入控制台中的
EC2服务。 -
点击实例,选择我们的实例,点击操作,展开镜像和模板,然后点击创建镜像。
-
在创建镜像屏幕上,提供镜像名称和镜像描述 - 可选。对于其他参数使用默认值,然后点击创建镜像。
-
如果我们进入 AMI 列表,我们的 AMI 应该显示其初始状态为待处理。一旦状态变为可用,就可以从这个 AMI 创建一个新实例。在启动实例时,从我的AMI 标签中选择我们的 AMI。
它是如何工作的…
在这个食谱中,我们从一个 EC2 实例创建了一个 AMI。与启动实例相关的信息,包括任何特定于组织的配置,都可以保存到 AMI 中。我们在这个食谱中使用了 Amazon Linux 2023 作为基础 AMI,因此使用了特定于 Amazon Linux 2023 的命令。如果你使用的是 Amazon Linux 2,也可以使用相同的命令。
我们在第五章 中使用 EC2 用户数据做了类似的配置。来自 AMI 的实例比通过 EC2 用户数据定义的具有相同配置的实例具有更快的启动时间。这是因为我们可以在 AMI 中预安装软件包,而在启动时使用用户数据时需要安装它们。
还有更多…
让我们快速浏览一些与 AMI 相关的重要概念:
-
可以从一个 AMI 启动多个 EC2 实例。
-
AMI 是特定于某一地区的,但我们可以跨区域复制它们。在启动实例时,我们可以在 Amazon 提供的 AMI、我们自己的 AMI、AWS Marketplace AMI 和社区 AMI 之间进行选择。我们还可以根据其他参数筛选列表。
-
我们只应使用我们信任的公共 AMI。在使用 AMI 之前,我们可以检查其评分。
-
AMI 存储在 S3 中。因此,我们将根据 S3 定价收费,这也取决于我们的免费使用配额和使用情况。不过,我们将无法从 S3 控制台查看 AMI 或其存储桶。
-
默认情况下,AMI 对我们的账户和区域是私有的。我们可以将 AMI 设置为公共,供其他 AWS 账户使用,或通过 AWS Marketplace 销售它们。
另请参阅
-
你可以在
www.cloudericks.com/blog/getting-started-with-amis-for-ec2-instances-in-aws阅读更多关于 AMI 的内容。 -
阅读更多关于 AMI 加固的内容,请访问
www.cloudericks.com/blog/ami-hardening-for-ensuring-security-and-stability-in-our-aws-environment。
使用来自 AWS Marketplace 的安全产品
在这个教程中,我们将学习如何使用 AWS Marketplace 中的各种安全产品。许多第三方公司会在 EC2 实例上安装和配置他们的产品和解决方案,并将它们作为 AMI 在 AWS Marketplace 上提供。Marketplace AMIs 可以被视为预先配置软件的 EC2 实例。或者,我们也可以直接从这些供应商那里购买产品,并自行进行配置。
准备就绪…
我们需要一个可用的 AWS 账户,以及在技术 要求部分中描述的用户。
如何做…
我们可以按照以下步骤找到并使用 AWS Marketplace 中与安全相关的 AMI:
-
转到仪表板上的
EC2服务。 -
从左侧边栏点击实例,然后点击启动实例。
-
在应用程序和操作系统镜像(Amazon Machine Image)下,点击浏览更多 AMI。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_10.jpg
图 10.10 – 从 AWS Marketplace 浏览 AMIS
- 转到
AWS Marketplace AMIs选项卡,在搜索栏中搜索安全。截至本文撰写时,有 10719 个 AMI 可用。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_11.jpg
图 10.11 – AWS Marketplace AMIs
我们可以根据左侧边栏的操作系统、软件免费试用、软件定价计划和支持等参数进一步筛选结果。一旦我们决定了一个产品,我们可以按照第五章中的步骤,完成启动实例的过程。
工作原理…
AWS 可能无法提供我们需要的所有安全产品。许多第三方公司开发了与 AWS 服务相辅相成的安全和合规解决方案。我们看到了如何在 AWS Marketplace 中找到这样的 AMI。一旦我们决定了一个产品,我们可以使用该 AMI 启动一个实例。关于我们选择的特定产品的更多详细信息,我们可以参考相应产品的文档。
还有更多…
网络数据包检查,也称为深度数据包检查(DPI),检查数据包头和数据包内容,以检测不符合规定的数据、病毒、垃圾邮件等,并可以采取阻止和记录等措施。它结合了传统防火墙的功能与入侵检测系统(IDS)或入侵预防系统(IPS)的功能。
AWS Web 应用程序防火墙(WAF),AWS 中的防火墙服务,可以检查已知的漏洞,如 SQL 注入,跨站脚本等。然而,AWS 无法进行完整的网络数据包检查,也缺乏 IDS 和 IPS 的功能。不过,我们可以使用 AWS Marketplace 中的解决方案。供应商包括 Alert Logic、Trend Micro、McAfee、Palo Alto Networks 和思科系统等。
参见
您可以在 AWS Marketplace 中阅读有关安全产品的信息,网址为www.cloudericks.com/blog/getting-started-with-aws-marketplace。
使用 AWS 可信顾问进行建议
在本教程中,我们将学习如何使用可信顾问。可信顾问是 AWS 中提供与成本优化、性能、安全、容错性和服务限制相关建议的在线工具。
准备工作
我们需要一个可用的 AWS 账户,以及技术要求部分所描述的用户。
如何操作…
我们可以按照以下方式使用可信顾问:
- 转到 AWS 管理控制台中的可信顾问服务。我们应该在仪表板登陆页面上看到建议类别和基本建议,如下图所示:
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_12.jpg
图 10.12 – 可信顾问仪表板
- 点击左侧边栏中的安全,查看与安全相关的建议。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_13.jpg
图 10.13 – 安全建议页面
-
点击下载所有检查以下载所有检查,或者点击建议的下载按钮以下载该建议的详细信息。
-
点击刷新所有检查以下载所有检查,或者点击建议的刷新按钮以刷新该建议的详细信息。
-
点击左侧边栏中的服务限制,查看与服务限制相关的建议,例如使用超过服务配额 80%的服务。
重要提示
截至本文撰写时,除了安全和服务限制之外,所有其他建议都需要升级才能使用。我们可以在点击左侧边栏中的建议或者在左侧边栏中的任何建议类别选项中除了安全和服务限制之外进行升级。
工作原理…
可信顾问提供与成本优化、性能、安全、容错性、服务限制和运营卓越相关的建议。有两种服务级别:基本计划和完全可信顾问。基本计划是免费的,涵盖核心检查和建议。完全可信顾问功能适用于开发者、商业和企业 AWS 支持计划。
还有更多…
可信顾问基本计划目前在成本优化、性能、容错性和运营卓越方面没有可用的建议。对于这些类别,只有完全可信顾问才提供建议。对于安全和服务限制类别,一些建议既适用于基本计划,也适用于完全可信顾问。
另请参阅
您可以在www.cloudericks.com/blog/understanding-aws-trusted-advisor了解更多关于 Trusted Advisor 的信息。
使用 AWS Artifact 进行合规性报告
在本教程中,我们将学习如何使用 AWS Artifact。AWS Artifact 是一个免费的自助门户,用于访问 AWS 的合规性报告。AWS Artifact 可用于访问 AWS 的安全和合规性报告,并选择在线协议。
准备工作
我们需要一个可用的 AWS 账户,以及在技术 要求部分描述的用户。
如何操作…
我们可以按照以下方式使用 AWS Artifact:
-
转到控制台中的
AWS Artifact服务。 -
在左侧边栏中点击报告查看可用报告。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_14.jpg
图 10.14 – AWS Artifact 的报告
- 在左侧边栏中点击协议查看账户协议和组织协议。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_15.jpg
图 10.15 – 协议
提示
我们可以从组织的主账户中点击组织协议选项卡,管理主账户和组织中所有成员账户的协议。
- 选择任何协议,然后点击下载协议按钮下载协议。如果出现接受 NDA 下载报告的消息,我们需要选择我已阅读并同意所有 NDA 条款复选框。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_16.jpg
点击接受 NDA并下载。
https://github.com/OpenDocCN/freelearn-sec-pt2-zh/raw/master/docs/aws-sec-cb/img/B21384_10_17.jpg
图 10.16 – 接受并下载报告
工作原理…
我们已经学会使用 AWS Artifact 来检查合规性报告。以下是目前在 AWS Artifact 中可用的一些报告:可访问性符合性报告(VPAT)– Amazon Cognito 用户池,英文版 HDS 认证,ABS 云计算实施指南 2.0 – 工作簿,可访问性符合性报告(VPAT)– Amazon API 网关,可访问性符合性报告(VPAT)– Amazon AppFlow,可访问性符合性报告(VPAT)– Amazon AppStream 2.0,可访问性符合性报告(VPAT)– Amazon 简单队列服务,可访问性符合性报告(VPAT)– Amazon 简单通知服务(SNS),以及可访问性符合性报告(VPAT)– Amazon 简单邮件服务(SES)。
还有更多…
在本书中,我们看到了许多 AWS 服务,帮助我们在 AWS 上保护基础设施。然而,这并不是一个详尽的列表。AWS 还不断添加更多服务和功能。让我们快速浏览一些与安全相关的更多服务:
-
Amazon Detective是一个可以通过分析和可视化安全数据来帮助找到潜在安全问题根本原因的服务。截至本文撰写时,此服务处于预览阶段。 -
AWS 控制塔帮助我们根据与安全和合规性相关的最佳实践建立和管理多账户 AWS 环境。最终用户可以根据公司范围内集中建立的合规性政策提供新账户,云管理员可以查看着陆区域的完整概述。着陆区域是所有需要合规的 OU、账户、用户和其他资源的容器。着陆区域应该位于组织的非成员账户中。
-
AWS 许可证管理器帮助我们管理来自第三方供应商(如微软、甲骨文和 SAP)的许可证,当我们将它们引入 AWS 时。我们可以控制它们的使用,甚至为不同用户组设置定制规则。
-
AWS 个人健康仪表板是一项提供给高级支持计划客户的服务,用于监视、管理和优化他们的 AWS 环境。
-
AWS 良构架构工具是基于 AWS 良构架构框架的管理服务。我们可以根据当前 AWS 最佳实践定义工作负载,这个工具将提供如何改进我们的云架构的指导。
另请参阅
您可以在www.cloudericks.com/blog/getting-started-with-aws-artifact了解关于 AWS Artifact 的信息。
更多推荐


所有评论(0)