Amazon web services AWS CodePipeline-权限不足无法访问工件错误

Amazon web services AWS CodePipeline-权限不足无法访问工件错误,amazon-web-services,aws-code-deploy,aws-codepipeline,Amazon Web Services,Aws Code Deploy,Aws Codepipeline,尝试创建并运行一个AWS代码管道,该代码管道从Github提取、构建并部署到EC2实例。管道如下: 源代码(Github)->构建(AWS代码构建)->部署(AWS代码部署) 源代码和构建步骤都成功了。但是,部署始终失败,出现以下错误: 权限不足 无法使用Amazon S3对象密钥“[redacted]-位于Amazon S3工件存储桶“codepippeline-us-east-1-[redacted]”中的第二个测试pip/BuildArtif/IbiHzen”访问工件。提供的角色没有足够

尝试创建并运行一个AWS代码管道,该代码管道从Github提取、构建并部署到EC2实例。管道如下:

源代码(Github)->构建(AWS代码构建)->部署(AWS代码部署)

源代码和构建步骤都成功了。但是,部署始终失败,出现以下错误:


权限不足 无法使用Amazon S3对象密钥“[redacted]-位于Amazon S3工件存储桶“codepippeline-us-east-1-[redacted]”中的第二个测试pip/BuildArtif/IbiHzen”访问工件。提供的角色没有足够的权限


以下是代码生成服务角色策略的IAM策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Resource": [
                "arn:aws:logs:us-east-1:362490217134:log-group:/aws/codebuild/[Redacted]-Build-Project",
                "arn:aws:logs:us-east-1:362490217134:log-group:/aws/codebuild/[Redacted]-Build-Project:*"
            ],
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ]
        },
        {
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::codepipeline-us-east-1-*"
            ],
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ]
        },
        {
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::codepipeline-us-east-1-[Redacted]/*"
            ],
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ]
        }
    ]
}
管道向导创建的CodePipeline服务角色已分配S3完全访问权限:

            "Action": [
                "elasticbeanstalk:*",
                "ec2:*",
                "elasticloadbalancing:*",
                "autoscaling:*",
                "cloudwatch:*",
                "s3:*",
                "sns:*",
                "cloudformation:*",
                "rds:*",
                "sqs:*",
                "ecs:*"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
我已经多次确认管道部署步骤中引用的工件与构建步骤创建的工件匹配

若我去查看引用的路径,那个么并没有一个目录或zip文件(不确定应该在那个里,但两者都并没有)具有那个名称。此外,在构建过程中会生成一个zip文件,但它从来没有按照部署步骤的要求命名

我也进入了构建项目,尝试使用其他工件配置构建,但在通过代码管道运行构建时,它们似乎被忽略了


免责声明:我在这里和其他网站上看到过类似的问题,但每个问题都涉及ECS或其他与我不同的情况。感谢您的帮助

此问题与角色/策略无关。如前所述,S3存储桶中不存在预期的zip文件。这是因为buildspec中指定的工件文件路径无效。更正后,将创建zip文件,并且部署不再因此错误而失败。我觉得奇怪的是,CodePipeline允许构建报告为成功完成,而不验证作为工件创建并传递到部署步骤的文件实际上是创建的。

我在EC2上遇到了与CodeDeploy非常类似的问题。检查此问题是否对您有用-此外,如果您使用IAM访问策略更新您的问题,您的代码管道正在使用的角色权限可能会有所帮助。谢谢@Sashi。我确实尝试了你的建议,但没有成功。我还更新了问题,以包括策略细节。这是由于未创建工件。参考此答案()和文章-