【发布时间】:2019-06-04 18:31:18
【问题描述】:
尝试创建和运行从 Github 提取、构建和部署到 EC2 实例的 AWS CodePipeline。流水线如下:
源 (Github) -> 构建 (AWS CodeBuild) -> 部署 (AWS CodeDeploy)
源代码和构建步骤都成功了。但是,部署失败始终给出以下错误:
权限不足 无法使用位于 Amazon S3 工件存储桶“codepipeline-us-east-1-[redacted]”中的 Amazon S3 对象键“[redacted]-2nd-test-pip/BuildArtif/IbiHzen”访问该工件。提供的角色没有足够的权限。
以下是 CodeBuild 服务角色策略的 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 文件,但它从未被命名为部署步骤所期望的名称。
我也进入了构建项目并尝试使用其他工件配置进行构建,但在通过 CodePipeline 运行构建时它们似乎被忽略了。
免责声明:我在互联网上的此处和其他地方看到过类似的问题,但每个问题都涉及 ECS 或其他与我不同的情况。谢谢你的帮助
【问题讨论】:
-
我在 EC2 上遇到了与 CodeDeploy 非常相似的问题。看看这个问题是否对你有用 - stackoverflow.com/questions/53790842/understanding-iam-policies
-
此外,如果您使用 IAM 访问策略、您的 CodePipeline 正在使用的角色权限更新您的问题,这可能会有所帮助。
-
谢谢@Sashi。我确实尝试了您的建议,但没有成功。我还更新了问题以包含政策详细信息。
-
这是由于没有创建工件。请参阅此答案(stackoverflow.com/a/60983084/4842112)和文章 - medium.com/@shanikae/…
标签: amazon-web-services aws-code-deploy aws-codepipeline