代码之家  ›  专栏  ›  技术社区  ›  julanove

使用代码构建时的S3策略

  •  0
  • julanove  · 技术社区  · 4 年前

    首先,我为我的英语感到抱歉。我正在开发一个代码管道,使用CodeBuild将React应用程序部署到S3。在测试环境中是可以的,但当我在登台环境中部署它时,我遇到了拒绝访问错误:

    调用PutObject操作时发生错误(AccessDenied):拒绝访问

    这是因为在暂存环境中,S3 Bucket已经有了一些策略。事情是这样的:

    {
        "Version": "2008-10-17",
        "Id": "PolicyForCloudFrontPrivateContent",
        "Statement": [
            {
                "Sid": "1",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::cloudfront:user/CloudFront ABC"
                },
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::s3staging/*"
            },
            {
                "Sid": "IPAllow",
                "Effect": "Deny",
                "Principal": {
                    "AWS": "*"
                },
                "Action": "s3:*",
                "Resource": "arn:aws:s3:::s3staging/*",
                "Condition": {
                    "NotIpAddress": {
                        "aws:SourceIp": [
                            "11.11.1.11/11" *VPN Address
                             .... Another Ip range (s)
                        ]
                    }
                }
            }
        ]
    }
    

    我知道它只允许从CloudFront请求和从VPN地址部署。但现在我需要从CodeBuild部署它。因此,在不修改现有策略的情况下,我尝试通过在aws:SourceIp中添加来自我所在区域13.112.191.184/29的CodeBuild IP来修复它,希望它能允许CodeBuild在S3上删除和创建文件。可悲的是,它不起作用。

    我尝试了很多方法,比如允许CodeBuild的serviceRole的ARN,但它也不起作用。

    {
      "Sid": "Stmt1599214911530",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::s3test-resopa-pwa/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456:role/service-role/AWSCodePipelineServiceRole-ap-northeast-1-staging"
        ]
      }
    }
    

    有经验的人能帮我解决这个问题吗。如果能给我一些建议,我真的很感激。非常感谢你。

    0 回复  |  直到 4 年前
        1
  •  1
  •   julanove    4 年前

    修好了。

    "Condition": {
         "ArnNotEquals": {
              "aws:PrincipalArn": "arn:aws:iam::codebuild-role"
          },
          "NotIpAddress": {
               "aws:SourceIp": [
                     "153.156.28.29/32",
                     ... Others IP Range