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 对象密钥访问工件