如何在云环境中建立一个安全的API设计?
2019-02-26 来源:多智时代
在云计算环境中建立一个安全的API设计是一项具有挑战性的工作。在本文中,安全研究专家Dejan Lukan介绍了企业在开发安全API时需要记得的若干事项。
一个应用程序编程接口(API)是对已经正常运行应用程序的一个简单扩展,以便于帮助用户以编程的方式与之进行交互。
使用API的原因是各种各样的,其中包括从数据库中提取数据、将数据发送并保存至数据库,以及推送任务至队列中,但是它们的主要目的是为了帮助用户通过使用程序或脚本程序以自动化的方式与应用程序进行交互。当在一个没有API支持的虚拟环境中工作时,每一步的操作都必须由用户手动调用。如果系统中有着数以千计的虚拟机,那么在每一台虚拟机上都必须由用户手动单独执行每一个操作的后果是可想而知的。这个过程将是缓慢而繁琐的,这也是API被应用于此的价值所在,即它们可以为用户提供与应用程序的自动化交互而不需要执行任何的手动操作。
在本文中,我们将研究API是如何在云计算环境中工作的,其中包括不同的类型、它们的具体角色以及在云计算中开发安全API的最佳实践的总结。
API的类型
当规划设计一个API时,保持一定的大局观是非常重要的。无论何时通过通讯通道发送消息时,都需要按照某种协议(即一组发送方和接收方均已知晓的规则)对消息进行正确的处理。为了实现通过互联网传送API消息安全性的最大化,我们应使用一个安全的协议。在通过网络把消息发送至服务器端之前,安全协议会在客户端对待发送数据进行加密处理,而当消息发送完毕后,安全协议则将在服务器端对已接收的消息数据进行解密并执行下一步的处理。以下是一些可用于通过互联网安全发送消息的协议,如:HTTPS、POPS、IMAPS、SMTPS、LDAPS、XMPPS等等。
因为发送消息所使用的数据格式对安全性并没有什么影响,所以消息中的数据可以以多种格式来表示。通常情况下,消息的数据格式为XML、JSON或HTML(而在使用ZAProxy的情况下是上述三种格式),所以最终用户在与应用程序进行交互时可以做一选择。在API应用中,有一点是最为重要的,即它们对于多种编程语言都是可扩展和可用的。所以如果使用了合适的协议,用户就可以很容易地使用任意的编程语言来编写程序与API进行交互。一个合适的协议是可以实现与应用程序的轻松交互的,多年以来它都是得到良好支持并通过实际使用验证的。一个众所周知的例子就是HTTP协议。一些常用于互联网消息交换的API类型包括REST、SOAP、XML-RPC以及 JSON-RPC等。
开发一个新的API
当为云计算应用开发一个全新的应用程序编程接口时,解决以下的问题将是当务之急:
身份:服务器是并不会自动识别首次使用云计算服务的用户的,因此它会要求进行身份证明。通常情况下,它会要求用户提供一个用户ID或公钥来唯一地标识一个用户。不幸的是,用户所提供的信息是公开的,因此,攻击者常被归类为一个特定的用户,但是它们将不能够决定性地证明这一点。
验证:为了证明一个用户的身份,服务器会自动生成一个验证问题。这个验证问题的答案是用户唯一知道的,它可以是一个密码、密钥、令牌或者其他别的什么。
授权:一旦用户证明了他或她的身份,特定应用程序就会请求访问权限。然后在用户获得准入权之前,这个应用程序会核对这个用户是否被允许访问所请求的资源或执行所请求的操作。
识别技术
应用程序是可以使用很多技术来识别和验证用户的身份的:
用户名和密码:一对用户名和密码可通过基本的或摘要式的验证方式来提供用户认证。在这两个所使用的方法中,在HTTP请求中传送的密码是非加密格式的,所以如有必要,可使用一个诸如HTTPS这类的安全通讯通道。
会话:当用户名和密码被发送至应用程序时,应用程序就会以一个cookie作为响应,之后这个cookie就会在所有的后续识别请求中被发送。
证书:可使用一个公共的或私有的密钥基础设施来验证用户身份。这要求服务器和客户端都拥有由有效机构签发的证书,以用于建立证书的合法性。
开放授权:当一个应用程序使用另一个代表用户的应用程序时,一般会使用OAuth。例如,一个应用程序有一个“分享至推特”的按钮,那么它通常就会使用OAuth。该方法可授权应用程序访问推特的API,而无需透露应用程序的密码。
自定义身份验证方案:可使用一个自定义验证方案通过一个专用的协议来识别和验证用户。一个专用的协议通常并不是一个有利的选择,因为它只是在一个应用程序中使用。已知的协议通常都是更好的,因为用户熟悉它们,可以最大限度减少用户学习的时间。一个自定义验证方案应当由一支顶级的安全团队来具体实施,因为这是一个复杂而易出错的过程。
API密钥:在首次发送请求至服务器且在此之前会话还未建立时,可在用户的身份和验证中使用API密钥。简单来说,API密钥就是一个只被在服务器端运行的应用程序所知的唯一的长令牌,客户端会在API请求中发送这个API密钥。API密钥的方法要比用户名密码的方法更好,因为前者的信息熵更高,它能够更好地保护系统免受黑客攻击以及有限度地泄漏敏感信息。
结论
这些技术基础支撑着安全API的开发,尤其是当开发一个定制API时或者甚至当使用一个云计算供应商的API时。
当选择一家云计算服务供应商(CSP)时,应确定它是否能够提供API。此后,API将在实现程序或脚本程序自动化的过程中证明其价值。CSP应当拥有合适的文档和安全测试结果,以证明其API设计和安全的合法性。
使用定制API,聘请一位安全顾问或渗透测试师来定期测试API;在API正式进入生产阶段以及每次重大代码发布之前对API进行测试是非常关键的。这样做将有助于消除API被用于恶意攻击从而对应用程序用户的安全性造成不利影响的弱点。
在不久的将来,云计算一定会彻底走入我们的生活,有兴趣入行未来前沿产业的朋友,可以收藏云计算,及时获取人工智能、大数据、云计算和物联网的前沿资讯和基础知识,让我们一起携手,引领人工智能的未来!
标签: 安全 大数据 代码 服务器 服务器端 互联网 互联网安全 脚本 权限 数据库 网络 云计算 云计算服务 云计算应用
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。