11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

使用 SFTP 管理 S3 存储桶

  • 2019-10-12
  • 本文字数:3156 字

    阅读完需:约 10 分钟

使用 SFTP 管理 S3 存储桶

一、简介

越来越多的客户选择将自己的数据存放在 S3,借助于 S3 的无限容量和无与伦比的持久性,我们可以部署与存储相关的各类服务,如:备份和恢复、数据存档、数据湖和大数据分析、混合云存储、灾难恢复等。以往我们需要通过使用 AWS CLI 或通过 AWS SDK 开发程序的方式和 S3 交互,对操作者有一定的命令行熟悉的过程或开发经验,同时还要考虑访问 S3 存储桶的 IAM 用户密钥保存与更新的问题,在跨公司跨部门同步数据的场景下并不是特别方便。现在,AWS 推出了 AWS Transfer for SFTP 服务,该服务使用标准的 SFTP 协议和 S3 交互实现上传/下载数据,您也可以创建 SFTP 用户来实现精确的权限控制。在各个不同行业之间或公司不同部门之间进行数据交换时, AWS Transfer for SFTP 大幅度提高了访问 S3 的易用性。


二、服务介绍

S3: Amazon S3 是一种对象存储,专为从 Internet 上的任意位置存储和检索任意数量的数据而构建,它旨在提供 99.999999999% 的持久性,并存储每个行业的市场领导者使用的数百万个应用程序的数据。


AWS Transfer for SFTP: AWS Transfer for SFTP(安全文件传输协议)是一种完全托管服务,可通过 SFTP 协议将数据传入或传出 S3 存储桶。我们也可以添加 SFTP 用户,并为其配置适当的访问级别。


AWS Transfer for SFTP 的主要用例如下:


从供应商或合作伙伴等第三方上传数据到 S3。


将 S3 数据共享给组织外的部分用户


组织内部的数据转移


三、操作步骤

1.在 IAM 界面创建一个 IAM 策略和 IAM 角色,使 AWS Transfer for SFTP 有权限发送日志到 CloudWatch Logs 中。


IAM 角色的信任关系如下:


{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "transfer.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
策略如下:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
],
"Resource": [
"arn:aws:logs:*:*:*"
]
}
]
}
复制代码


2.在 AWS 控制台”迁移与传输”分类中打开”AWS Transfer for SFTP”,然后点击 “Create server”创建一个 SFTP 服务器



3.在 DNS 配置选项中,我们可以选择自定义的域名,也可以使用 AWS 自带的域名。


在 Identity provider 选项中,可以选择 API Gateway 的认证和授权,也可以使用 AWS Transfer for SFTP 服务托管的授权方式,本次示例中我们使用 Service managed 方式。Logging role 选择刚刚创建的角色,使 SFTP 有权限向 CloudWatch Logs 中上传日志.



4.创建 Server 之后,我们可以创建 SFTP 用户,在创建 SFTP 用户之前,先创建一个 IAM 角色,使该用户能访问指定的存储桶。打开 IAM 界面,创建一个 Role,Role 的信任关系如下:


{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "transfer.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
复制代码


关联的策略如下(请将下面标红的 BucketName 修改为自己的存储桶名字):


{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:DeleteObjectTagging",
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObjectVersion",
"s3:GetObjectVersionTagging",
"s3:PutObjectVersionTagging",
"s3:GetObjectTagging",
"s3:PutObjectTagging",
"s3:DeleteObjectVersionTagging",
"s3:DeleteObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::BucketName/*",
"arn:aws:s3::: BucketName /"
]
}
]
}
复制代码


上述 IAM 策略中指定了访问存储桶的权限,然后 IAM Role 和这个策略关联,该 Role 会分配给 SFTP 用户,当 SFTP 用户访问 SFTP 服务器的时候,SFTP 服务器会通过这个 IAM Role 的策略判断是否有权限访问 S3 存储桶. 有关 IAM Role 和策略与 sftp 用户授权的方式和原理,您可以参考下面的架构图:



5.创建完 Server 之后,在 Servers 界面点击一下 Server ID,然后在 Users 界面可以添加 SFTP 用户。



6.在添加用户界面,Username 处可以写一个 3—32 字符的用户名(仅支持小写字母和数字), Access 界面选择刚刚创建的用户 Role,Home Directory 选择要访问的 S3 存储桶。在 SSH public key 界面,需要使用 ssh-keygen 产生一个密钥对,如果之前已有密钥对,使用现有的也可以.



备注: 创建密钥对方法: ssh-keygen -t rsa,在 Enter passphrase 处留空,直接回车即可.



密钥对创建完成之后,会在当前用户 home 目录的.ssh 文件夹下产生两个文件,一个是 id_rsa,一个是 id_rsa.pub,其中 id_rsa 是 private key,id_rsa.pub 是 public key. 将 id_rsa.pub 文件内容拷贝到 SSH Public key 里面即可.


7.之后可以使用 sftp 命令或者 sftp 客户端(如 WinSCP)等工具连接到 SFTP 服务器上。在 Server 界面,找到 Endpoint,然后使用 sftp -i PrivateKey username@server 进行连接。如: sftp -i .ssh/id_rsa alex@s-xxxxxxxxxxxxx.server.transfer.us-east-1.amazonaws.com



成功连接之后,可以使用 SFTP 命令如 put 进行上传,get 进行下载.


sftp> put hello.mp3


Uploading hello.mp3 to /xlaws/hello.mp3


hello.mp3 100% 153KB 30.0KB/s 00:05


sftp> get hi.mp3


Fetching /xlaws/hi.mp3 to hi.mp3


/xlaws/hi.mp3 100% 17KB 19.0KB/s 00:00


sftp>


9.在配置过程中,如果遇到报错,或者要查看 sftp 服务器日志,可以在 Servers 的详情界面,点击右上角”View Logs”跳转到 CloudWatch Logs 中查看.




在日常较多的场景中,AWS Transfer for SFTP 的 SFTP 用户需要管理多个存储桶,您需要对 SFTP 用户所关联的角色策略中指定多个存储桶,如下述策略允许 SFTP 用户访问存储桶 xlaws 和 xlawsweb:


{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::xlaws/*",
"arn:aws:s3:::xlaws/",
"arn:aws:s3:::xlawsweb/*",
"arn:aws:s3:::xlawsweb/"
]
}
]
}
复制代码


然后使用 sftp 客户端连接到 sftp server 上:


sftp -i .ssh/id_rsa alex@s-xxxxxxxxxxxx.server.transfer.us-east-1.amazonaws.com

复制代码


使用 pwd 命令可以看到当前路径为 home directory(如下示例为 xlawsweb 存储桶)


sftp> pwd
Remote working directory: /xlawsweb

复制代码


然后上传一个文件:


sftp> put hello.mp3
Uploading hello.mp3 to /xlawsweb/hello.mp3
hello.mp3

复制代码


使用 cd /xlaws/ 命令可以切换存储桶到 xlaws:


sftp> cd /xlaws/

复制代码


再上传一个文件到 xlaws 存储桶以验证权限:


sftp> put hello.mp3
Uploading hello.mp3 to /xlaws/hello.mp3
hello.mp3 100% 153KB 105.1KB/s 00:01
sftp>

复制代码


相关文章: https://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/what-is-aws-transfer-for-sftp.html


作者介绍:


刘翔


亚马逊 AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计。在加入架构师团队之前,在 AWS Support 团队有 2 年半的工作经验,对 AWS 底层服务有深入的理解和认识。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/use-sftp-manage-s3-bucket/


2019-10-12 10:41539
用户头像

发布了 1530 篇内容, 共 61.6 次阅读, 收获喜欢 66 次。

关注

评论

发布
暂无评论
发现更多内容

部署Hexo博客到VPS

ini

从草根到百万年薪C/C++程序员的二十年风雨之路

C语言技术网-码农有道

c++ 编程语言 C语言

从2009到2020,世界编程语言排行榜分析

C语言技术网-码农有道

编程语言

LeetCode 565: Array Nesting

隔壁小王

算法

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (一)什么是单元测试

编程道与术

源码分析shared_ptr实现

泰伦卢

c c++ C#

产品周刊 | 第 13 期(20200503)

Herbert

产品 设计 产品经理 产品设计

1分钟理解M2M和IoT概念

老任物联网杂谈

物联网 M2M IoT

职场发展的思考

子不语

生涯规划 职业规划

断章取义,不一样的C/C++语言的学习策略

C语言技术网-码农有道

C/C++

MyBatis 3 解析mybatis-config.xml配置

杨家昌

深度解析 mybatis 初始化 XMLConfigBuilder Configuration

Flink 作为现代数据仓库的统一引擎:Hive 集成生产就绪!

Apache Flink

大数据 flink 流计算 实时计算

如何消除写作过程中的痛苦,让写作变成一种享受

董一凡

写作

零基础、非计算机相关专业的如何转型程序员

C语言技术网-码农有道

程序员 转型

企业招聘的需求决定了C/C++程序员的学习方向

C语言技术网-码农有道

C/C++

LeetCode 153. Find Minimum in Rotated Sorted Array

隔壁小王

算法

MyBatis 3 XML配置

杨家昌

mybatis mybatis-config.xml XML配置 配置

快速开发那点事儿 | 选择最合适的轮子,量产跑车

Java_若依框架教程

敏捷开发 JAVA开发 RouYI 快速开发

DataGrip常用快捷键

fliter

终端Terminal:程序员是如何查询天气预报的?

lmymirror

GitHub 工具 命令行 terminal 终端工具

新人怎么寻求解决问题的方法

波波

编程 职场 新人

中年危机,我们如何面对?

石云升

【预告】千亿数据的潘多拉魔盒:从分库分表到分布式数据库

kimmking

分布式数据库 分库分表 分布式系统 中间件

我们迫切需要块状时间

Neco.W

效率 时间分配 时间管理 工作效率 提升效率

基于大疆无人机SDK二次开发

sydMobile

android 无人机

言简意赅,聊聊RPC的123事

一叶而不知秋

RPC

new[]和delete[]为何要配对使用?

泰伦卢

c c++ C#

Flutter 中SharedPreferences 的初始化?

三爻

flutter android

游戏夜读 | 有哪几种游戏玩家?

game1night

IT培训机构那些不得不说的事儿

C语言技术网-码农有道

IT培训机构

原创 | 类应该是匀称和均匀的

编程道与术

使用 SFTP 管理 S3 存储桶_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章