本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Transfer Family、Amazon Cognito 和 GuardDuty
Manoj Kumar,亚马逊 Web Services
摘要
此解决方案可帮助您使用 AWS Transfer Family安全地通过 SFTP 服务器传输文件。它包括通过 Amazon 的一项功能 S3 恶意软件防护提供的自动恶意软件扫描功能 GuardDuty。它专为需要与外部各方安全交换文件并在处理之前验证所有传入文件是否经过恶意软件扫描的组织而设计。
此模式提供的基础设施即代码 (IaC) 模板可帮助您部署以下内容:
通过亚马逊 Cognito 身份验证的安全 SFTP 服务器 AWS Lambda
亚马逊简单存储服务 (Amazon S3) Semple Service 存储桶,用于存放经过恶意软件扫描的上传文件和传入文件
基于虚拟私有云 (VPC) 的架构,具有跨多个可用区的公有和私有子网
对入口和出口流量进行基于 IP 的访问控制,具有可配置的允许和拒绝列表
通过自动扫描恶意软件 GuardDuty
根据扫描结果通过 Amazon EventBridge 和 Lambda 进行智能文件路由
通过亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 实时通知安全事件
通过 () 对 Amazon S3 存储桶和 Lambda 环境变量 AWS Key Management Service 进行加密AWS KMS
Amazon Virtual Private Cloud(亚马逊 VPC)终端节点,可在不暴露互联网的情况下进行访问
通过 Amazon CloudWatch 集成进行全面登录
先决条件和限制
先决条件
限制
S3 的恶意软件防护受限额,例如最大文件大小。有关更多信息,请参阅 GuardDuty 文档中的 S3 恶意软件防护配额和 Amazon S3 功能的支持性。
此解决方案仅使用 Amazon Cognito 用户名和密码身份验证。此模板不支持基于证书的身份验证方法或其他身份验证方法。默认情况下,此解决方案不配置多因素身份验证 (MFA)。
该解决方案仅通过安全组实现基于 IP 的访问控制。
架构
以下架构图显示了以这种模式部署的资源。此解决方案使用 Amazon Cognito 进行用户身份验证和授权。 AWS Transfer Family SFTP 服务器用于文件上传。文件存储在 Amazon S3 存储桶中,亚马逊 GuardDuty 会扫描文件中是否存在恶意软件。如果检测到恶意软件,Amazon SNS 会发送电子邮件通知。

图表显示了以下工作流:
用户连接到中的 SFTP 服务器端点。 AWS Transfer Family这将启动使用 Amazon Cognito 用户池的身份验证过程。
Lambda 函数启动身份验证和授权流程,并使用 Amazon Cognito 验证用户的证书。
Lambda 函数将
UploadBucket
亚马逊 S3 存储桶作为主目录返回。用户担任 Transfer Family 服务器的 IAM 角色,Lambda 函数会通知用户他们已成功通过身份验证。用户将文件上传到 Transfer Family SFTP 服务器。该文件存储在
UploadBucket
Amazon S3 存储桶中。GuardDuty 扫描文件中是否有恶意软件。潜在的扫描结果是
NO_THREATS_FOUND
THREATS_FOUND
、UNSUPPORTED
、ACCESS_DENIED
、和FAILED
。有关示例结果,请参阅 GuardDuty 文档中的 S3 对象扫描结果。EventBridge 规则检测扫描结果事件。
EventBridge 启动文件路由 Lambda 函数。
Lambda 函数处理事件并根据扫描结果筛选文件,如下所示:
具有
NO_THREATS_FOUND
扫描结果的文件将被发送到CleanBucket
Amazon S3 存储桶。具有
THREATS_FOUND
扫描结果的文件将被发送到MalwareBucket
Amazon S3 存储桶。具有
UNSUPPORTED
扫描结果的文件将被发送到ErrorBucket
Amazon S3 存储桶。具有
ACCESS_DENIED
扫描结果的文件将被发送到ErrorBucket
Amazon S3 存储桶。具有
FAILED
扫描结果的文件将被发送到ErrorBucket
Amazon S3 存储桶。
所有文件都使用加密 AWS KMS key。
如果向
MalwareBucket
亚马逊 S3 存储桶发送了文件,则 Lambda 函数会启动亚马逊 SNS 主题。Amazon SNS 主题向您配置的电子邮件地址发送电子邮件通知。
工具
AWS 服务
Amazon CloudWatch 可帮助您实时监控您的 AWS 资源和运行的应用程序 AWS 的指标。
Amazon Cognito 为您的 Web 和移动应用程序提供身份验证、授权和用户管理。
Amazon EventBridge 是一项无服务器事件总线服务,可帮助您将应用程序与来自各种来源的实时数据连接起来。例如, AWS Lambda 函数、使用 API 目的地的 HTTP 调用端点或其他 AWS 账户目的地的事件总线。
Amazon GuardDuty 是一项持续的安全监控服务,可分析和处理日志,以识别您的 AWS 环境中意外和可能未经授权的活动。
AWS Key Management Service (AWS KMS) 可帮助您创建和控制加密密钥以帮助保护您的数据。
AWS Lambda 是一项计算服务,可帮助您运行代码,无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。
Amazon Simple Notification Service (Amazon SNS) 可帮助您协调和管理发布者与客户端(包括 Web 服务器和电子邮件地址)之间的消息交换。
Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。
AWS Transfer Family帮助您通过 SFTP、FTPS 或 FTP 协议将文件传入和传出 AWS 存储服务。
Amazon Virtual Private Cloud(亚马逊 VPC)可帮助您将 AWS 资源启动到您定义的虚拟网络中。该虚拟网络类似于您在数据中心中运行的传统网络,并具有使用 AWS的可扩展基础设施的优势。
代码存储库
此模式的代码可在 GitHub AWS Transfer Family 和 GuardDuty 恶意软件扫描解决方案
最佳实践
提供的 CloudFormation 模板旨在整合许多 AWS 最佳实践,例如 IAM 角色和策略的最低权限权限、静态和传输中的加密以及自动密钥轮换。对于生产环境,请考虑实施以下其他建议:
为亚马逊 Cognito 用户启用 MFA
AWS Shield实现分布式拒绝服务 (DDoS) 保护
AWS Config针对持续合规性监控进行配置
实现全面AWS CloudTrail的 API 日志记录
将 Amazon 设置 GuardDuty为除恶意软件扫描之外的威胁检测
实施集中AWS Security Hub式安全管理
AWS Secrets Manager用于凭据管理
使用流量镜像实现网络流量监控
配置 Amazon Macie 以在亚马逊 S3 中发现和保护敏感数据
定期进行安全评估和渗透测试
制定正式的事件响应计划
对所有组件实施自动修补
定期对管理员进行安全培训
设置多AWS Organizations账户安全管理
操作说明
Task | 描述 | 所需技能 |
---|---|---|
克隆存储库。 | 输入以下命令将 GuardDuty 恶意软件扫描解决方案
| 应用程序开发者、 DevOps 工程师 |
创建 CloudFormation 堆栈。 |
| 云管理员、 DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
开启恶意软件防护。 |
| 云管理员、AWS 管理员 |
将用户添加到用户池。 | 向 Amazon Cognito 用户池中添加一个或多个用户。有关说明,请参阅 Amazon Cognito 文档中的管理用户池中的用户。 | 云管理员、AWS 管理员 |
Task | 描述 | 所需技能 |
---|---|---|
连接到 SFTP 服务器端点。 |
| 应用程序开发人员、云管理员、云架构师、 DevOps 工程师 |
故障排除
事务 | 解决方案 |
---|---|
用户身份验证失败 |
有关可以帮助您执行这些疑难解答步骤的 AWS CLI 命令列表,请参阅 “其他信息” 部分中的用于故障排除的有用命令。 |
SFTP 身份验证失败 |
有关可以帮助您执行这些疑难解答步骤的 AWS CLI 命令列表,请参阅 “其他信息” 部分中的用于故障排除的有用命令。 |
文件上传访问被拒绝 |
有关可以帮助您执行这些疑难解答步骤的 AWS CLI 命令列表,请参阅 “其他信息” 部分中的用于故障排除的有用命令。 |
没有恶意软件扫描 |
有关可以帮助您执行这些疑难解答步骤的 AWS CLI 命令列表,请参阅 “其他信息” 部分中的用于故障排除的有用命令。 |
Lambda 函数错误 |
有关可以帮助您执行这些疑难解答步骤的 AWS CLI 命令列表,请参阅 “其他信息” 部分中的用于故障排除的有用命令。 |
相关资源
T@@ ransfer Family 网络应用程序(Transfer Family 文档)
其他信息
用于故障排除的有用命令
检查 CloudFormation 堆栈的状态:
aws cloudformation describe-stacks \ --stack-name <STACK_NAME>
列出 Amazon Cognito 用户池中的所有用户:
aws cognito-idp list-users \ --user-pool-id <USER_POOL_ID>
查看 Lambda 函数的日志:
aws logs describe-log-groups \ --log-group-name-prefix /aws/lambda/
检查以下各项的状态 GuardDuty:
aws guardduty list-detectors
检查安全组规则:
aws ec2 describe-security-groups \ --group-ids <SECURITY_GROUP_ID> \ --output table
检查 AWS Transfer Family 服务器的状态:
aws transfer describe-server \ --server-id <SERVER_ID>
列出 Amazon S3 存储桶中的所有文件:
aws s3 ls s3://<BUCKET_NAME>/ \ --recursive
检查 EventBridge 规则的状态:
aws events describe-rule \ --name <RULE_NAME>