我正在尝试构建我的测试项目,但每次都在 pre_build 中失败。我检查错误日志,然后说:
[Container] 2017/03/26 19:28:21调用GetAuthorizationToken操作时发生错误(AccessDeniedException):User:arn:aws:sts :: 074181202020:assume-role / codebuild-Testing-project-service -role / AWSCodeBuild无权执行:ecr:资源上的GetAuthorizationToken:*
我尝试附加以下政策:
- IAMSelfManageServiceSpecificCredentials
- IAMFullAccess
- AmazonS3ReadOnlyAccess
- CodeBuildPolicy-测试项目-1490555003058
- IAMReadOnlyAccess
- AWSCodeBuildAdminAccess
- IAMUserSSHKeys
- AWSCodeCommitFullAccess
- IAMFullAccess
- AmazonS3FullAccess
- AdministratorAccess
- AWSElasticBeanstalkFullAccess
- AWSCodePipelineFullAccess
- WSCodeBuildAdminAccess
但它仍然给我同样的错误
任何帮助将不胜感激!谢谢!
答案 0 :(得分:6)
实际上,无法在ECR内部解决getAuthorizationToken错误(因为您甚至在那儿都看不到ecr:getAuthorizationToken)。
您需要转到IAM面板=>角色=> CodeBuild角色=>授予策略=> AmazonEC2ContainerRegistryReadOnly
这使它能够获得令牌
答案 1 :(得分:3)
您需要为ECR存储库策略添加权限,而不是为CodeBuild服务角色添加权限。此页面包含repo策略的示例: https://docs.aws.amazon.com/codebuild/latest/userguide/sample-ecr.html
答案 2 :(得分:1)
这是我管理ECR的政策。然后,将它附加到要允许访问的用户上:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": "*",
"Action": [
"ecr:GetDownloadUrlForLayer",
"ecr:PutImage",
"ecr:InitiateLayerUpload",
"ecr:UploadLayerPart",
"ecr:CompleteLayerUpload",
"ecr:DescribeRepositories",
"ecr:GetRepositoryPolicy",
"ecr:ListImages",
"ecr:DeleteRepository",
"ecr:BatchDeleteImage",
"ecr:SetRepositoryPolicy",
"ecr:DeleteRepositoryPolicy",
"ecr:GetAuthorizationToken"
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage"
]
}
]
}
答案 3 :(得分:1)
当您配置AWS Codebuild时,它将创建服务角色并在其中附加默认策略以写入日志并将文件放入S3存储桶。为了使CodeBuild基础实例有权访问ECR,您应该将策略附加到该服务-role。
您可以使用一些托管策略,例如:
AmazonEC2ContainerRegistryFullAccess
有关更多信息:
答案 4 :(得分:0)
还注意到,AWS 将创建两个角色(代码管道角色和代码构建角色)。您需要将策略 AmazonEC2ContainerRegistryFullAccess 添加到代码构建角色。
codebuild 角色的名称将是:codebuild-