我创建了一个使用docker image for node8的CodeBuild项目。 CodeBuild项目的目的是进行单元测试。它需要CodeCommit的输入工件。在buildspec.yml中,它运行一个测试命令。
这是我的(简单)buildspec文件:
version: 0.2
phases:
install:
commands:
- echo "install phase started"
- npm install
- echo "install phase ended"
pre_build:
commands:
- echo "pre_build aka test phase started"
- echo "mocha unit test"
- npm test
- echo "mocha unit test ended"
build:
commands:
- echo "build phase started"
- echo "build complete"
DOWNLOAD_SOURCE阶段的构建失败,其中包含以下内容:
PHASE - DOWNLOAD_SOURCE
开始时间 2分钟前
结束时间 2分钟前
消息拒绝访问
构建日志中的唯一日志是以下
[Container] 2018/01/12 11:30:22等待代理ping
[Container] 2018/01/12 11:30:22等待DOWNLOAD_SOURCE
提前致谢。
CodeBuild政策的屏幕截图。
答案 0 :(得分:7)
我找到了解决办法。这是我的权限问题。我添加了这个以使它工作。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"arn:aws:logs:eu-west-1:723698621383:log-group:/aws/codebuild/project",
"arn:aws:logs:eu-west-1:723698621383:log-group:/aws/codebuild/project:*"
],
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
]
},
{
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::codepipeline-eu-west-1-*"
],
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion"
]
},
{
"Effect": "Allow",
"Action": [
"ssm:GetParameters"
],
"Resource": "arn:aws:ssm:eu-west-1:723698621383:parameter/CodeBuild/*"
}
]
}
答案 1 :(得分:1)
我有类似的错误,如果有帮助,它将发布我的修复程序。我正在使用CodePipeline,并且发生了两个单独的构建。 Build#1将完成其构建,并且其输出工件将成为Build#2的输入工件。版本2在DOWNLOAD_SOURCE阶段失败,出现以下错误:
AccessDenied: Access Denied status code: 403
问题在于,在我针对Build#1的构建规范中,我没有定义工件。在Build#1中调出工件文件/文件夹后,Build#2便可以毫无问题地下载源代码。
答案 2 :(得分:1)
我遇到了同样的错误,访问S3存储桶url时出现权限问题。最初,我将自动生成的codepipeline-us-west-2- *存储桶名称与策略一起使用:
{
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::codepipeline-us-west-2-*"
],
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketAcl",
"s3:GetBucketLocation"
]
}
更改为我自己的存储桶名称后,该策略必须更新为:
{
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::project-name-files/*"
],
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketAcl",
"s3:GetBucketLocation"
]
}
答案 3 :(得分:0)
我遇到了同样的问题。
我的来源来自S3文件夹。解决方法是在源路径的末尾放置一个/
。似乎没有/
的CodeBuild认为它是关键。
希望这可以帮助某人节省时间。
答案 4 :(得分:0)
我遇到相同的症状,但是我的问题是由于this post中所述的S3存储桶上的默认加密。
因此,S3中的所有内容都在静止状态下进行了加密。如果不指定加密方式,则S3中的对象将使用默认的KMS密钥进行加密。其他帐户将无法访问存储桶中的对象,因为它们没有用于解密的KMS密钥。因此,要解决此问题,您需要创建自己的KMS密钥并使用它进行加密(在这种情况下,请让CodeBuild使用您创建的此KMS密钥)。然后,通过配置AssumeRole权限,允许其他帐户中的角色使用此密钥。从我看来,大多数S3访问拒绝都发生在无法解密对象的过程中。并且在“故障排除S3 403访问被拒绝”中进行了指定-加密的对象也将导致403访问被拒绝。
在我的情况下,正在使用的密钥不匹配,这导致了解密失败。