CodePipeline - 由于权限不足导致部署失败

Posted

技术标签:

【中文标题】CodePipeline - 由于权限不足导致部署失败【英文标题】:CodePipeline - Deployment failure due to insufficient permission 【发布时间】:2022-01-19 16:48:45 【问题描述】:

尝试通过 CodePipeline 将应用程序部署到我的 AWS Elastic Beanstalk 时出现权限不足错误。

这是错误: 权限不足 提供的角色没有足够的权限访问 Elastic Beanstalk:访问被拒绝

奇怪的是附加到 CodePipeline 角色的策略确实拥有 Beanstalk 的所有可能权限:

  
    "Action": "elasticbeanstalk:*",
    "Effect": "Allow",
    "Resource": "*"
  

我仔细检查了 CodePipeline 是否附加了正确的角色,并且该角色附加了正确的策略。

这里缺少权限是什么意思?

Edit1:我没有其他可能存在冲突的拒绝政策...

Edit2:我出于测试目的更改了策略(见下文)并且它有效,因此它与权限有关:


    "Statement": [
        
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*"
        
    ],
    "Version": "2012-10-17"

【问题讨论】:

【参考方案1】:

创建管道时,您应该已经创建了service role。这最初由 AWS 创建并添加所有必需的权限。引用文档:

服务角色不是 AWS 托管角色,而是最初创建的 用于创建管道,然后将新权限添加到 服务角色策略,您可能需要更新您的服务角色 管道。使用服务角色创建管道后,您 不能对该管道应用不同的服务角色。附上 向服务角色推荐的策略。

然后在Manage the CodePipeline service role 我们读到:

CodePipeline 服务角色配置了一个或多个策略 控制对管道使用的 AWS 资源的访问。你 可能想要将更多策略附加到此角色,编辑策略 附加到角色,或为其他服务角色配置策略 AWS。

再往下:

您可以编辑服务角色声明以删除对资源的访问权限 你不使用。例如,如果您的管道都不包含 Elastic Beanstalk,您可以编辑策略声明以删除该部分 授予对 Elastic Beanstalk 资源的访问权限。

总结一下:

在创建管道之前,请使用 CLI 或在控制台中创建服务角色。 最初创建此服务角色以包含所有必要的权限。应包括部署到 ElasticBeanstalk 的权限。 服务角色不受 Amazon 管理。这意味着,如果将来需要更多权限来部署到 ElasticBeanstalk,则不会在此处自动添加这些权限。您需要自己添加它们。 您可以编辑角色以添加部署所需的新策略或删除不需要的权限。

您似乎没有正确创建服务角色,或者您已经编辑了角色。或者管道已在未来创建,现在 Elastic Beanstalk 需要更多权限。如果可能,请按照文档中的说明从头开始创建新管道。注意服务角色创建步骤。如果您不能这样做,请再次创建一个新的临时管道,正确创建服务角色并将策略复制到旧服务角色。 (无法更改已创建管道的服务角色。您只能为其附加新策略)。

【讨论】:

【参考方案2】:

确保相邻资源,例如目标 S3 存储桶(如果有)也可以访问 ElasticBeanstalk。

例如,请参阅this related question。

【讨论】:

以上是关于CodePipeline - 由于权限不足导致部署失败的主要内容,如果未能解决你的问题,请参考以下文章

Codepipeline:权限不足无法使用 Amazon S3 对象密钥访问工件

IIS7下由于权限不足,导致没法读取配置文件,引发的错误

IIS.由于权限不足而无法读取配置文件的解决办法

docker-compose进行部署容器的时候,报错权限不足

如何停止 aws codepipeline 部署阶段

CodePipeline:ECR 源 + ECS 部署配置