我已经阅读了大量的AWS文档,并尝试了几十个示例配置,但我设法实现的唯一AWS策略是授予所有人的权限 - 访问S3存储桶。 这太可怕了。
单用户完全访问方案:
以下是设置:
问题是否可以使用curl
使用与 jenkins 用户关联的凭据实施以下操作:
foo
notes 。foo
。这是一个很好的解决方案:
我的问题的可接受解决方案包括以下部分:
curl
命令。但是,"使用SDK X"等解决方案。或者"下载工具Y"很好,但最终没有帮助,像#34;你真正试图在这里做什么的解决方案,也许有一种更简单的方法"将参考本节的评论。感谢您理解我真的只想要3个curl
语句以及针对此场景的S3 ACL和IAM策略的说明。
答案 0 :(得分:0)
要使其工作,有两个部分:构建请求并在S3存储桶上设置正确的策略。
简单部分:要构建存储桶策略,您可以使用http://awspolicygen.s3.amazonaws.com/policygen.html
你可以在这里看到例子:
http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html
用于构建请求。构建请求有很多,最具挑战性的部分是签署请求。你不能仅使用卷曲,但你可以在不使用sdk的情况下逃脱。以下是您能够发布最终卷曲的所有需求的示例: http://geek.co.il/2014/11/19/script-day-amazon-aws-signature-version-4
最后你会看到最后的卷曲。不要忘记为s3更新(例如SQS,但如果你不想或不能使用sdk,基本上所有需要完成的工作)。
答案 1 :(得分:0)
我一直在寻找一个可以分享这个解决方案的地方,把它放在这里,因为它与你的问题部分匹配。
我认为aws策略生成器对新手不友好。我得到了很多access denied
而不理解为什么。非建设性的消息IMO,因为它没有说明你违反了什么政策。事实证明,lib还为上传的文件设置了公共读取权限,即a.k.a ACL。长话短说,我错过了PutObjectACL。以下是使用AWS IAM设置单个S3存储桶访问的一些示例,但不允许访问任何其他存储桶。
即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查看器的策略,用于验证上传的内容,而不会泄露其他存储桶的内容(它列出了列表)虽然桶名,但不能弄清楚如何限制它,我真的不关心它。)
具有策略MyappTeamPolicy的IAM用户myuser:
{
"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/*"
]
}
]
}