【问题标题】:Code Build Access denied while downloading artifact from S3从 S3 下载工件时代码构建访问被拒绝
【发布时间】:2019-05-14 07:24:01
【问题描述】:

我的 CodeBuild 配置了 CodePipeline。 S3 是我的神器商店。尽管附加了具有足够访问权限的 IAM 角色,但我仍然收到拒绝访问消息。

错误信息截图

我已经检查了与 Codebuild 关联的服务角色。它附有以下政策。

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Resource": [
            "arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Build",
            "arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Build:*"
        ],
        "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ]
    },
    {
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::codepipeline-ap-southeast-1-*"
        ],
        "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:GetObjectVersion"
        ]
    }
]

}

但是当我使用 IAM 策略验证器对其进行测试时,我收到以下错误消息。

根据对这个问题的公认答案,我目前拥有的政策应该允许我从 S3 毫无问题地获取工件 - AWS Codebuild fails while downloading source. Message: Access Denied

如何摆脱拒绝访问消息?

【问题讨论】:

    标签: amazon-web-services aws-codepipeline aws-codebuild


    【解决方案1】:

    当您已经拥有 CodeBuild 项目并将其集成到 CodePipeline 管道时,通常会发生这种情况。当您将 Codebuild 项目与 CodePipeline 集成时,该项目将从 CodePipeline 源输出中检索其源。源输出将存储在工件存储位置,这是一个 S3 存储桶,可以是 CodePipeline 创建的默认存储桶,也可以是您在创建管道时指定的存储桶。

    因此,您需要向 CodeBuild 服务角色提供访问 S3 中的 CodePipline 存储桶的权限。该角色需要权限才能将 S3 对象放入存储桶以及获取对象。

    我尝试过的政策同样有效:

    {
      "Version": "2012-10-17",
      "Statement": [
    {
      "Sid": "CodeBuildDefaultPolicy",
      "Effect": "Allow",
      "Action": [
        "codebuild:*",
        "iam:PassRole"
      ],
      "Resource": "*"      
    },
    {
      "Sid": "CloudWatchLogsAccessPolicy",
      "Effect": "Allow",
      "Action": [
        "logs:FilterLogEvents",
        "logs:GetLogEvents"
      ],
      "Resource": "*"
    },
    {
      "Sid": "S3AccessPolicy",
      "Effect": "Allow",
      "Action": [
        "s3:CreateBucket",
        "s3:GetObject",
        "s3:List*",
        "s3:PutObject"
      ],
      "Resource": "*"
      }
     ]
    }
    

    政策模拟器

    AWS Reference

    【讨论】:

    • 嘿!谢谢你帮我解决这个问题。因此,我需要做的就是将此策略添加到代码管道角色中,这应该有效,对吧?我需要允许 CodePipeline 角色访问 codebuild 角色吗?我说对了吗?
    • 您需要一个 AWS CodeBuild 服务角色,以便 AWS CodeBuild 可以代表您与依赖的 AWS 服务(代码管道)进行交互
    • 我发布的策略来自我的 codebuild 服务角色,它有权从代码管道获取 getObject 和 putObject。我将尝试使用 codebuild 创建一个新的 CodePipeline,看看问题是否再次发生。
    • 是的,请参考以下链接,这将有助于了解服务角色以及如何将 AWS CodePipeline 与 AWS CodeBuild 一起使用 docs.aws.amazon.com/codebuild/latest/userguide/…
    • 我遇到了问题,我有 get、getobjectversion 并已经放在那里。我添加了“s3:List*”...我很确定代码构建不需要 createBucket 权限:)
    猜你喜欢
    • 2022-01-27
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 2012-09-11
    • 2021-07-27
    • 1970-01-01
    相关资源
    最近更新 更多