当我尝试将Java Web应用程序部署到Elastic Beanstalk Tomcat容器时,它失败并出现以下错误:
Service:AmazonCloudFormation, Message:TemplateURL must reference a valid S3 object to which you have access.
请注意以下几点:
答案 0 :(得分:4)
我遇到了这个确切的问题,我可以说它完全是随机的,但事实证明它与IAM角色有关。在我使用数据库迁移脚本添加.ebextensions
之前,一切都运行良好,之后我无法让Bamboo构建器再次运行。然而,我设法弄清楚了(不,多亏了亚马逊关于EB需要什么权限的非现有文档)。
我根据这个要点制定了IAM政策:https://gist.github.com/magnetikonline/5034bdbb049181a96ac9
但是我不得不做一些修改。这个特定的问题是由S3上的限制性政策引起的,所以我只是替换了
提供的那个{
"Action": [
"s3:Get*"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::elasticbeanstalk-*/*"
]
},
这允许具有该策略的用户对存储桶执行各种Get操作,因为我无法找到需要哪个特定的操作。
答案 1 :(得分:1)
上传到beanstalk涉及将一个压缩的工件发送到S3以及修改cloudformation模板(这部分是免提)。
可能附加到jenkins运行程序(或访问凭据)的IAM角色无权访问相关的S3存储桶。通过IAM确保这一点。请参阅:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.iam.html
答案 2 :(得分:0)
这是一个边缘案例,但我想在这里为后人捕捉它。有时可以将此错误消息作为一般错误消息返回。我花了很多时间与AWS一起解决这个错误,发现它与安全令牌服务(STS)凭据到期有关。生成STS凭据时,会话的最长持续时间为36小时。如果生成36小时密钥,则Elastic Beanstalk使用的某些服务不会考虑此会话长度并认为会话已过期。要解决此问题,我们不再允许会话长度超过2小时的STS凭据。
答案 3 :(得分:0)
我也一直在努力解决这个问题,就像在Rick's case中一样,结果证明这是一个权限问题。但他的解决方案对我没用。
我修好了
服务:AmazonCloudFormation,消息:TemplateURL必须引用您有权访问的有效S3对象。
单独添加"s3:Get*"
是不够的,我还需要"s3:List*"
。
有趣的是,我只针对三个EB环境中的问题。事实证明,其他环境确实同时部署到所有节点,而有问题的环境已启用滚动更新(显然,执行其他操作,添加新实例等)。
以下是适用的最终IAM政策:gist: IAM policy to allow Continuous Integration user to deploy to AWS Elastic Beanstalk
答案 4 :(得分:-1)
我有同样的问题。根据我从AWS支持中收集的内容,IAM用户需要完全访问S3才能执行部署等操作。这是因为EB使用CloudFormation,它使用S3来存储模板。您需要附加托管策略" AWSElasticBeanstalkFullAccess"执行部署的IAM用户,或创建如下所示的策略并将其附加到用户。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
理想情况下,亚马逊应该有办法将资源限制在特定的存储桶中,但它现在看起来并不现在可行!