WA-安全-Security-202310-Summary
设计原则¶
问题和定义¶
安全基础
SEC 1 如何安全地操作您的工作负载?
身份和访问管理
SEC 2 如何管理人员和机器的身份?
SEC 3 如何管理人员和机器的权限?
检测
SEC 4 您如何检测和调查安全事件?
基础架构保护
SEC 5 如何保护您的网络资源?
SEC 6 如何保护计算资源?
数据保护
SEC 7 如何对数据进行分类?
SEC 8 如何保护静态数据?
SEC 9 如何保护传输中的数据?
事件响应
SEC 10 如何预测、响应事件以及从事件中恢复?
应用安全
SEC 11 如何在整个设计、开发和部署生命周期中纳入并验证应用程序的安全属性?
最佳实践¶
安全基础¶
SEC 1 如何安全地操作您的工作负载?¶
使用账户分隔工作负载¶
通过采取多账户策略,在环境(如生产、开发和测试)和工作负载之间建立共同的防护机制和隔离措施。强烈建议在账户层面进行分离管理,这样可为安全性、账单和访问提供强大的隔离边界。
安全账户根用户和属性¶
根用户是 AWS 账户中权限最高的用户,对账户内的所有资源具有完全管理访问权限,在某些情况下不受安全策略的约束。禁用对根用户的编程访问,为根用户建立适当的控制机制,并避免日常使用根用户。这样有助于降低无意中暴露根凭证以及随后破坏云环境的风险。
识别并验证控制目标¶
根据您的合规性要求以及从威胁模型中发现的风险,获得并验证您需要应用于工作负载的控制目标和控制措施。持续验证控制目标和控制措施可帮助您衡量风险缓解措施的有效性。
及时了解最新的安全威胁¶
通过及时了解最新的安全威胁,帮助您定义并实施适当的控制措施,识别攻击媒介。使用 AWS Managed Services,让您能够在自己的 AWS 账户中存在意外行为或异常行为时接收到通知。在您的安全信息流程中,使用 AWS 合作伙伴工具或第三方威胁信息源进行调查。通用漏洞披露(CVE)列表中包含公开披露的网络安全漏洞,可供您掌握最新信息。
及时了解最新的安全建议¶
及时了解最新的 AWS 和行业安全建议,以改善您的工作负载的安全状况。AWS 安全公告中包含有关安全性和隐私通知的重要信息。
使用威胁模型识别风险并确定其优先级¶
执行威胁建模,以识别并维护一个针对工作负载的潜在威胁和相关缓解措施的最新登记表。确定威胁优先级并调整安全控制缓解措施,以进行防范、检测和响应。根据您的工作负载以及不断变化的安全环境,重新审视和维护此登记表。
在管道中自动执行测试和验证安全控制措施¶
为安全机制建立可靠的基准和模板,并将其作为构建、管道和流程的一部分进行测试和验证。利用工具和自动化功能,持续测试并验证所有的安全控制措施。例如,扫描机器映像和基础设施即代码面板等项目,以发现安全漏洞、异常以及与每个阶段的既定基准的偏差。AWS CloudFormation Guard 可以帮助您验证 CloudFormation 模板是否安全,为您节省时间并降低配置错误的风险。
定期评估和实施新的安全服务和功能¶
评估并实施 AWS 和 AWS 合作伙伴提供的安全服务和功能,以改善您的工作负载的安全状况。AWS 安全博客重点介绍新的 AWS 服务和功能、实施指导和常规安全指南。“AWS 的新增内容”是一个很好的途径,可帮助您及时了解所有新的 AWS 功能、服务和公告。
身份和访问管理¶
SEC 2 如何管理人员和机器的身份?¶
使用强大的登录机制¶
当不使用多重身份验证(MFA)等机制时,登录(使用登录凭证的身份验证)可能会带来风险,特别是在登录凭证被无意泄露或很容易猜到的情况下。使用强大的登录机制,通过要求使用 MFA 和强密码策略来降低这些风险。
使用临时凭证¶
进行任何类型的身份验证时,最好使用临时凭证而不是长期凭证,以降低或消除诸如凭证被无意泄露、共享或被盗之类的风险。
安全存储和使用密钥¶
工作负载需要能够自动向数据库、资源和第三方服务证明其身份。这是使用秘密访问凭证(如 API 访问密钥、密码和 OAuth 令牌)完成的。使用专门构建的服务来存储、管理和轮换这些凭证有助于降低这些凭证泄露的可能性。
依赖集中式身份提供商¶
对于员工身份(员工和合同工),请依赖允许您在集中位置管理身份的身份提供程序。这样,您就可以更轻松地跨多个应用程序和系统管理访问权限,因为您在从单一位置创建、分配、管理、撤销和审核访问权限。
定期审计和轮换凭证¶
定期审计和轮换凭证,以限制凭证可用于访问资源的时间。使用长期凭证会产生许多风险,可通过定期轮换来降低这些风险。
利用用户组和属性¶
随着您管理的用户数量不断增加,您需要确定如何组织这些用户,以便能够实现规模管理。将具有常见安全要求的用户置于由您的身份提供程序定义的组中,并建立机制以确保用于访问控制的用户属性(例如部门或位置)正确无误且已更新。使用这些组和属性(而不是单个用户)来控制访问权限。这样,您就可以使用权限集一次性更改用户的组成员身份或属性,从而实现集中管理访问,而不是在需要更改用户的访问权限时更新多个单独策略。
SEC 3 如何管理人员和机器的权限?¶
定义访问要求¶
管理员、最终用户或其他组件都需要访问您工作负载的每个组件或资源。明确定义哪些人员或事物应当有权访问每个组件,选择用于进行身份验证和授权的适当身份类型和方法。
授予最低权限访问权限¶
最佳实践是向身份授予的访问权限只能是在特定条件下对特定资源执行特定操作所必需的。使用组和身份属性来大规模动态设置权限,而不是为单个用户定义权限。例如,您可以允许一组开发人员访问,以便仅管理其项目的资源。使用这种方法,如果某个开发人员离开项目,则可以自动撤销该开发人员的访问权限,而无需更改底层访问策略。
为您的组织定义权限防护¶
建立通用控件以限制对组织中所有身份的访问权限。例如,您可以限制对特定 AWS 区域的访问,或防止操作员删除常见资源,例如用于您的核心安全团队的 IAM 角色。
建立紧急访问流程¶
创建一个流程,便于在集中式身份提供程序偶尔出现问题时紧急访问您的工作负载。
在组织内安全地共享资源¶
随着工作负载数量的增长,您可能需要将这些工作负载中资源的访问权限进行共享,或者跨多个账户多次预置资源。您可能需要进行构造来划分环境,例如划分成开发、测试和生产环境。但是,采取相互分离的构造并不会限制您安全共享权限。通过共享重叠的组件,您可以降低运维开销,并提供一致的体验,而不必猜测在多次创建同一资源时可能遗漏了什么。
持续减少权限¶
当您的团队确定好所需的访问权限时,删除不需要的权限,并建立审核流程以实现最低权限。持续监控并删除供人类和机器访问的未使用的身份和权限。
与第三方安全地共享资源¶
确保云环境安全,不能仅仅局限于保护您的组织。您的组织有一部分数据可能要依赖第三方来管理。管理第三方托管系统的权限,应遵循及时访问的做法,使用最低权限原则和临时凭证。通过与第三方密切合作,您既可以缩小影响范围,又可以降低意外访问的风险。
基于生命周期管理访问权限¶
将访问控制措施与操作员和应用程序生命周期以及您的集中联合身份验证提供者集成。例如,在用户离开组织或角色发生变化时删除用户的访问权限。
分析公共和跨账户访问¶
对于标识出存在公共访问和跨账户访问情况的调查结果,应持续监控。减少公共访问和跨账户访问,使访问仅能触达特定资源。
检测¶
SEC 4 您如何检测和调查安全事件?¶
配置服务和应用程序日志记录¶
保留服务和应用程序的安全事件日志。这是审计、调查和运营使用案例的基本安全原则,也是由监管、风险与合规性(GRC)标准、政策和程序驱动的共同安全要求。
集中分析日志、结果和指标¶
安全运营团队依靠收集日志和使用搜索工具来发现需要关注的潜在事件,这些事件可能代表未经授权的活动或无意的更改。但是,仅仅分析收集的数据和手动处理信息不足以应对从复杂架构流出的大量信息。单凭分析和报告无法及时分配合适的资源来处理事件。
自动响应事件¶
使用自动化流程调查和修复事件可减少人工处理工作量和人为错误,从而扩展调查功能。定期审核将帮助您优化自动化工具,并实现持续迭代。
实施可操作的安全事件¶
创建发送给团队并将由团队处理的警报。确保警报包含团队采取措施所需的相关信息。对于您的每个检测性机制,您还应有一个以运行手册或行动手册形式存在的调查流程。例如,当您启用 Amazon GuardDuty 时,它会生成不同的调查结果。您的每个调查发现类型都应具有一个运行手册条目,例如,如果发现了特洛伊木马程序,您的运行手册的简单说明可以指示某个人员进行调查和修复。
基础架构保护¶
SEC 5 如何保护您的网络资源?¶
创建网络层¶
将具有共同敏感度要求的组件分成若干层,以尽量缩小未经授权访问的潜在影响范围。例如,应将虚拟私有云(VPC)中无需进行互联网访问的数据库集群,放在无法向/从互联网路由的子网中。流量应仅从相邻的下一个最不敏感的资源流出。考虑一个位于负载均衡器后面的 Web 应用程序。不应直接从负载均衡器访问数据库。只有业务逻辑或 Web 服务器才能直接访问数据库。
控制所有层的流量¶
当构建您的网络拓扑时,您应检查每个组件的连接要求。例如,某个组件是否需要互联网可访问性(入站和出站)、连接到 VPC 的能力、边缘服务和外部数据中心。
自动执行网络防护¶
自动运行保护机制,以提供基于威胁情报和异常检测的自我防御网络。例如可应对最新的威胁并减轻它们的影响的那些入侵检测和预防工具。您可以在 Web 应用程序防火墙等方面实现网络保护自动化,例如,使用 AWS WAF Security Automations 解决方案来自动拦截来自与已知威胁媒介相关的 IP 地址的请求。
实施检查和保护¶
检查和筛选每层的流量。您可以使用 VPC 网络访问分析器来检查 VPC 配置中可能存在的意外访问。您可以指定网络访问需求,然后确定不能满足这些要求的潜在网络路径。对于通过基于 HTTP 的协议处理的组件,Web 应用程序防火墙可帮助防止常见的攻击。AWS WAF 是一个 Web 应用程序防火墙,可监控和拦截与转发到 Amazon API Gateway API、Amazon CloudFront 或应用程序负载均衡器的可配置规则匹配的 HTTP(S) 请求。要开始使用 AWS WAF,您可以将 AWS 托管规则与您自己的规则结合使用,也可以使用现有的合作伙伴集成。
SEC 6 如何保护计算资源?¶
执行漏洞管理¶
频繁扫描和修补您的代码、依赖项和基础设施中的漏洞,以帮助防御新的威胁。
缩小攻击面¶
通过强化操作系统,并尽量减少所使用的组件、库和外部可用的服务,缩小暴露在意外访问下的危险。首先减少未使用的组件,无论它们是操作系统程序包、应用程序(对于基于 Amazon Elastic Compute Cloud(Amazon EC2)的工作负载),还是代码中的外部软件模块(对于所有工作负载)。您可以找到许多面向常见的操作系统和服务器软件的强化和安全配置指南。例如,您可从 Center for Internet Security 开始,然后进行迭代。
采用托管服务¶
实施用来管理资源的服务,例如 Amazon Relational Database Service(Amazon RDS)、AWS Lambda 和 Amazon Elastic Container Service(Amazon ECS),以便减少您在责任共担模式中的安全维护任务。例如,Amazon RDS 可帮助您设置、操作和扩展关系数据库,并自动执行管理任务,例如硬件预置、数据库设置、修补和备份。这意味着您将有更多的空闲时间,因此可以专注于通过 AWS 架构完善的框架中所述的其他方法来保护您的应用程序。使用 Lambda,无需使用预调配或托管服务器即可运行代码,因此您只需在代码级别而不是基础设施或操作系统级别专注于连接、调用和安全性。
自动保护计算¶
自动执行计算保护机制,包括管理漏洞、缩小攻击面和管理资源。此自动化将帮助您投入时间以保护工作负载的其他方面,并降低人为犯错的风险。
帮助人员远程执行操作¶
移除交互式访问功能可降低人为错误的风险以及手动配置或管理的可能性。例如,利用变更管理工作流,借助基础设施即代码来部署 Amazon Elastic Compute Cloud(Amazon EC2)实例,然后使用 AWS Systems Manager 等工具来管理 Amazon EC2 实例,而不是允许直接访问或通过堡垒主机访问。AWS Systems Manager 可使用自动化工作流程、文档(行动手册)和运行命令等功能自动执行多种维护和部署任务。AWS CloudFormation 堆栈从管道进行构建,并能够自动执行您的基础设施部署和管理任务,而无需直接使用 AWS 管理控制台或 API。
验证软件完整性¶
实施一些机制(例如代码签名),以确保工作负载中使用的软件、代码和库来自可信的来源且未被篡改。例如,您应验证二进制文件和脚本的代码签名证书以确认作者,并确保证书自作者创建以来未被篡改。AWS Signer 通过集中管理代码签名生命周期(包括签名证书以及公有和私有密钥),可帮助确保代码的可信度和完整性。您可以了解如何对 AWS Lambda 使用代码签名的高级模式和最佳实践。此外,通过将您下载的软件的校验和与提供商提供的校验和进行对比,可帮助确保它未被篡改。
数据保护¶
SEC 7 如何对数据进行分类?¶
识别工作负载内的数据¶
了解工作负载所处理数据的类型和分类、关联的业务流程、数据存储位置以及数据所有者至关重要。您还应了解工作负载的适用法律和合规性要求,以及需要执行的数据控制措施。识别数据是数据分类过程的第一步。
定义数据保护控制措施¶
根据数据分类级别保护数据。例如,使用相关建议保护分类为公共的数据,同时使用其他控制措施保护敏感数据。
自动识别和分类¶
自动识别和分类数据可帮助您实施正确的控制措施。在这方面实现自动化而不是允许人员直接访问,可以降低人为犯错和漏洞的风险。您应使用 AWS Macie 等工具执行评估,Amazon Macie 使用机器学习来自动发现和保护 AWS 中的敏感数据并对其分类。Amazon Macie 可以识别个人可识别信息(PII)或知识产权之类的敏感数据,并为您提供控制面板和提醒,让您了解此类数据的访问或移动方式。
定义数据生命周期管理¶
您定义的生命周期策略应基于敏感度级别以及法律和组织要求。应考虑您的数据保留期限、数据销毁流程、数据访问管理、数据转换和数据共享等方面。当选择数据分类方法时,请平衡可用性与访问权限。您还应考虑多种访问级别及其细微差别,以便针对每个级别实施安全且有效的方法。始终采用深度防御方法并减少人工访问数据次数以及数据转换、删除或复制机制。例如,要求使用应用程序的用户执行严格身份验证,并向应用程序而不是用户授予执行远程操作的必要访问权限。此外,确保用户来自可信网络路径并要求其获取解密密钥。使用控制面板和自动报告等工具为用户提供数据信息,而不是让他们直接访问数据。
SEC 8 如何保护静态数据?¶
实施安全密钥管理¶
安全密钥管理包括密钥材料的存储、轮换、访问控制和监控,这些都是保护工作负载的静态数据安全所必需的。
强制实施静态加密¶
您应该强制对静态数据使用加密。加密后,即使遭到未经授权访问或意外泄露,也能保持敏感数据的机密性。
自动执行静态数据保护¶
利用自动化工具持续验证和实施静态数据控制措施,例如,确保只存在经过加密的存储资源。您可以使用 AWS Config 规则自动确认所有 EBS 卷都已经过加密。AWS Security Hub 还可以按照安全标准执行自动化检查,以此验证多种不同的控制措施。此外,您的 AWS Config 规则可以自动修复不合规的资源。
强制实施访问控制¶
为了帮助保护静态数据,请使用隔离和版本控制等机制强制实施访问控制,并应用最低权限原则。防止允许公众访问您的数据。
使用机制限制对数据的访问¶
禁止所有用户直接访问正常运行环境中的敏感数据和系统。例如,利用变更管理工作流程,借助工具来管理 Amazon Elastic Compute Cloud(Amazon EC2)实例,而不是允许直接访问或通过堡垒主机进行访问。这可以使用 AWS Systems Manager Automation 来实现,此功能使用自动化文档,文档中包含您用于执行任务的步骤。这些文档可以存储在源代码控制中、在运行之前接受对等审核,并接受全面测试以便最大程度降低风险(与 shell 访问相比)。企业用户可以使用一个仪表板而不是通过直接访问数据存储库来执行查询。当未使用 CI/CD 管道时,确定需要利用哪些控制措施和流程来充分提供通常禁用的 Break Glass 访问机制。
SEC 9 如何保护传输中的数据?¶
实施安全密钥和证书管理¶
传输层安全性协议(TLS)证书用于保障网络通信的安全,确立网站、资源和工作负载在互联网上以及专用网络上的身份。
执行传输中加密¶
根据贵组织的政策、监管义务和标准定义,实施加密要求,以帮助满足组织、法律和合规性要求。如要在虚拟私有云(VPC)外部传输敏感数据,务必仅使用具有加密功能的协议。即使数据在不可信的网络中传输,加密也有助于保持数据的机密性。
自动检测意外数据访问¶
使用 Amazon GuardDuty 等工具自动检测可疑活动,或尝试将数据移动到定义的边界之外。例如,GuardDuty 可以借助 Exfiltration:S3/AnomalousBehavior 调查结果,来检测异常的 Amazon Simple Storage Service(Amazon S3)读取活动。除了 GuardDuty 以外,还可以将负责捕获网络流量信息的 Amazon VPC 流日志与 Amazon EventBridge 配合使用,来检测异常连接(不管是已成功的还是被拒绝的)。Amazon S3 Access Analyzer 可以帮助您评测 Amazon S3 桶中的哪些数据可供哪些人访问。
对网络通信进行身份验证¶
使用传输层安全性 (TLS) 或 IPsec 等支持身份验证的协议来验证通信的身份。
事件响应¶
SEC 10 如何预测、响应事件以及从事件中恢复?¶
确定关键人员和外部资源¶
确定能够帮助您的组织响应事件的内部和外部人员、资源、以及法律义务。
制定事件管理计划¶
为事件响应制定的第一个文档是事件响应计划。事件响应计划旨在为您的事件响应计划和战略奠定基础。
准备取证能力¶
在发生安全事件之前,可以考虑构建取证能力来支持安全事件调查工作。
制定和测试安全事件响应行动手册¶
准备事件响应流程的关键环节是制定行动手册。事件响应行动手册提供了一系列规范性指导和步骤,供发生安全事件时遵循。清晰的结构和步骤可简化响应,减少发生人为错误的可能性。
预置访问权限¶
确保事件响应者将正确的访问权限预置到 AWS 中,以缩短调查到恢复所需的时间。
运行模拟¶
随着组织不断发展壮大,威胁形势也会不断变化,因此务必要持续评估组织的事件响应能力。运行模拟(也称为实际演练)是可用于执行这种评估的一种方法。模拟过程使用现实世界中的安全事件场景,旨在模仿威胁主体采取的战术、技术和程序(TTP),让组织通过响应现实中可能发生的模拟网络事件,来练习和评估自己的事件响应能力。
建立从事件中吸取经验教训的框架¶
实现经验教训总结框架和根本原因分析能力不仅有助于提高事件响应能力,还有助于防止事件再次发生。通过从每次事件中吸取教训,您可以避免重复同样的错误、泄露或错误配置,这不仅可以改善您的安全态势,还可以最大限度地减少因可预防的情况而损失的时间。
预先部署工具¶
确保安全人员预部署了适当的工具,来缩短从调查到恢复的时间。
应用安全¶
SEC 11 如何在整个设计、开发和部署生命周期中纳入并验证应用程序的安全属性?¶
定期执行渗透测试¶
定期对软件执行渗透测试。此机制有助于识别无法通过自动化测试或人工代码审查检测到的潜在软件问题。它还有助于了解检测控制的有效性。渗透测试应设法确定软件是否会以意外方式执行,例如公开应受保护的数据,或者授予比预期更广泛的权限。
以编程方式部署软件¶
尽可能以编程方式部署软件。通过采取这种做法,可以降低由于人为错误导致部署失败或引入意外问题的可能性。
定期评测管道的安全属性¶
对您的管道运用 Well-Architected 安全性支柱原则,尤其注意权限分离。定期评测管道基础设施的安全属性。通过有效管理管道的安全性,可以确保通过管道的软件的安全性。
应用程序安全性培训¶
向贵组织的构建者提供培训,使其了解有关安全开发和操作应用程序的常见做法。在开发时采取安全至上的做法,有助于降低到安全审查阶段才会检测出问题的可能性。
在整个开发和发布生命周期中执行自动化测试¶
在整个开发和发布生命周期中自动测试安全属性。自动化使得在发布软件前,更加容易始终如一反复识别软件中可能存在的问题,进而减少所提供的软件中存在安全问题的风险。
人工代码审查¶
对您制作的软件执行人工代码审查。此流程有助于确保编写代码的人不是唯一检查代码质量的人。
集中管理服务,方便获取软件包和依赖项¶
提供集中管理的服务,方便构建者团队获取软件包和其他依赖项。通过采取这种做法,可以在将软件包纳入所编写的软件之前,对软件包进行验证;另外,还可以为分析贵组织所使用的软件提供数据来源。
建立规程,让工作负载团队负责安全领域¶
建立规程或机制,使构建者团队能够针对创建的软件作出安全决策。这些决策仍然需要由安全团队通过审查加以验证,但让构建者团队负责安全领域可以构建速度更快、安全性更高的工作负载。此机制还可促进负责任文化,进而对所构建系统的运营产生积极影响。