AWS Educate 账户下的 AWS CodeDeploy

AWS CodeDeploy under AWS Educate Account

我在使用我的 AWS Educate 账户部署代码时遇到了一些问题。最初,当我进行设置时,我正在关注这篇文章。

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

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

很好,我可以使用 labs.vocareum 页面上的“单击帐户详细信息”按钮并获取我的密钥,但是当我尝试设置代码部署组时,它要求提供服务角色,我我不确定从哪里得到这个?

为什么需要服务角色?

服务角色由 CodeDeploy 服务使用,以便在 CodeDeploy 之外(即在 S3 等其他服务上)执行操作。

AWS 有一种集成服务的特殊方法。基本上,您必须为您正在使用的每项服务授予使用另一项服务的明确许可(即使访问权限停留在同一帐户的范围内)。没有授予 CodeDeploy 服务更改 S3 中内容的固有权限。事实上,如果没有明确允许,CodeDeploy 甚至不允许从 S3 读取文件。

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

In AWS, service roles are used to grant permissions to an AWS service so it can access AWS resources. The policies that you attach to the service role determine which AWS resources the service can access and what it can do with those resources.

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

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

所以,你实际做的是:

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

回到你的问题...

However when I am attempting to set up a Code Deploy Group it asks for a service role and I am unsure where to get this?

您需要在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