如何通过预签名 URL 安全地传输文件 安全博客

如何安全地使用预签名 URL 传输文件

关键要点

现代企业需要安全共享大文件以及对私有数据的受控访问,以推动创新和提高客户体验。预签名 URL 提供了对 Amazon S3 对象的有限时间访问,避免了长期凭证的暴露。实现安全的预签名 URL 生成和使用是防止数据泄露的重要举措。

在大规模分布式工作和数字化持续扩展的时代,安全共享大文件及对私有数据的受控访问已成为现代组织的战略必需。有效的协作和信息交流是推动创新、加快决策和提高客户体验的关键。然而,保护敏感数据始终是优先事项,因为未经授权的曝光可能对组织造成严重后果。

预签名 URL 应对了这一挑战,同时维护了内部资源的治理。它们提供了对 Amazon Simple Storage Service (Amazon S3) 对象的临时访问权限,且可以配置详细的权限和过期规则。预签名 URL 提供安全的临时访问权限,使私有 Amazon S3 对象在不暴露长期凭证或要求公共访问的情况下,可以方便地进行协作和文件传输。

预签名 URL 也常用于受信任的业务应用之间交换数据。这种架构模式显著减少了通过网络传输的数据量,避免了文件转移。然而,在使用预签名 URL 时,实施保护措施以防止无意的数据曝光至关重要。

在本博文中,我们提供了在 AWS 中安全使用预签名 URL 的指导。我们展示了生成和分发预签名 URL 的最佳实践、安全考虑和监控使用情况及访问模式的建议。

预签名 URL 生成的最佳实践

确保安全的 预签名 URL 生成至关重要。将分层保护与业务目标对齐,有助于实现安全的临时数据访问。强化生成政策对于负责任地使用预签名 URL 也至关重要。以下是一些安全生成预签名 URL 的关键技术考虑:

紧密限制 AWS 身份与访问管理IAM 权限,仅限于所需的 Amazon S3 操作和资源,以减少意外暴露的风险。尽可能使用临时凭证如角色而非访问密钥。如果使用访问密钥,请定期轮换,以防止凭证被泄露后发生长期未经授权的访问。使用 VPC 端点 连接 S3,允许您的 Amazon 虚拟私有云Amazon VPC 直接访问 S3 存储桶,而无需经过互联网地址空间。这提高了隔离性和安全性。对生成操作要求 多因素身份验证MFA,以增强身份保证。采用 即时生成 策略,确保预签名 URL 的生命周期最小化。遵循 最小权限访问 和 传输加密,以降低使用预签名 URL 时意外数据访问和曝光的下游风险。在 URL 中使用唯一的随机值nonce以帮助防止未经授权访问,并验证 nonce 以防止重放攻击。这与时间限制访问结合可以有效降低 URL 被猜测的风险。

解决方案概述

预签名 URL 简化了受信任业务应用之间的数据交换,减少了对单独访问管理的需求。使用独特的、一次性的 nonce 可以通过最小化未授权使用和重放攻击来增强安全性。访问限制可以进一步提升安全性,通过限制预签名 URL 从单个应用的使用并在达到限制后撤销访问。

此解决方案实现了两个 API:

预签名 URL 生成 API访问对象 API

预签名 URL 生成 API

此 API 生成一个预签名 URL 和相应的 nonce,并将它们存储在 Amazon DynamoDB。它会返回供客户访问对象 API 的 URL。

小熊twitter加速器

以下架构展示了一个无服务器的 AWS 解决方案,通过生成带有唯一 nonce 的预签名 URL,为对 Amazon S3 对象提供安全、受控的一次性访问。Amazon API Gateway 接收用户请求,随后调用 AWS Lambda 函数 生成 nonce 和预签名 URL,并将其存储在 DynamoDB 中,以便进行验证,并返回预签名 URL 给用户。

生成有唯一 nonce 的预签名 URL

工作流程包括以下步骤:

生产者应用程序向生成预签名 URL 合法访问 Amazon S3 对象的请求。请求由 Amazon API Gateway 接收,作为 API 的入口点,路由请求到适当的 Lambda 函数。调用 Lambda 函数,其执行以下任务:为预签名 URL 生成唯一的 nonce。为请求的 S3 对象创建预签名 URL,设置特定的过期时间及其他访问条件。将 nonce 和预签名 URL 存储在 DynamoDB 表中,以便未来验证。生产者应用程序将 nonce 与其他接收数据的受信任应用程序分享。

访问对象 API

消费方应用程序从生产者应用程序接收负载中的 nonce。消费方应用程序使用访问对象 API 访问 Amazon S3 对象。在第一次访问时,nonce 会被验证,然后从 DynamoDB 中删除。这样,预签名 URL 的使用限制为一次。后续对此 URL 的请求会被 Lambda 授权器禁止,以增加安全性。

以下架构展示了一个无服务器 AWS 解决方案,使通过预签名 URL 安全访问 Amazon S3 对象成为可能。它使用 API Gateway 作为入口点,Lambda 授权器进行 nonce 验证,另一个 Lambda 函数通过与 DynamoDB 交互来进行访问重定向,并在后续删除 nonce 以防止再次访问同一 URL。

通过预签名 URL 安全访问 Amazon S3 的解决方案

如何通过预签名 URL 安全地传输文件 安全博客

工作流程由以下步骤组成:

消费方应用程序使用从生产者应用程序接收到的 nonce请求 Amazon S3 对象。API Gateway 接收请求,并使用 Lambda 授权器进行验证,以确定请求是否有效 nonce。Lambda 授权器的 ValidateNonce 函数验证 nonce 是否存在于 DynamoDB 表中,并将允许策略返回给 API Gateway。如果 Lambda 授权器发现 nonce 不存在,则意味着 nonce 已经被使用,并向 API Gateway 发送拒绝策略,从而不允许请求继续。当 API Gateway 接收到允许策略时,将请求路由到 AccessObject Lambda 函数。AccessObject Lambda 函数:从 DynamoDB 表中检索与 nonce 关联的预签名 URL唯一值。从 DynamoDB 表中删除 nonce,从而使预签名 URL 失效。将请求重定向到 S3 对象。后续尝试使用相同的预签名 URL 访问 S3 对象将被 Lambda 授权器拒绝,因为 nonce 已经从 DynamoDB 表中移除。

为帮助您理解该解决方案,我们开发了基于 Python 和 AWS CDK 的代码,您可以从 预签名 URL Nonce 代码 下载。该代码演示了如何在两个业务应用程序之间生成和使用预签名 URL。

前提条件

要跟随本文的示例,您需要具备以下项目:

一个 AWS 账户 ,以及与之相关联的 IAM 角色AWS 命令行界面 (AWS CLI)安装了 Python 3x 和 pip安装了 AWS 云开发工具包AWS CDK

实施解决方案

使用生成 URL 的 Lambda 函数生成并保存一个强随机 nonce 字符串,每当您以编程方式创建预签名 URL 时:

python def createnonce() # 生成一个 16 字节128 位的 nonce nonce = secretstokenbytes(16) return nonce

def storenonce(nonce url) res = ddbclientputitem(TableName=ddbtable Item={nonceid {S noncehex()} url {S url}}) return res

将 nonce 作为 URL 参数包含,便于在验证时提取。例如:消费方应用程序可以使用以下 URL 请求 Amazon S3 对象:https//ltyourdomaingt/stage/accessobjectnonce=ltnoncegt当访问该对象时,使用 Lambda 提取 nonce,在 Lambda 授权器中验证 nonce 是否存在。在 DynamoDB 表中查找提取的 nonce,验证它是否匹配生成的值:

python def validatenonce(nonce) try response = noncetablegetitem(Key={nonceid nonce}) print(The ddb key response is {}format(response)) except ClientError as e loggererror(e) return False

   if Item in response       # 找到 nonce       return True   else       # 未找到 nonce           return False

如果 nonce 是有效的并且在 DynamoDB 中找到,允许访问 S3 对象。nonce 在使用后从 DynamoDB 中删除,以防止重放。

python if validatenonce(nonce) loggerinfo(有效的 nonce nonce) return generatepolicy( Allow event[methodArn]) else loggerinfo(无效的 nonce nonce) return generatepolicy( Deny event[methodArn])

注意:您可以使用 Python 的 secrets 模块来提高 nonce 的安全性。Secretstokenbytes(16) 生成二进制令牌,而 secretstokenhex(16) 生成十六进制字符串。您还可以通过选择 32 字节的 nonce 进一步提高对 暴力攻击 的防护。

清理

为避免产生将来的费用,请使用下面的命令通过 AWS CDK 工具包清理您为此解决方案创建的所有资源:

cdk destroy force

有关 AWS CDK 工具包的更多信息,请参阅 工具包参考。

预签名 URL 共享和监控的最佳实践

确保在广泛共享预签名 URL 时进行适当的治理至关重要。这些措施不仅能安全地释放 URL 分享的好处,还能限制脆弱性。持续监控使用模式并实施自动撤销程序进一步增强保护。在满足业务需求的同时进行分层安全尤为重要。

使用 HTTPS 加密,强制使用 TLS 证书以保护传输中的 URL,并使用 S3 策略。在 S3 存储桶上定义详细的 CORS 权限,以限制哪些网站可以请求访问预签名 URL。配置 AWS WAF 规则,以检查请求头中 nonce 的存在,限制请求速率,并只允许是已知来源的经批准 IP 地址使用。同时使用 AWS WAF 监控和过滤可疑的访问模式,并将 API Gateway 和 S3 访问日志 发送到 Amazon CloudWatch 进行监控:启用 WAF 日志:使用 WAF 日志将 AWS WAF web ACL 日志发送到 Amazon CloudWatch Logs,提供详细的访问数据,以分析使用模式并检测可疑活动。验证 nonce:创建 Lambda 授权器,要求在头信息或 URL 参数中包含正确格式的 nonce。阻止缺少预期 nonce 的请求。这可以防止使用无效 URL 的重放攻击。实施速率限制:如果 nonce 未被使用,配置 AWS WAF 基于速率的规则,以允许正常的使用水平并设置阈值以限制单个 IP 地址发出的过多请求。当定义的速率限制被超越时,WAF 会自动开始阻止来自该 IP 的请求,有助于抵御试图用大量请求淹没系统的拒绝服务攻击。配置 IP 白名单:通过定义 AWS WAF 规则,仅允许从预先批准的 IP 范围例如:您组织的 IP 或其他可信来源发送请求。WAF 将仅允许来自指定信任的 IP 地址的访问,有助于阻止不受信任的 IP 利用共享的预签名 URL。通过查看 CloudWatch Logs 中的访问日志分析日志和指标。这使您能够检测请求数量、模式和来源 IP 地址的异常。此外,通过汇总相关指标并设置 CloudWatch 警报以通知活动峰值,密切监控日志数据和指标将有助于发现可能需要进一步调查或采取措施的问题或可疑行为。

通过建立对预签名 URL 使用的持续可见性、实施快速撤销能力以及采取适应性安全政策,您的组织能够在共享这些临时访问机制的固有风险下,维持有效的监督和控制。应密切监测关于预签名 URL 使用的分析内容,例如访问日志、拒绝请求和完整性检查。

结论

在这篇博文中,我们展示了预签名 URL 作为安全数据共享机制的潜力。通过严格遵循最佳实践、实施严格的安全控制和保持警惕的监控,您可以在协作效率与数据保护之间找到平衡。这种前瞻性的做法不仅加强了对潜在威胁的防御,同时还确立了预签名 URL 作为支持可持续、安全数据协作的可靠和实用解决方案。

后续步骤

对您的当前数据共享实践进行全面审查,以确定预签名 URL 可能增强安全性和效率的区域。实施本文中概述的建议最佳实践,以在您的 AWS 环境中安全生成、共享和监控预签名 URL。持续监控使用模式和访问日志,以检测异常和潜在的安全漏洞,并实施自动响应以快速降低风险。关注 AWS 安全博客 阅读更多此类文章,及时了解 AWS 安全的最新发展。

如果您对本文有反馈,请在评论部分提交意见。如果您对本博文有疑问,请 联系 AWS 支持。

想了解更多 AWS 安全新闻?关注我们的 Twitter。

Sumit Bhati

Sumit 是 AWS 的高级客户解决方案经理,专注于加

更高级的 Zloader 恶意软件变种出现 媒体

更高级的 Zloader 恶意软件变种出现 媒体

Zloader 恶意软件升级与增强隐蔽性关键要点Zloader也称为 DELoader、Terdot 或 Silent Night已通过定制 DNS 隧道集成进一步优化,提升了指挥和控制通信的隐蔽性。新版 Zloader 支持任意二进制执行、数据提取、进程终止等多种功能。它利用域生成算法并进行环境检...

搜索

免费加速器iOS下载

小熊twitter加速器,成立于2007年,是一家位于中国黑龙江省五大连池市的创新型企业。自成立以来,公司致力于为全球用户提供安全、便捷、创新的数字货币交换和管理服务。作为行业的先锋,小熊twitter加速器利用先进的区块链技术打造一个去中心化的金融生态系统,旨在推动传统金融与现代技术的融合。

小熊twitter加速器拥有一支由各领域顶尖专家组成的团队,包括资深的金融分析师、经验丰富的软件工程师、以及区块链技术的先驱者。这支团队共同协作,不断研发和优化我们的技术和服务,确保能够在迅速变化的市场中保持领先地位。公司的技术平台支持多种加密货币的交易和存储,包括比特币、以太坊、莱特币等主流数字货币,同时也不断探索和添加新兴的加密货币,以满足市场需求。

在安全性方面,小熊twitter加速器采用多层次安全策略来保护用户的资产和数据。我们的系统设计了多个安全层,包括实时监控、自动化的风险管理系统,以及强大的加密技术,确保所有交易数据的安全性和隐私性。此外,公司还与全球多家顶级安全机构合作,定期对我们的系统进行安全审计和升级。

公司不仅在提供加密货币交易和管理服务上不断创新,在推动区块链技术的普及和应用上也是行业的领跑者。小熊twitter加速器积极参与国内外的区块链研究和开发项目,与多家大学和科研机构合作,推动区块链技术在金融、物流、医疗等多个领域的应用研究。

作为地处五大连池市的高科技企业,小熊twitter加速器生根于这片富有极地地貌的独特土地,将东北老工业基地的坚韧精神与新时代科技革命的创新活力成功结合。公司未来的发展方向是构建一个全球化的数字货币交易和金融服务平台,为用户提供更多元化、一体化的金融解决方案,推动全球金融市场的发展和进步。

在未来,小熊twitter加速器将继续拓展国际市场,与更多国际合作伙伴建立合作关系,扩大我们的业务范围,并致力于成为全球领先的数字货币和区块链技术服务提供商。在数字货币日益被广泛接受的今天,小熊twitter加速器将持续在创新与安全的道路上前行,为全球用户提供更加优质的服务和更为可靠的技术支持。