每当我们构建可在Travis-CI上正常工作的master时,我都想制作一个S3存储桶,以从Travis-CI接收内部文档。但是,我希望将内部文档限制为仅对我们公司的静态IP可见。我尝试使用的策略如下。
{
"Version": "2012-10-17",
"Id": "InternalDocs",
"Statement": [
{
"Sid": "Docs User",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::000000000000:user/docs"
},
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::docs",
"arn:aws:s3:::docs/*"
]
},
{
"Sid": "Whitelisted Read",
"Effect": "Deny",
"Principal": "*",
"Action": "*",
"Resource": "arn:aws:s3:::docs/*",
"Condition": {
"StringNotLike": {
"aws:userid": "000000000000"
},
"NotIpAddress": {
"aws:SourceIp": [
"0.0.0.0/32",
"0.0.0.0/32"
]
}
}
}
]
}
请注意,0.0.0.0
,000000000000
,arn:aws:s3:::docs
和arn:aws:iam::000000000000:user/docs
是占位符,因为我不想显示我们的真实姓名,ID或IP。
我最终遇到的问题是,由于"Principal": "*"
似乎与任何用户(公开或不公开)都匹配,因此最终将阻止所有内容。结果是,公司静态IP中的任何人都可以访问存储桶,但Travis-CI被禁止将新版本的文档上传到存储桶。
如何允许Travis-CI上传到我的S3存储桶,同时仍然仅允许特定IP使用s3:GetObject
来查看文档,同时阻止其他任何人?
我将Travis-CI上的deploy函数与AWS访问密钥和用户arn:aws:iam::000000000000:user/docs
的访问密钥一起使用。