AWS S3 Bucket作为内部网站,用于提供文档以及来自CI的自动更新

时间:2019-12-03 08:32:42

标签: amazon-s3 travis-ci

每当我们构建可在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.0000000000000arn:aws:s3:::docsarn: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的访问密钥一起使用。

0 个答案:

没有答案