公司新闻

在 AWS Transfer Family 工作流程中实现最小特权访问 存储博客

datetime

2026-01-27 13:33:09

阅读数量

8

在 AWS Transfer Family 工作流中实现最小权限访问

关键要点

本文介绍如何在 AWS Transfer Family 工作流中实现最小权限访问,确保用户只能访问经过严格控制的必要资源。通过利用 AWS 身份与访问管理IAM角色和策略,可以有效降低不必要的数据存取风险。

今天的企业需要架设安全的数据传输工作负载,以确保每位最终用户在成功验证后,仅能访问最低限度的文件和资料夹。设计这类身份验证及访问控制需要多个 IAM 角色,而客户经常面对难以管理最小权限访问政策的挑战。如果 IAM 政策配置不当或过于宽松,可能会增加敏感数据被未授权用户访问的风险。

在每一层工作负载中实现最小权限访问,有助于减少过于宽松的政策和角色所带来的风险。实施最小权限的使用者,仅赋予执行特定行动所需的最低访问权限。IAM 政策允许用户指定服务操作、资源和必须满足的条件,以便 AWS 允许或拒绝每一请求的访问。

接下来,我们将解释 Transfer Family 如何使用 IAM 角色和政策进行安全的信息转移,并通过采用示例架构步骤,部署 AWS CloudFormation 模板来加深理解。

让我们开始吧!

解决方案概述与样本架构

在这一架构中,Transfer Family 用户通过安全文件传输协议SFTP进行身份验证并上传文件。文件会被放入名为 S3BucketNewRecords 的 Amazon S3 存储桶中。上传成功后,Transfer Family 管理的工作流将被触发。如果工作流在任意点失败,则会调用异常处理器,并通过 AWS Lambda 函数通知管理员上传失败,并将通知发布到 Amazon Simple Notification Service (Amazon SNS)。

工作流步骤:

文件被复制到名为 S3BucketArchivedRecords 的 S3 存储桶中。存档对象被标记,以符合 S3 存储桶的存档条件。自定义工作流步骤调用一个 Lambda 函数,将 CSV 文件中的记录载入到 Amazon DynamoDB 表中。工作流删除原始上传的文件,并将其从 Transfer Family 用户的文件夹中移除。

前提条件

要跟随本帖内容,您必须拥有一个 AWS 帐户。

加速器官网推荐

解决方案步骤

本解决方案展示如何:

部署 AWS 无伺服器应用模型SAM及其相关的 CloudFormation 模板。通过上传并处理 CSV 文件来测试工作负载。通过修改许可权来测试解决方案如何处理异常。

1 部署 AWS 无伺服器应用模型SAM及其相关的 CloudFormation 模板

在本节中,我们创建一个 AWS Cloud9 环境,并利用它来部署一个 SAM 应用,该应用创建以下资源:

Transfer Family 服务器Transfer Family 用户Transfer Family 管理的工作流Amazon SNS 主题DynamoDB 表两个 Amazon S3 存储桶两个 Lambda 函数用于自定义工作流步骤及异常处理五个 IAM 角色用户访问控制、日志、管理的工作流以及两个自定义工作流步骤创建 Cloud9 环境

为了部署 SAM 模板,我们使用 Cloud9 集成开发环境IDE。

访问 Cloud9 控制台。选择 创建环境。设置如下:

名称: awstransferfamilyleastprivilegeblog

环境类型: 新的 EC2 实例实例类型: t2micro平台: Amazon Linux 2超时: 30 分钟

连接: AWS 系统管理员

点击 创建。这会将你带回 Cloud9 环境页面。

从 Cloud9 IDE 列 中选择 打开。环境创建完成可能需要几分钟。创建安全壳层密钥

在 bash 终端中执行以下命令以创建安全壳层SSH密钥。当系统提示时,选择默认位置,并设置密码。

bashsshkeygen t rsa b 4096

运行以下命令,设定私钥的读取和写入权限:

bashchmod 600 /ssh/idrsa

运行以下命令,将公钥打印到终端。复制公钥并粘贴到文本编辑器以备后用。

bashcat /ssh/idrsapub

上传并启动 SAM 模板

使用 Cloud9 IDE 部署 SAM 模板。

选择 此文件 下载提供的 SAM 模板并解压缩。

bashwget https//awsstorageblogresourcess3uswest2amazonawscom/blog802/TF26IAMBlogzip ampamp unzip /TFampIAMBlogzip ampamp mv /TF amp IAM Blog/environment/transferworkflow/ / ampamp rm TFampIAMBlogzip ampamp rm rf TF amp IAM Blog ampamp cd /transferworkflow/

透过运行以下命令确认 SAM CLI 是否已加载:

bashsam version

执行以下命令以部署 SAM 模板:

bashsam deploy guided capabilities CAPABILITYNAMEDIAM

系统提示时,选择以下值:

堆叠名称: transferworkflow

AWS 区域:输入您希望部署模板的 AWS 区域 (useast1)我的电子邮件地址:输入您的电子邮件地址以接收 SNS 通知我的 SSH 密钥:您的 SSH 公钥我的 Transfer Family 用户名:按 “Enter” 保持为默认的 “myTransferFamilyUser”确认变更再部署:输入 “Y”允许 SAM CLI 角色创建:输入 “Y”禁用回滚:输入 “N”将参数保存在配置文件中:输入 “Y”SAM 配置文件:按 “Enter” 保持为默认的 “toml”SAM 配置环境:按 “Enter” 保持为默认部署此更改集:输入 “y”

在 AWS 区域 useast1 测试时,SAM 模板部署约需八分钟。

完成堆叠创建时,您将收到 AWS 通知电子邮件,请选择确认订阅。最小权限 IAM 角色政策

在本节中,我们将探讨 IAM 与 Transfer Family 之间的交集,包括用户访问控制、日志、管理的工作流和自定义工作流步骤。最小权限已在每个 IAM 角色和政策中实施。

以下架构显示了 Transfer Family 管理文件传输解决方案的 IAM 政策,并实施了最小权限。首先,服务管理的用户拥有自己的 IAM 角色和访问 Amazon S3 的政策。接下来,AWS Transfer Family 服务器拥有 IAM 角色及访问 Amazon CloudWatch 日志的政策。第三,Transfer Family 管理工作流拥有 IAM 角色,政策允许读取和写入 Amazon S3,并调用两个自定义步骤的 AWS Lambda 函数。最后,AWS Lambda 函数拥有访问其所需资源如 Amazon DynamoDB 和 SNS的权限,并能将其步骤的完成情况报告给 Transfer Family API。

用户访问控制

Transfer Family 使用 IAM 来管理 Transfer Family 用户的权限。在我们的例子中,用户仅需要上传文件到 Transfer Family 服务器,将 S3 对象放入 S3 存储桶 S3BucketNewRecords。为了实施最小权限原则,仅允许用户读取、写入和删除 S3BucketNewRecords 的对象,而不允许其他任何操作。查看政策,请转到 IAM 角色控制台,选择角色 transferworkflowTransferFamilyIAMRoleUser。然后,您可以展开名为 TransferFamilyIAMRoleUserIAMPolicy 的政策。

json{ Version 20121017 Statement [ { Action s3ListBucket Resource arnawss3{NewRecordsBucketName} Effect Allow Sid AllowListingOfUserFolder } { Action [ s3PutObject s3GetObject s3DeleteObject s3DeleteObjectVersion s3GetObjectVersion ] Resource arnawss3{NewRecordsBucketName}/ Effect Allow Sid HomeDirObjectAccess } ]}

用户可以在 New Records S3 存储桶中读取、写入和删除对象。虽然允许列出文件夹,但不允许访问存档存储桶或任何其他存储桶。

日志

Transfer Family 也利用 IAM 进行 Transfer Family 服务器的日志记录。我们使用 AWS 管理政策 AWSTransferLoggingAccess。请转到 IAM 角色控制台,选择名称为 transferworkflowTransferFamilyIAMRoleLogging 的角色。这是 AWS 建议的 Transfer Family 服务器日志记录的管理政策。

此政策授予 Transfer Family 创建 CloudWatch 日志流和日志组、列出日志组的日志流,以及向日志流上传一批日志事件的权限。这些权限提供了足够的访问权限,以确保对服务器的必要可见性,但同时保持最小权限,没有多余的访问。

请注意,2023 年 6 月,Transfer Family 宣布采用结构化 JSON 格式 整合所有资源,如服务器、连接器、工作流和所有协议。由于新日志格式的推出,除非用户正在使用工作流,否则选择日志角色将不再是强制性。

管理工作流

Transfer Family 使用 IAM 来执行 Transfer Family 管理的工作流。Transfer Family 管理的工作流编排文件处理任务,并帮助您进行数据预处理。编排者需要访问 AWS 服务来完成每种类型的工作流步骤。为实施最小权限授权,必须根据工作流步骤授予权限。请转到 IAM 角色控制台,选择名为 TransferFamilyWorkflowExecution 的角色。每个步骤类型都有相应的政策。

该工作流具备列出 S3 存储桶 New Records 和 Archive Records 的权限。其他存储桶可能存在,但由于管理工作流不需要访问其他存储桶以完成任务,因此访问已受到限制。

在 New Records 存储桶中,工作流仅有访问权限来读取、标记和删除对象。在 Archive Records 存储桶中,管理工作流被允许写入和标记对象。

该工作流还具备调用两个 Lambda 函数LambdaExtraction 和 LambdaException的权限。管理工作流仅被授予调用 Lambda 函数的能力。

自定义工作流步骤

最后,Transfer Family 管理的工作流自定义步骤使用需要 IAM 角色的 Lambda 函数,将步骤状态报告回 Transfer Family 服务。如前所述,我们的架构包含两个 Lambda 函数,一个用于将 CSV 加载到 DynamoDB,另一个用于在工作流失败时进行异常处理。

这两个 AWS Lambda 函数的 IAM 政策对授权范围进行了精确限制,仅保留执行必要操作及向工作流报告状态所需的权限。查看这些权限,请转到 IAM 角色控制台,选择角色 LambdaException 和 LambdaExecution。

TransferFamilyWorkflowState 政策对于使用 Transfer Family 工作流的两个 Lambda 函数都是必需的,以向编排者发送成功响应。

json{ Version 20121017 Statement [ { Action transferSendWorkflowStepState Resource arnawstransfer{AWSRegion}{AWSAccountId}workflow/ Effect Allow } ]}

其他政策基于每个 Lambda 函数所需的对其他 AWS 资源的授权。LambdaException 函数被分配的 IAM 角色包括一个名为 AWSLambdaBasicExecutionRole 的 AWS 管理策略。这授予 Lambda 创建 CloudWatch 日志组、创建日志流和添加日志事件的能力。LambdaException 角色还包括向 SNS 主题发布的政策。第二个 Lambda 函数的角色,LambdaExtraction,包括与 LambdaException 相同的 IAM 政策,但增加了对 DynamoDB 表写入的政策。

在 AWS Transfer Family 工作流程中实现最小特权访问 存储博客

2 通过上传和处理 CSV 文件来测试工作负载

接下来,我们将通过上传提供的 CSV 文件来测试工作流。

从 Cloud9 实例的 transferworkflow 目录中,复制 TransferFamilyServer 的值,该值来自 SAM 部署的 Outputs 部分,格式为:s{ServerId}servertransfer{AWSRegion}amazonawscom。运行以下命令登录到服务器。在提示是否要连接时,确认 “yes”。

bashsftp myTransferFamilyUser@ltinsert your Transfer Family endpoint heregt

运行以下命令将文件上传到 Transfer Family 服务器。上传后,文件将被 Transfer Family 工作流处理。

bashput democsv

若要确认 Transfer Family 工作流成功完成,您可以导航到 CloudWatch 日志。选择 /aws/transfer/s{ServerId},选择 查找所有日志流,然后查找 Transfer Family 工作流执行的连续步骤。确认您的文件