AWS Educate帐户下的AWS CodeDeploy

时间:2020-03-29 15:40:32

标签: amazon-web-services aws-code-deploy bitbucket-aws-code-deploy

使用我的AWS Educate帐户进行代码部署时遇到麻烦。最初,当我进行设置时,我关注的是这篇文章。

https://hackernoon.com/deploy-to-ec2-with-aws-codedeploy-from-bitbucket-pipelines-4f403e96d50c?fbclid=IwAR3rezVMGpuQxTJ3AneOeTL2oMHjCKbQB5C5ouTLhJQ5gRp3JeL4GK0f53o

其中讨论了如何设置IAM服务帐户。问题在于,AWS Educate允许您创建账户,但不会生成密钥。为了使我的Spring Boot(和VueJS)应用程序从我的位桶存储库中部署到s3存储桶和ec2中,我需要一个密钥和一个秘密密钥以及CodeDeploy组。

好的,我可以单击labs.vocareum页面上的Account Details按钮并获取我的密钥,但是,当我尝试设置Code Deploy Group时,它会要求服务角色,并且不确定在哪里得到这个吗?

1 个答案:

答案 0 :(得分:1)

为什么需要服务角色?

CodeDeploy服务使用该服务角色来执行CodeDeploy之外的操作(即在另一个服务,例如S3上)。

AWS具有一种集成服务的特殊方法。基本上,您必须授予正在使用的每个服务显式权限才能使用另一个服务(即使访问权限位于同一帐户的范围之内)。没有固有的权限授予CodeDeploy服务来更改S3中的内容。实际上,如果没有明确允许,甚至不允许CodeDeploy从S3读取文件。

这是文档[1]的官方解释:

在AWS中,服务角色用于向AWS服务授予权限,以便它可以访问AWS资源。您附加到服务角色的策略确定该服务可以访问哪些AWS资源以及该资源可以做什么。

根据hackernoon文章,您实际上正在做什么

  1. 您需要一个可以通过编程方式访问AWS帐户的用户帐户
  2. 用户帐户需要附加一个策略,以授予将文件上传到S3并触发CodeDeploy部署的权限->您将此用户的访问密钥和秘密访问密钥提供给Bitbucket,以便它可以将内容上传到S3并根据用户身份触发部署
  3. 与步骤1和2不相关:在AWS IAM [2]中创建一个角色,该角色将由CodeDeploy和EC2这两种服务(NOT Bitbucket)使用。严格来说,hackernoon文章的作者将两个步骤合并为一个:您正在创建一个角色,由两个服务使用(由信任关系中的两个不同的主体指定: ec2.amazonaws.com codedeploy.us-west-2.amazonaws.com )。通常,不是应该如何配置IAM策略,因为它违反了授予最小特权的原则[4],因为EC2实例可能会从 AWSCodeDeployRole 策略接收权限。据我所知不需要。但这仅是一个哲学注释。从技术上讲,hackernoon文章中提到的所有步骤都应该起作用。

所以,您实际要做的是:

  • 授予CodeDeploy权限以在您的帐户内执行各种操作,例如查看您已启动的EC2实例等。(这在策略AWSCodeDeployRole [3]中指定)
  • 授予EC2权限以读取上载到S3的修订版(这在策略AmazonS3FullAccess中指定)

回到您的问题...

但是,当我尝试建立代码部署组时,它要求服务角色,并且我不确定从何处获得该角色?

您需要在IAM服务中自己创建服务角色(请参阅[2])。我不知道AWS Educate是否支持此功能,但我想应该支持。创建服务角色后,必须将其分配给CodeDeploy组(这是您现在所处的位置)。此外,您必须将相同的服务角色分配给您的EC2实例配置文件。

参考文献

[1] https://docs.aws.amazon.com/codedeploy/latest/userguide/getting-started-create-service-role.html
[2] https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console
[3] https://github.com/SummitRoute/aws_managed_policies/blob/master/policies/AWSCodeDeployRole
[4] https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege