我已经阅读了大量的AWS文档,并尝试了几十个示例配置,但我唯一成功的AWS策略是授予每个人对S3桶的完全访问权。这太可怕了。
单用户完全访问场景:
设置如下:
- AWS用户jenkins,不属于任何组或角色。
- 包含jenkins AWS_SECRET_KEY和AWS_ACCESS_KEY的服务器
- 一个全新的空S3桶,注释使用默认权限。
问题是是否可以使用curl
使用与jenkins用户关联的凭据来实现以下操作:
- 上传包含短语"hello, world"的文本文件
foo
到notes。 - 从notes下载
foo
文本文件。 - 获取注释中所有文件的列表。
一个好的解决方案是什么样子的:
我的问题的一个可接受的解决方案有以下几个部分:
- 展示解决方案的
curl
命令集。 - 任何S3设置(即acl)或IAM用户/组/角色策略的解释以及这些该死的东西应该如何工作。
- [可选]从2014年起引用第三方博客/帖子,其中包含有关这些安全部分如何组合在一起的合理解释。
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,则基本上需要完成所有繁重的工作)。