草庐IT

将S3设置为类SFTP服务用于数据上传

simmy 2023-03-28 原文
S3的一个好用的功能是能设置为类似SFTP的共享文件夹让用户上传数据,而已由于S3不是一部机器而是云原生服务,因此在维护上非常简单,而已价钱便宜,非常适合于大量文件保存和共享。

设置的难点在于policy的设定,以下是步骤。

  1. 进入IAM设置policy

具体策略如下,按需要修改

整个bucket full权限

{   "Version": "2012-10-17",   "Statement": [     {       "Effect": "Allow",       "Action": "S3:*",       "Resource": "arn:aws:s3:::BUCKET/*",       "Condition": {}     },     {       "Effect": "Allow",       "Action": [         "s3:ListBucket"       ],       "Resource": "arn:aws:s3:::BUCKET",       "Condition": {}     }   ] }

只允许bucket下某个文件夹full权限

{   "Version": "2012-10-17",   "Statement": [     {       "Effect": "Allow",       "Action": [          "s3:ListBucket",          "s3:ListBucketMultipartUploads",          "s3:ListBucketVersions"        ],       "Resource": "arn:aws:s3:::BUCKET",       "Condition": {         "StringLike": {           "s3:prefix": "FOLDER/*"         }       }     },     {       "Effect": "Allow",       "Action":  "s3:*" ,       "Resource": "arn:aws:s3:::BUCKET/FOLDER/*",       "Condition": {}     }   ] }

给予存储桶只读权限

{     "Version": "2012-10-17",     "Statement": [         {             "Effect": "Allow",             "Action": "S3:ListBucket",             "Resource": "arn:aws:s3:::bucket name",             "Condition": {}         },         {             "Effect": "Allow",             "Action": "s3:GetObject",             "Resource": "arn:aws:s3:::bucket name/*",             "Condition": {}         }     ] }

只允许只读访问存储桶下某个指定文件夹

{   "Version": "2012-10-17",   "Statement" : [{     "Sid" : "GiveSimpleListAccessToSharedFolder",     "Effect" : "Allow",     "Action" : "s3:ListBucket",     "Resource" : "arn:aws:s3:::BUCKET",     "Condition" : {         "StringLike" : {        "s3:prefix": "FOLDER/*"         }     }   },   {     "Sid" : "GiveReadAccessToSharedFolder",     "Effect" : "Allow",     "Action" : "s3:GetObject",     "Resource" : "arn:aws:s3:::BUCKET/FOLDER/*"   }] }

2. 添加policy后,命名,然后保存

3. 返回IAM,点Group,添加组,


4. 设置与policy一样的名字,便于识别


5. 将之前创建的policy添加到这个组上,等于设定后续用户加入这个组所拥有的用户访问S3的权限

6. 完成后可以开始创建添加用户,返回IAM,点用户

7. 勾选编程访问

8. 添加用户到对应权限组

完成后即可通过S3客户端,例如Cloudberry, Cyberduck访问,把产生的用户IAM key添加到软件即可,如下是Cloudberry界面截图,跟SFTP访问文件夹类似


注意的点,对于中国区S3 policy的权限设定,与外国区有点区别,具体policy如下。如果客户端需要填写S3 server地址,用这个:s3.cn-north-1.amazonaws.com.cn

存储桶full权限

{     "Version": "2012-10-17",     "Statement": [         {             "Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest",             "Action": [                 "s3:ListBucket",                 "s3:GetBucketLocation"             ],             "Effect": "Allow",             "Resource": [                 "arn:aws-cn:s3:::bucket"             ],             "Condition": {}         },         {             "Sid": "AllowUserToReadWriteObjectDataInDevelopmentFolder",             "Action": [                 "s3:GetObject",                 "s3:PutObject"             ],             "Effect": "Allow",             "Resource": [                 "arn:aws-cn:s3:::bucket/*"             ]         }     ] }

full权限,但是没有删除权限

{     "Version": "2012-10-17",     "Statement": [         {             "Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest",             "Action": [                 "s3:ListBucket",                 "s3:GetBucketLocation"             ],             "Effect": "Allow",             "Resource": [                 "arn:aws-cn:s3:::BUCKET"             ],             "Condition": {                 "StringLike": {                     "s3:prefix": "FOLDER/*"                 }             }         },         {             "Sid": "AllowUserToReadWriteObjectDataInDevelopmentFolder",             "Action": [                 "s3:GetObject",                 "s3:PutObject"             ],             "Effect": "Allow",             "Resource": [                 "arn:aws-cn:s3:::BUCKET/FOLDER/*"             ]         }     ] }

有关将S3设置为类SFTP服务用于数据上传的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  3. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  4. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  5. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  6. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  7. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  8. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  9. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  10. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

随机推荐