ELI5:如何授予单个用户对S3桶的完全访问权限



我已经阅读了大量的AWS文档,并尝试了几十个示例配置,但我唯一成功的AWS策略是授予每个人对S3桶的完全访问权。这太可怕了

单用户完全访问场景:

设置如下:

  1. AWS用户jenkins,不属于任何组或角色。
  2. 包含jenkins AWS_SECRET_KEY和AWS_ACCESS_KEY的服务器
  3. 一个全新的空S3桶,注释使用默认权限。

问题是是否可以使用curl使用与jenkins用户关联的凭据来实现以下操作:

  1. 上传包含短语"hello, world"的文本文件foonotes
  2. notes下载foo文本文件。
  3. 获取注释中所有文件的列表。

一个好的解决方案是什么样子的:

我的问题的一个可接受的解决方案有以下几个部分:

  1. 展示解决方案的curl命令集。
  2. 任何S3设置(即acl)或IAM用户/组/角色策略的解释以及这些该死的东西应该如何工作。
  3. [可选]从2014年起引用第三方博客/帖子,其中包含有关这些安全部分如何组合在一起的合理解释。
然而,像"使用SDK X"或"下载工具Y"这样的解决方案很好,但最终没有帮助,而像"你真正在这里试图做什么,也许有一个更简单的方法"这样的解决方案将会遇到参考本节的评论。感谢您的理解,我真的只想要3个curl语句和S3 acl和IAM策略的解释。

我正在寻找一个地方来分享我自己的头痛的解决方案,把它放在这里,因为它部分符合你的问题。

我认为aws策略生成器对新手不友好。我得到了很多access denied,不明白为什么。在我看来,这不是建设性的信息,因为它没有说你违反了什么政策。原来这个库还为上传的文件设置了公共读权限,也就是ACL。长话短说,我错过了PutObjectACL。下面是一些使用AWS IAM设置单个S3桶访问的示例,而不授予对任何其他桶的访问权。

服务器政策

ie IAM用户myapp-staging { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:ListMultipartUploadParts", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::myappbucket-staging" ] }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::myappbucket-staging/*" ] } ] }


人力政策

这是一个人类 IAM用户使用AWS S3控制台或其他S3查看器来验证上传的内容的策略,而不会暴露其他桶的内容(它会列出桶名,但无法找出如何限制它,我真的不在乎它)。

IAM用户myuser与策略MyappTeamPolicy:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets" ], "Resource": [ "arn:aws:s3:::*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:ListMultipartUploadParts", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::myappbucket", "arn:aws:s3:::myappbucket-staging" ] }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:GetObjectAcl", "s3:ListMultipartUploadParts", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::myappbucket/*", "arn:aws:s3:::myappbucket-staging/*" ] } ] }

要使其工作有两个部分:构建请求和在S3 bucket上设置正确的策略。

简单的部分:要构建桶策略,您可以使用http://awspolicygen.s3.amazonaws.com/policygen.html
你可以在这里看到一些例子:http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html

用于构建请求。构建请求有很多工作要做,其中最具挑战性的部分是签署请求。您不能只使用curl,但是您可以不使用sdk。下面是一个示例,所有需要发生的事情,使您能够发出最终curl:http://geek.co.il/2014/11/19/script-day-amazon-aws-signature-version-4

最后你会看到最后的旋度。不要忘记为s3更新(例如为SQS更新,但如果您不想或不能使用sdk,则基本上需要完成所有繁重的工作)。

相关内容

  • 没有找到相关文章

最新更新