1

我在使用我的 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 存储桶和 ec2,我需要一个密钥和密钥以及 CodeDeploy 组。

很好,我可以使用 labs.vocareum 页面上的 Click the Account Details 按钮并获取我的密钥,但是当我尝试设置代码部署组时,它要求提供服务角色,我不确定从哪里获得这个?

4

1 回答 1

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] 中创建一个角色,这将由两种服务(不是 Bitbucket)使用:CodeDeploy 和 EC2。严格来说,hackernoon 文章的作者在这里将两个步骤合并为一个:您正在创建一个由两个服务使用的角色(由信任关系中的两个不同主体指定:ec2.amazonaws.comcodedeploy.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

于 2020-04-03T00:23:35.880 回答