亚马逊AWS官方博客

如何在中国区使用 Simple File Manager 便捷管理 Amazon Elastic File System

Amazon Elastic File System(Amazon EFS)提供了无服务器的完全弹性文件存储,无需预置或管理存储容量和性能即可共享文件数据。在大多数情况下,运维人员可以通过挂载文件系统或使用 Amazon DataSyncAmazon Transfer Family 等服务与 Amazon EFS 中的数据进行交互,包括文件的迁移、同步、上传、下载等操作。但在如下场景下,通过 WEB 交互页面访问 Amazon EFS 是一种更方便的选择。

  • 临时单个、或小批量文件上传、下载和删除等;
  • Amazon EFS 文件系统中的文件结构管理,包括创建文件目录等;
  • 浏览 Amazon EFS 文件系统中文件数据;
  • 从任何设备的浏览器访问 Amazon EFS 文件系统。

本篇文章主要介绍了如何结合 Amazon S3Amazon API GatewayAmazon Lambda 等相关服务实现一个 Simple File Manager 解决方案,用户可以使用简单的 WEB2 交互页面在现有的 Amazon EFS 文件系统中浏览、上传和下载文件,无需专业的 Linux 知识,也无需设置或维护任何专用的 Amazon Elastic Compute Cloud(Amazon EC2)或网络基础设施。

除此之外,针对在中国区部署 Simple File Manager 解决方案的特殊性,我们开发了单独的 Amazon CloudFormation 模板,集成了 Authing 作为认证模块,实现了完整的云上身份认证授权功能。

架构设计

  1. 用于托管 WEB 资源的 S3 存储桶。
  2. 使用 Authing 替代 Amazon Cognito 用户池,用于提供用户目录。注:此解决方案的 Amazon CloudFormation 模板不会自动创建 Authing 应用。具体配置方法详见后文。
  3. 用于为联合身份验证提供角色,以便进行 Web 交互界面身份验证和授权的 Amazon Cognito 身份池。
  4. 用于将文件系统操作从 Web 交互界面代理到 Amazon EFS 文件系统的 Amazon API Gateway。
  5. 用于支持文件管理器 API 的 Amazon Lambda 处理程序函数。
  6. 用于连接到 Amazon EFS 文件系统的 Amazon Lambda 文件管理器函数。
  7. 用于允许从 Lambda 访问 Amazon EFS 文件系统的访问点。

由于在中国区域使用 Amazon CloudFront 服务需要拥有自定义域名,因此本方案中不会使用 Amazon CloudFront 分配来为 Web 交互页面提供服务。用户也可根据业务场景需要自行创建 Amazon CloudFront 分配来加速访问。

在本方案中,用户可以通过访问 Amazon S3 静态网站地址,跳转至 Authing 的默认登陆页面。成功登录后 Amazon Cognito 身份池会赋予用户调用 Amazon API Gateway 的角色(role),在页面中的每一个上传、下载、删除等操作都需要该权限,以触发 Amazon API Gateway 后端的 API handler Lambda 进行执行。在进行具体文件的处理时,API handler Lambda 会调用 file manager Lambda,通过 Amazon EFS access point 与文件系统进行连接,进而完成对应的操作。

方案部署

  1. 在 Authing 中创建标准 WEB 应用,具体可以参考文档:https://docs.authing.cn/v2/guides/federation/oidc.html,并记录 APP ID 及 Issuer 信息,配置回调 url:
  2. 这里我们使用的授权模式是 Implicit flow,并使用了 id_token 及 token 类型的返回:
  3. 根据您的需求进行登录相关配置:
  4. 登陆您的亚马逊云科技中国区域账号,进入 Amazon Cloudformation 控制台,在您的账号中使用最新版simple-file-manager-for-amazon-efs.template模板创建堆栈:
  5. 输入堆栈名称,填入在 Authing 中获得的 APPHost 及 APP ID:
  6. 堆栈部署完毕后,在“输出”栏可以看到访问的 S3 静态网站地址:
  7. 为最大限度保障您账户的数据安全,我们并没有直接将该 Amazon S3 存储桶设置为可以公开访问。您需要将该 Amazon S3 存储桶设置为公开访问,或只允许某些特定 IP 地址访问。

(1)如果您希望只允许某些特定 IP 地址访问,您可以手动修改桶策略中的”aws:SourceIp”: “127.0.0.1/32″部分,并将 IP 地址修改为您希望允许访问的客户端 IP 地址。

(2)如果您希望将桶设置为公开访问,您需要首先关闭账户级别的公开访问限制:

再关闭桶级别的公开访问限制:

最后配置公开的桶策略以允许公开访问:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws-cn:s3:::<bucket name>/*"
    }
  ]
}

使用方式

  1. 访问 S3 静态网站 URL 后会跳转至 Authing 登陆页面:
  2. 输入用户名和密码后进行登录,进入 Simple File Manager 首页。在这里列出了账号下所有的 EFS:
  3. 点击“Managed”中的 false 按钮,输入 User ID,Group ID,Path 之后,点击提交以管理该 EFS:
  4. 如需停止管理某 EFS,只需点击“Managed”中的 true 即可:
  5. 点击以管理的某个 EFS,进入详情页面:
  6. 点击 Create directory 按钮可以创建新的文件夹:
  7. 点击 Upload file 按钮可以拖拽或选取文件进行上传:
  8. 点击删除或下载图标可以进行文件的删除与下载:

 删除资源

  1. 手动清空并删除 WebApplication 嵌套模板中的 S3 日志桶:
  2. 删除主堆栈:
  3. 删除管理 EFS 的堆栈:

小结

Simple File Manager 通过简单的 Web 用户界面实现了与 Amazon EFS 文件系统中文件数据的交互,并可通过互联网从任何设备或位置访问您的 Amazon EFS 文件并管理您的文件系统。本方案中的无服务器架构使您无需部署专用资源(如 Amazon EC2 实例)即可管理 Amazon EFS 数据。

除此之外,通过该方案的实施,我们在 Amazon Web Services 中国区域成功实现了 Authing 与 Amazon Cognito 身份池在 Amplify-VUE 的集成,并可将其拓展至其他使用标准 OIDC 协议的用户池产品上。

本篇作者

孙策

西云数据技术支持工程师,资深云计算技术支持工程师,Serverless、数据分析等多个领域的专家。拥有 10+年复杂问题的解决经验,专注于为客户提供全面的技术指导和支持,以灵活应对各种云上问题和挑战。

王旭

西云数据技术客户经理,拥有超过 10 年的客户成功和技术咨询经验,曾就职于知名电信供应商、头部解决方案提供商和软件开发商等,目前在西云数据担任技术客户经理(TAM),主要支持汽车行业的客户,以及准企业级支持客户。擅长高效地帮助客户解决各类技术问题及大规模系统迁移。

王钊杰

西云数据技术支持工程师,精通 Amazon EKS、Amazon CloudFormation 等亚马逊云科技服务,擅长在 DevOps 领域为客户解决各种疑难问题。