跳转到主要内容
Chinese, Simplified

保护亚马逊API应用程序中的敏感数据

摘要

客户相信他们的数据是安全的,加密是保持这种机密性的机制。这些数据的示例包括但不限于个人身份信息(PII)、密码和专有信息。通过使用密钥,数据从可读的“明文”格式转换为不可读的密文形式。另一种方法是使用密钥加密/锁定数据,只有持有相应密钥的另一方(可能是设备或个人)才能解密/解锁数据。本白皮书中的其他指导将帮助您保护客户共享和委托给您的敏感数据。

数据保护策略(DPP)要求(Data Protection Policy )

  • 传输中的加密:开发人员必须对传输中的所有亚马逊信息进行加密(例如,当数据通过网络或在主机之间发送时)。这可以使用HTTP over TLS 1.2(HTTPS)来实现。开发人员必须对客户使用的所有适用的外部端点以及内部通信通道(例如,存储层节点之间的数据传播通道、与外部依赖项的连接)和操作工具实施此安全控制。开发人员必须禁用在传输过程中不提供加密的通信通道,即使这些通道未使用(例如,删除相关的死代码,仅使用加密通道配置依赖关系,以及将访问凭据限制为使用加密通道)。

开发人员必须使用数据消息级加密(例如,使用AWS加密SDK),其中通道加密(例如使用TLS)终止于不可信的多租户硬件(例如,不可信的代理)。

  • 静态加密:开发人员必须使用行业最佳实践标准(例如,使用AES-128位或更大的密钥,首选AES-256位,或2048位(或更高)密钥大小的RSA)对所有静态PII进行加密(例如,当数据持久化时)。用于静态PII加密的加密材料(如加密/解密密钥)和加密功能(如实现虚拟可信平台模块和提供加密/解密API的守护进程)必须只能由开发人员的流程和服务访问。开发者不得将PII存储在可移动媒体(如USB)或不安全的公共云应用程序(如通过Google Drive提供的公共链接)中。

 

开发人员必须安全地处理任何包含PII的打印文档。

数据加密的基础

随着组织寻求更快、更大规模的运营,保护关键信息变得更加重要。通过加密来保护数据的安全会以一种使内容无法读取的方式转换内容,而无需将内容解密回可读格式。加密是将明文编码为另一种称为密文的格式。要加密消息(数据),需要一个密钥。对于数据加密,我们使用密钥(也称为秘密)来加密(锁定)和解密(解锁)消息。只有拥有正确密钥的个人/设备才能解密消息并读取其内容。加密有助于保护亚马逊信息的安全。即使恶意用户获得了密文,如果没有解密密钥,他们也无法读取消息的内容。此外,这些加密密钥在其整个生命周期中都必须受到保护,以防止未经授权的使用、访问、披露和修改。请记住,散列函数和加密是有区别的。散列函数是一种用于将大的随机大小数据转换为小的固定大小数据的加密算法。哈希允许对数据进行验证。另一方面,加密是对消息进行加密和解密的两步过程。加密通过使未经授权的访问无法理解数据来保护数据。数据可以在静止或传输过程中进行加密。使用NIST 800-53作为其框架的开发人员可以参考系统和通信保护(SC),以获得有关保护其环境的具体指导。NIST的主要控制之一是SC-13密码保护。SC-13确定了具体的控制,提供了额外的细节,以帮助开发人员了解亚马逊MWS和SP-API加密要求。

开发人员必须使用加密来保护亚马逊信息和客户PII。在下一节中,我们介绍了数据加密的关键组件,并提供了建议,以帮助开发人员遵守亚马逊MWS和SP-API数据保护政策(DPP)加密要求。

数据分类

数据分类提供了一种根据敏感度级别对组织数据进行分类的方法。它包括了解可用的数据类型、数据存储位置、访问级别和数据的安全性。亚马逊信息可以分为两类数据:PII和非PII。PII数据是可用于识别亚马逊客户的任何数据。非PII数据是任何其他亚马逊数据,例如产品列表信息。开发人员可以通过仔细管理符合DPP要求的适当数据分类系统、访问级别和数据加密来保护亚马逊信息。可用于识别亚马逊客户的亚马逊信息必须加密,必须以受保护的方式存储,并且必须需要授权访问。亚马逊建议采用深度防御的方法,减少人工访问亚马逊客户PII的次数。开发人员在其应用程序中必须具有强大的身份验证机制。此外,开发人员必须确保到其应用程序的所有连接都源自受信任的网络,并具有所需的访问权限。

数据完整性

开发人员必须确保其系统中的亚马逊信息在其系统中移动时保持其完整性。加密散列函数是建立数据完整性的可靠方法。哈希函数是一种不可逆函数,其中任意大小的原始数据被映射到固定大小的哈希值。如果开发人员通过下载提供亚马逊信息,其完整性面临两个主要威胁:网络/存储问题导致的意外数据更改和攻击者的篡改。开发人员可以通过使用哈希函数来验证文件的完整性来减轻这些威胁。例如,开发人员可以在文件可供下载之前对其内容进行散列。当文件被上传回应用程序时,开发人员可以对上传的文件运行哈希函数,并将哈希输出与原始文件的输出进行比较,以验证文件的完整性。无论数据更改是由网络或存储问题意外引起的,还是由攻击者故意引起的,这都能提供最佳的保护,防止数据更改。开发人员可以通过使用多个哈希函数验证哈希来增强他们对数据完整性的信心。

传输中的加密

当数据从一个系统传输到另一个系统时,它很容易受到未经授权的用户或第三方的干扰。数据传输可能仅限于开发人员的专用或公共网络,并且仍然容易受到恶意攻击。

开发人员必须通过在传输中实施加密来保护传输中的亚马逊信息,包括其他服务和最终用户之间的通信。这有助于保护数据的机密性和完整性。

传输中的加密通过使用支持的加密协议(如TLS 1.2或HTTPS(HTTP over TLS))来保护信息。必须在所有外部和内部端点上强制执行此级别的加密。通过通道传播的数据、与外部依赖项的连接和操作工具必须在传输过程中使用加密进行保护。在传输亚马逊信息时,必须对所使用的通信信道进行加密,以免出现未经授权的干扰。最佳做法是加密和验证所有流量。在NIST 800-53中,传输中的加密在控制SC-8传输机密性和完整性中进行了概述。利用这种控制的开发人员应该考虑采用SC-8控制增强,因为每种增强都可以为传输中的数据提供额外的保护。

开发人员在加密传输中的数据时应考虑以下几点:

  • 禁用传输中无法支持加密的通信信道。
  • 避免通过多租户基础设施节点路由流量。
  • 如果不允许端到端TLS,请使用数据消息级别加密。

 

https

Figure 1: HTTPS protocol in use

Table 1 lists some Amazon-compliant security protocols for encrypting data in transit.

Transfer Type Insecure Protocols (Non-Compliant) Secure Protocols (Compliant)
Web Access HTTP HTTPS with TLS 1.2+
E-Mail Servers POP3, SMTP, IMAP POP3S, IMAPS, SMTPS
File Transfer FTP, RCP FTPS, SFTP, SCP, WebDAV over HTTPS
Remote Shell Telnet SSH-2
Remote Desktop VNC r-admin, RDP

Table 1: Secure vs Insecure protocols to encrypt data in transit

静止时的加密

每当开发人员将亚马逊信息保存在数据存储中时,都必须对其进行保护。数据存储是指可以在指定时间段内保存和保留数据的任何存储介质。数据库解决方案、块存储、对象存储和归档数据块都是必须保护的数据存储示例。开发人员可以使用加密来保护数据存储中的数据——这被称为静态加密。实施加密和适当的访问控制可以降低未经授权访问的风险。在NIST中,静态加密在SC-28静态信息保护中进行了解释。SC-28(1)旨在通过密码学保护静态信息,SC-28(2)旨在通过离线存储保护信息。正如亚马逊MWS和SP-API DPP中所解释的,这两种控制都是处理亚马逊客户PII的开发人员所必需的。最佳做法是在将亚马逊信息上传到存储目的地之前对其进行加密,并使用经批准的加密算法保护存储本身。这在两个级别上保护数据:在从源到存储目标的传输过程中,以及在数据在存储目标中的整个使用寿命中。

使用AmazonS3进行存储的开发人员可以使用S3的本地加密功能来保护静止的数据。您不“加密S3”或“加密S3存储桶”,而是S3会在对象级别加密您的数据,因为它会写入AWS数据中心的磁盘。开发人员可以选择通过两种方式进行加密,一种是刚才描述的服务器端加密(SSE)示例,另一种是客户端加密(CSE)

当开发者想要更多的控制权时,他们可以选择CSE,并负责编写如何加密和解密数据的代码,决定加密算法,从哪里获得密钥,以及发送加密数据。当对象在上传到S3之前被加密时,就会发生CSE(因此密钥不由AWS管理)。开发人员可以实现AmazonS3存储桶策略,防止上传未加密的对象。如果开发人员不需要管理主密钥,那么他们可以使用S3管理的加密密钥(SSE-S3)进行服务器端加密,或者使用AWS KMS管理的密钥(SSE-KMS)进行服务器侧加密。AmazonS3使用信封加密保护静止的数据。每个对象都使用一个唯一的密钥进行加密,该密钥采用强多因子加密。作为额外的保护措施,AWS使用AWS KMS密钥对密钥进行加密。AmazonS3服务器端加密使用AES-256对数据进行加密。在图2中,加密解决方案保护加密密钥和数据。在其他渠道或云提供商中存储数据的开发人员将能够使用他们本机的类似工具(例如Azure密钥库和GCP默认加密)。

Encryption_at_rest

图2:AmazonS3中静止的加密

有关更多信息,请参阅:如何防止未加密对象上传到AmazonS3。

加密类型

以下是常见的加密类型:

  • 对称加密。这使用相同的密钥进行加密和解密。因此,发送方和接收方必须具有相同的密钥。
  • 不对称加密。这要求发送方和接收方使用不同的密钥——公钥和私钥。公钥被广泛共享,但私钥只由其所有者保护和使用。私钥用于加密数据,公钥用于解密数据。
  • 信封加密。这是用加密密钥加密数据,然后用另一个密钥加密加密密钥的做法。

一般来说,对称密钥算法比非对称算法更快,产生的密文更小。但非对称算法提供了固有的角色分离和更容易的密钥管理。信封加密使开发人员能够结合对称和非对称算法的优势。当开发者加密亚马逊信息时,加密密钥也必须受到保护。信封加密有助于开发人员保护加密密钥本身。

使用SSE-KMS的开发人员可以使用一个加密密钥对数据进行加密,并使用另一个密钥对加密密钥进行加密。一个密钥保持为纯文本,因此客户端能够解密加密密钥并使用解密的加密密钥来解密数据。

顶级明文密钥被称为AWS KMS密钥。

KMS

图3:AWS KMS存储和管理AWS KMS密钥

有关更多信息,请参阅AWS密钥管理服务。

密钥大小在定义加密密钥的强度时很重要。根据Amazon DPP的要求,密钥的长度必须至少为128位。亚马逊建议开发人员为亚马逊客户PII使用大于128位的密钥(首选256位)。额外的比特成倍地增加了针对加密密钥的暴力攻击的复杂性。对称256位密钥所需的计算能力是128位密钥的2128倍。开发人员应该轮换他们的加密密钥以进一步保护他们的系统。尽管较大的密钥大小更难破解,但暴露的密钥可能会使密钥大小变得无关紧要,因为未经授权的实体可以使用暴露的密钥访问亚马逊信息。关于密钥轮换的具体指导可以在NIST 800-53控制SC-12加密密钥建立和管理中找到。SC-12控件及其增强功能可以帮助开发人员以其组织可以接受的方式建立、保护和轮换密钥,同时确保密钥在需要时仍然可用。

亚马逊API应用程序可接受的加密标准

以下是开发人员应使用的常用和推荐的加密标准的概述:

高级加密标准(AES)

高级加密标准(AES)是一种使用分组密码的对称加密算法。分组密码将固定文本块加密为等长密码文本块。AES对长度为128位的固定长度块进行操作,可配置的对称密钥长度为128、192或256位。即使使用128位密钥,通过检查2128个可能的密钥值中的每一个来破解AES的任务(蛮力攻击)也是计算密集型的,因此最快的超级计算机平均需要超过100万亿年才能完成。如果开发者选择使用AES密钥,密钥大小必须是AES 128位或更大(根据亚马逊DPP的要求)。亚马逊建议使用AES-256。亚马逊还批准使用AES-GCM/CBC/XTS。

Rivest-Shamir-Adlemen加密标准(RSA)

Rivest-Shamir-Adlemen加密标准(RSA)是一种非对称算法,使用公钥加密在不安全的网络上共享数据。RSA对两个大素数的乘积即大整数进行因子运算,以确定密钥大小。它通常使用1024位或2048位密钥。较大的密钥大小提供了更大的安全性,但使用更多的计算能力来加密和解密信息。如果开发人员选择RSA作为他们的加密标准,他们必须确保他们的密钥至少是2048位,这是亚马逊DPP的要求。

其他加密算法

虽然开发人员可以使用其他加密标准,但Amazon DPP要求开发人员使用AES或RSA。表2列出了亚马逊批准的加密算法。

Encryption algorithm Amazon-approved type
AES 256-bit (preferred)
128-bit or larger keys
AES with GCM mode 96-bit cryptographically random initialization vector
128-bit tag length
AES with CBC mode 128-bit cryptographically random initialization vector
PKCS7 padding
AES with XTS mode Linux: dm-crypt, LUKS Amazon EBS encryption
RSA 2048-bit or larger keys
RSA with OAEP

Table 2: Amazon API Applications approved encryption algorithms

AWS软件开发工具包(SDK)提供了一个客户端加密库,简化了加密的实现。默认情况下,它实现了一个框架,通过如何使用唯一加密密钥和保护这些密钥的行业密码学最佳实践来确保数据的安全。SDK是在GitHub开源库上开发的,因此您可以分析代码、提交问题并查找特定于您的实现的信息。

不使用的标准

这些标准已被业界研究并证明是不安全的:

  • DES
  • RC4
  • RSA-PKCSv1.5 with 1024-bit keys
  • RSA-OAEP with 1024-bit keys
  • Blowfish
  • Twofish

加密的最佳做法

以下是加密亚马逊信息的一些最佳实践:

  • 不受保护的数据,无论是在传输中还是在休息时,都会使企业容易受到攻击。开发人员应确保所有数据都通过加密进行保护。开发人员应遵循以下最佳实践,对传输中和静止数据进行强有力的保护:
  • 实施强大的网络安全控制,以帮助保护传输中的数据。例如,开发人员可以使用防火墙和网络访问控制列表来保护他们的网络免受恶意软件攻击或入侵。
  • 实施主动的安全措施,识别有风险的数据,并对传输和休息中的数据实施有效的数据保护。不要等到发生安全事件才实施安全措施。
  • 选择具有启用用户提示和阻止的策略,或自动加密传输中的PII数据的策略的解决方案。例如,当带有PII数据的文件附加到电子邮件、大型或敏感数据文件集传输到外部文件共享网站时,应用程序必须显示警告或阻止该操作\
  • 创建对所有亚马逊信息进行系统分类的策略。
  • 无论数据存储在何处,都应确保在数据处于静止状态时采取适当的数据保护措施。
  • 当未经授权的各方访问、使用或传输任何数据时生成触发器。
  • 根据用于存储亚马逊信息的公共、私有或混合云提供商提供的数据安全措施,仔细评估这些提供商。

传输中的数据和静止中的数据的风险状况略有不同,但固有的风险主要取决于亚马逊信息的敏感性和价值。不良行为者会试图在传输或休息时访问有价值的数据。重要的是对数据和安全协议进行分类和分类,以在每个阶段有效保护亚马逊信息。您可以遵循的步骤:

  • 将亚马逊信息分类为敏感级别,并对关键数据进行加密。亚马逊客户PII必须始终使用亚马逊批准的加密机制进行加密。
  • 建立自动化策略,提示或自动加密传输中的关键数据。
  • 使用公开可用的同行评审算法(如AES和密钥)进行加密和解密。
  • 使用云基础设施的开发人员必须根据云供应商提供的安全措施和他们持有的安全合规证书来评估他们。

结论

所有数据,尤其是PII,在静止和传输过程中都应该使用加密进行保护。通过对客户委托我们的数据进行加密,我们可以确保没有未经授权的第三方可以出于恶意目的访问和滥用数据。您可以通过这里共享的加密标准、应用策略、访问控制和其他记录在案的最佳实践等机制来实现这一点,以供进一步阅读。

进一步阅读

有关更多信息,请参阅:

原文地址
https://developer-docs.amazon.com/sp-api/docs/protecting-amazon-api-applications-data-encryption
本文地址
Article

微信

知识星球

微信公众号

视频号