将角色分配给.ebextensions中的实例

时间:2015-06-05 14:46:57

标签: amazon-web-services elastic-beanstalk amazon-iam

tl; dr 实例获得假定角色,而不是我在配置中设置的角色。

我将docker中的java应用程序部署到elastic-beanstalk;实际上,我在.ebextensions/instance.config中设置了自定义政策的特定角色:

  - namespace: aws:autoscaling:launchconfiguration
    option_name: IamInstanceProfile
    value: custom-profile

当我使用eb init && eb create --tier worker进行部署时,一切正常。然后应用程序尝试访问 custom-profile 中允许的内容,但它失败了:

Exception in thread "main" com.amazonaws.AmazonServiceException: User: arn:aws:sts::***:assumed-role/aws-elasticbeanstalk-ec2-role/*** is not authorized to perform: ...

它甚至没有提到它使用“假定角色”的原因。有趣的是,当我在Web控制台中手动设置角色并上传zip时,它可以正常工作。

我尝试过使用SingleInstance和LoadBalanced,两者都有相同的结果。我已经阅读了docs并用Google搜索,但没有找到任何可行的方法。我已经将PassRole权限添加到我的控制台用户,但我甚至不知道,它是否有帮助。配置被接受为有效,但在创建EC2实例时,我没有任何关于为什么没有分配正确角色的信息。

我会感谢你的建议。

注意:new InstanceProfileCredentialsProvider()用于Java。

2 个答案:

答案 0 :(得分:3)

EB CLI告诉Elastic Beanstalk使用“aws-elasticbeanstalk-ec2-role”实例配置文件。这将覆盖你的ebextensions。 要使用您自己的配置文件,您可以使用“-ip”选项,也可以使用默认保存的配置。

eb create --tier worker -ip custom-profile

如果您想使用已保存的配置执行此操作,请参阅this blog post

答案 1 :(得分:1)

两种可能性

您是否将.ebextension文件提交给git repo?你很可能只是仔细检查。

另一种可能性是,当你运行eb init和eb create时,它会在另一个conf文件中为你设置默认值。这些默认值包括IamInstanceProfile。在交互模式中,您可以选择角色名称,否则它会选择默认名称。 eb通过api传递默认选项设置。您的ebextensions还使用不同的值指定相同的选项设置。如果发生冲突,api会赢得并覆盖您的ebextension中的歌曲。我认为这可能是正在发生的事情。在交互模式下调用eb init / create时,可以尝试指定角色名吗?这样您将使用您的角色而不是默认角色。