我正在将所有站点从服务器移动到 s3 上。我已经将它们从动态站点移动到静态站点,因此操作不再需要运行服务器。
最后一个站点是我的博客,它运行 jekyll,我宁愿不必在本地构建来发布新内容。我不想把它留给github页面,因为我不想锁定在jekyll。
总而言之,我正在尝试将构建过程从我的 jenkins 服务器转移到 travis ci 上。从文档中,我认为我已经为该组提供了正确的权限,但是如果不向组/用户授予"s3:*"
,我就无法使其工作。
这是我当前的 iam 组权限策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:PutObjectVersion",
"s3:GetObjectVersion",
"s3:DeleteObjectVersion",
"s3:ListMultipartUploadParts",
"s3:ListMultipartUpload",
"s3:RestoreObject",
"s3:GetObjectVersionTorrent",
"s3:GetObjectTorrent",
"s3:PutObjectVersionTagging",
"s3:PutObjectTagging",
"s3:GetObjectVersionTagging",
"s3:GetObjectTagging",
"s3:DeleteObjectTagging",
"s3:DeleteObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::travis-s3-pub-test/*"
]
}
]
}
根据 aws 文档,唯一需要的权限是:
'''
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
'''
但这行不通。
我在我工作的系统管理员 jfronza 的帮助下找到了答案。
我错过了策略的 acl 部分。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectTorrent",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTorrent",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl",
"s3:RestoreObject"
],
"Resource": [
"arn:aws:s3:::travis-s3-pub-test/",
"arn:aws:s3:::travis-s3-pub-test/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
acl 部分是文件权限发生的地方,由于上传的文件需要公开,因此需要此权限。
虽然关于 s3 政策的 Amazon 文档非常糟糕,但关于使用 s3 的 travisCI 文档很好,如果我在发布此文档之前看到它们,请准确地告诉我这一点。