Зачем нужна роль службы?
Роль службы используется службой CodeDeploy для выполнения действий вне CodeDeploy (то есть над другой службой, такой как S3).
AWS имеет особый подход к интеграции услуг. По сути, вы должны предоставить каждой службе, которую вы используете, явное разрешение на использование другой службы (даже если доступ остается в пределах одной и той же учетной записи). Сервису CodeDeploy не разрешено изменять вещи в S3. На самом деле, CodeDeploy даже не разрешено читать файлы с S3 без явного разрешения.
Вот официальное объяснение из документации [1]:
В AWS, Роли службы используются для предоставления разрешений службе AWS, чтобы она могла обращаться к ресурсам AWS. Политики, которые вы прикрепляете к роли службы, определяют, к каким AWS ресурсам сервис может получить доступ и что он может делать с этими ресурсами.
Что вы на самом деле делаете в соответствии со статьей о взломе
- вам нужна учетная запись пользователя с programmati c доступом к вашей aws учетной записи
- к учетной записи пользователя должна быть прикреплена политика, предоставляющая разрешение на загрузку файлов в S3 и запуск CodeDeploy развертывание -> вы предоставляете ключ доступа и секретный ключ доступа этого пользователя в Bitbucket, чтобы он мог загрузить материал в S3 и инициировать развертывание на основе вашей личности
- Не относится к шагам 1 и 2: Создать роль в AWS IAM [2], которая будет использоваться обеими службами (НЕ Bitbucket): CodeDeploy и EC2. Строго говоря, автор статьи hackernoon объединяет здесь два шага в один: вы создаете одну роль, которая используется обеими службами (как указано двумя различными принципалами в доверительных отношениях: ec2.amazon aws .com и codedeploy.us-west-2.amazon aws .com ). Обычно это не , как политики IAM должны быть настроены, потому что это нарушает принцип предоставления наименьших привилегий [4], поскольку экземпляры EC2 получают разрешения от политики AWSCodeDeployRole , которая, вероятно, не нужна насколько я вижу. Но это всего лишь философская заметка здесь. Технически, все шаги, упомянутые в статье о хакернах, должны работать.
Итак, что вы действительно делаете:
- предоставление CodeDeploy разрешения на выполнение различных действий внутри вашей учетной записи, например как просмотр того, какие экземпляры EC2 вы запустили et c. (это указано в политике AWSCodeDeployRole [3])
- предоставление разрешения EC2 на чтение ревизии, которая была загружена на S3 (это указано в политике AmazonS3FullAccess)
Для получения вернуться к вашему вопросу ...
Однако, когда я пытаюсь создать группу развертывания кода, она запрашивает служебную роль, и я не уверен, где ее получить?
Вам необходимо самостоятельно создать роль службы внутри службы IAM (см. [2]). Я не знаю, поддерживается ли это AWS Обучением, но я предполагаю, что это должно быть. После создания служебной роли вы ДОЛЖНЫ назначить ее в группу 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 -последние привилегии