在当今技术驱动的环境中,大多数公司都会在云上拥有一些工作负载。与本地网络不同,这些云环境缺乏安全的外部边界和特定的关闭时间。
云网络始终开启且始终可用。虽然方便,但这也意味着黑客可以随时访问它们。因此,这些网络中的任何漏洞(例如云配置错误)都可能使企业面临安全威胁。
在本文中,我们将研究不同类型的云配置错误以及它们发生的原因。然后,我们将探讨企业团队可以采取哪些措施来防止配置错误并确保企业的数据和商业利益的安全。
1、什么是云配置错误
根据美国国家安全局的说法,错误配置是最常见的云安全漏洞。云配置错误通常发生在未正确构建云资源时,使企业的系统容易受到攻击。
云环境配置错误可能导致系统中断、意外停机或安全风险。原因可能包括过于复杂的环境、安全实践知识不足以及手动过程导致的人为错误。

2、云配置错误的类型
云环境和资源的错误配置可能包含广泛的安全问题。
以下为两种最常见的错误配置类型:访问控制不足和网络访问许可。
1)资源访问控制不足
云上的默认权限通常以最小的障碍开始。这意味着在开发人员或系统管理员实施访问控制之前,每个人都可以访问所有内容。因此,务必记住立即设置这些控件。
另一种情况是当开发人员决定在配置应用程序时将所有内容设置为开放访问。虽然这让他们在此过程中的工作更轻松,但如果他们不去重新实施访问控制,企业的系统将面临更高的数据泄露风险。
2)许可网络访问
与访问控制类似,当团队成员建立网络或新服务器时,他们可能会在配置应用程序时应用相对宽松的端口访问和路由。
关键是确保只公开预期的面向外部的端口,从而减少资源之间的通信选项。这消除了恶意方可以使用的许多攻击载体。
3、与云配置错误相关的风险
云配置错误可能会给企业的安全性和为客户服务的能力带来各种风险。根据错误配置的类型,这种风险可能从性能或可靠性问题到重大安全风险。
两个最常见的风险是敏感数据泄露和服务中断。
1)敏感数据泄露
许多访问控制错误配置可能会暴露敏感数据或使有价值的文件面临被盗的风险。允许攻击者从企业的数据库中读取数据或从云存储中检索文件会使企业面临间谍活动的风险,暴露用户的个人信息并使恶意行为者能够删除关键数据。
2)服务中断
如果攻击者访问企业的网络或服务器,他们可能会破坏企业的服务。
这种中断可能包括勒索软件攻击。黑客可以加密企业的文件或服务器,删除资源,甚至使用企业的服务器发送垃圾邮件或非法挖掘比特币。
此外,错误配置的服务器、网络或容器可能会阻止在负载下正确扩展或阻碍站点灾难恢复。这可能会导致企业用户中断,并迫使企业为环境支付更多费用。

4、云配置错误是如何发生的
作为 IT 专业人员,我们不会故意错误地配置资源或设置环境,以免以后出现问题。大多数错误配置是由于人为错误造成的,主要是由于基础设施过于复杂或对安全实践了解不足等因素。
1)过于复杂的基础设施
当环境的复杂性超出我们的习惯时,通常会发生人为错误。在可扩展的架构中快速创建资源、添加组件或新容器以及更改配置——这些都是常见的错误来源。
虽然企业需要采取这些措施来发展业务,但实施一套安全检查表也很重要。因为在企业的环境中没有某种形式的标准化,企业可能很难确保所有组件都正确配置和保护。
2)对安全的理解不足
大多数开发人员和 DevOps 团队在开发和使用应用程序和基础架构时不会优先考虑安全性。这些团队主要专注于确保服务正常工作并提供功能。
因此,企业在开发团队开始工作时,牢记安全性是关键。确保他们了解重要概念,例如静态加密、最小特权原则和应用程序强化。
开始密切关注云配置可能看起来很乏味,但从长远来看是值得的。

5、减少错误配置的提示
我们可以实施许多解决方案和流程来降低配置错误的风险并显着降低它们发生的可能性。
以下是企业的 IT 团队可以部署的一些工具和技术示例,具体取决于其环境和组织的性质。
1)采用变更管理实践
变更管理实践,例如定期变更节奏和变更审查小组,可以显著减少错误配置的机会。
在没有额外工具的情况下,以标准化方式调度、审查和实施变更可以显著降低配置错误的风险。
2)简化自身环境
与其为环境中部署的每个组件都定制基础架构,不如标准化一些组件并使用模板进行部署。
这种标准化允许团队成员快速发现不同的组件配置,并使整个环境的管理更加简单。
3)进行记录
企业应确保团队像任何其他关键数据集一样维护和备份环境文档和配置,以将当前环境与预期环境进行比较。
记录配置和环境一开始可能看起来很乏味,但从长远来看,额外的工作将变得有益。这些文档将帮助企业团队跟踪问题、排除故障并帮助管理者确定未来要做什么以发挥关键作用。
4)采用基础设施即代码实践
基于变更管理实践的理念,建议采用工具和流程来构建基础设施即代码。当企业将基础架构定义为代码并定期查看时,会很难出现配置错误。
如果企业采用持续交付工具来保持配置常青,那么防止配置漂移和回滚意外更改也容易得多。

5)扫描漏洞
建议企业定期扫描自身环境以查找所有漏洞。这种扫描包括从静态和动态应用程序安全测试到扫描网络和防火墙的所有内容,以确保端口和路由保持锁定状态。
各种配置代码扫描器,如 Bridgecrew 和 Snyk,使企业团队能够在基础架构即代码框架中查找和修复常见配置错误。
6)执行渗透测试
除了定期的漏洞扫描,对自身环境和应用程序运行实际渗透测试可以帮助发现和修复架构中的潜在弱点。
渗透测试作为一项专业服务可能非常昂贵,但是进行某种形式的定期渗透测试可确保企业应用程序尽可能强大。
7)采用 DevSecOps 文化
长期以来,在开发和部署过程中,安全性都是事后才考虑的问题。开发、安全和运营 ( DevSecOps ) 文化通过将安全集成为应用程序设计和开发的一个方面来解决这个问题。
在应用程序设计和开发团队中拥有丰富的安全资源有助于将安全性融入应用程序的基础。通过防止问题的出现,可以为企业避免之后解决问题的麻烦。
即使在现在的技术领域,配置错误仍然是云环境中的常见现象,导致各种规模的公司出现系统中断和数据泄露。
企业可以使用更明确、更标准化的安全方法来解决各种错误配置,并将这种方法融入开发流程和工具中。通过将开发实践扩展到基础架构管理并添加安全重点,企业可以大大减少错误配置的影响和发生率。
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为