当前位置: 首页 > article >正文

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

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/*"
            ]
        }
    ]
}

http://www.kler.cn/a/513011.html

相关文章:

  • 《Effective Java》学习笔记——第1部分 创建对象和销毁对象的最佳实践
  • 1170 Safari Park (25)
  • TOSUN同星TsMaster使用入门——3、使用系统变量及c小程序结合panel面板发送报文
  • SDL2:PC端编译使用 -- SDL2多媒体库使用音频实例
  • Data Filtering Network 论文阅读和理解
  • Django简介与虚拟环境安装Django
  • 从零搭建一个Vue3 + Typescript的脚手架——day2
  • Linux——入门基本指令汇总
  • ubuntu22.04编译多个版本OpenCV
  • Linux高并发服务器开发 第十五天(fork函数)
  • 领域算法 - 大数据处理
  • Git 详细安装教程以及gitlab添加SSH密钥
  • 微头条业务流程
  • 实战演示:利用ChatGPT高效撰写论文
  • 【C/C++实现】直接插入排序(图例--超详细解析,小白一看就会!)
  • 【单片机通过蜂鸣器模拟警号 救护车 警车 等声音 】
  • node.js+npm的环境配置以及添加镜像(保姆级教程)
  • [LeetCode] 哈希表 I — 242#有效的字母异位词 | 349#两个数组的交集 | 202#快乐数 | 1#两数之和
  • 【Rust自学】13.10. 性能对比:循环 vs. 迭代器
  • Excel 技巧12 - 如何在Excel中输入对号叉号(★),字体Wingdings2
  • 鸿蒙Harmony json转对象(1)
  • Golang 生态学习
  • Git原理与应用(三)【远程操作 | 理解分布式 | 推送拉取远程仓库 | 标签管理】
  • 网络协议如何确保数据的安全传输?
  • 虚幻商城 Fab 免费资产自动化入库
  • bcache的基本操作