AWS codebuild не может загрузить исходный код при запуске из codepipeline

У меня есть задание сборки кода AWS, которое отлично работает, когда я запускаю его вручную как пользователь root.

У меня есть строка кода, которая должна запускать задание сборки, когда codecommit сливается с мастером. Он запускает задание и запускает сборку, но не удается загрузить исходный код.

Ive прикрепил к конвейеру полные политики S3 / codebuild / codecommit, но он по-прежнему отказывает в доступе.

Какие разрешения мне не хватает?


person user618509    schedule 24.01.2018    source источник
comment
Где именно вы видите отказано в доступе и каково полное сообщение об ошибке? Находится ли он в конвейере или внутри сборки (т.е. одна из фаз сборки не работает)? CodeBuild использует отдельную роль (не роль конвейера) для извлечения источника и загрузки артефактов в S3.   -  person Clare Liguori    schedule 25.01.2018


Ответы (2)


Обычно это происходит, когда у вас уже есть проект CodeBuild и вы интегрируете его в проект CodePipeline. Codebuild теперь не загружает исходники из репозитория CodeCommit / Github. Вместо этого он попытается загрузить исходный артефакт, созданный в сегменте codepipeline в S3. Итак, вам необходимо предоставить разрешения роли CodeBuild для доступа к сегменту codepipline в S3.

Вы можете сделать это, изменив прикрепленную политику роли Codebuild (или добавив новую политику), которая дает доступ к следующим операциям.

s3:ListObjects
s3:GetObject
s3:ListBucket

для вашего сегмента Codepipeline и его объектов

"arn:aws:s3:::codepipeline-bucket",
"arn:aws:s3:::codepipeline-bucket/*"

Или вы можете просто добавить все операции для этого сегмента и его объекта. Вы можете отпустить изменения, и это сработает. Lmk, если это не так.

person stelo    schedule 16.02.2018
comment
Вам также потребуется добавить операцию s3:PutObject, поскольку CodeBuild попытается опубликовать артефакт сборки в сегменте конвейера на S3. - person stelo; 16.02.2018

Причина в том, что для роли службы CodeBuild требуется разрешение на доступ к корзине CodePipeline S3. Чтобы исправить это, вы можете прикрепить встроенную политику или изменить существующую политику, чтобы разрешить этим действиям доступ к объектам в вашей корзине CodePipeline S3 (чтобы указать ресурсы для политики)

s3:GetObject
s3:GetObjectVersion
s3:PutObject    

Это политика в json, не забудьте заменить S3-BUCKET-NAME своим фактическим именем ведра s3 codepipeline.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::S3-BUCKET-NAME/*"
        }
    ]
}

Чтобы найти имя корзины S3, вы можете сделать следующее в консоли AWS, чтобы отследить источник ошибки:

  1. Перейти в CodeBuild
  2. Выберите Сборка проектов на левой панели.
  3. Выберите свой проект, будет отображена история сборки.
  4. щелкните элемент запуска сборки со статусом сбой
  5. См. Ошибку в журналах сборки, если есть
  6. Выберите детали этапа
  7. CodeBuild, скорее всего, завершился ошибкой на этапе DOWNLOAD_SOURCE со следующим сообщением об ошибке:
CLIENT_ERROR: AccessDenied: Access Denied status code: 403, request id: 
requestId, host id: hostId for primary source and source version 
arn:aws:s3:::S3-BUCKET-NAME/path
person Jun711    schedule 24.05.2019