Доступ к сборке кода запрещен при загрузке артефакта из S3

Мой CodeBuild настроен с помощью CodePipeline. S3 - это мой магазин артефактов. Я продолжаю получать сообщение об отказе в доступе, несмотря на то, что я прикрепил роли IAM с достаточным доступом.

Снимок экрана с сообщением об ошибке

Сообщение об ошибке сборки кода

Я уже проверил роль службы, связанную с Codebuild. К нему прилагается следующая политика.

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Resource": [
            "arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Build",
            "arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Build:*"
        ],
        "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ]
    },
    {
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::codepipeline-ap-southeast-1-*"
        ],
        "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:GetObjectVersion"
        ]
    }
]

}

Но когда я тестирую его с помощью валидатора политики IAM, я получаю следующее сообщение об ошибке.

введите описание изображения здесь

Основываясь на принятом ответе на этот вопрос, моя текущая политика должна позволять мне без проблем получать артефакты из S3 - AWS Codebuild не работает при загрузке исходного кода. Сообщение: доступ запрещен

Как мне избавиться от сообщения об отказе в доступе?


person Sashi    schedule 13.12.2018    source источник


Ответы (1)


Обычно это происходит, когда у вас уже есть проект CodeBuild и вы интегрируете его в конвейер CodePipeline. Когда вы интегрируете проект Codebuild с CodePipeline, проект будет извлекать его исходный код из выходных данных CodePipeline Source. Исходный вывод будет сохранен в хранилище артефактов, которое является корзиной S3, либо корзиной по умолчанию, созданной CodePipeline, либо той, которую вы укажете при создании конвейера.

Итак, вам нужно будет предоставить разрешения для роли службы CodeBuild для доступа к корзине CodePipline в S3. Роль потребует разрешений, чтобы помещать объекты S3 в корзину, а также получать объекты.

Политика, которую я пробовал, и такая же работает:

{
  "Version": "2012-10-17",
  "Statement": [
{
  "Sid": "CodeBuildDefaultPolicy",
  "Effect": "Allow",
  "Action": [
    "codebuild:*",
    "iam:PassRole"
  ],
  "Resource": "*"      
},
{
  "Sid": "CloudWatchLogsAccessPolicy",
  "Effect": "Allow",
  "Action": [
    "logs:FilterLogEvents",
    "logs:GetLogEvents"
  ],
  "Resource": "*"
},
{
  "Sid": "S3AccessPolicy",
  "Effect": "Allow",
  "Action": [
    "s3:CreateBucket",
    "s3:GetObject",
    "s3:List*",
    "s3:PutObject"
  ],
  "Resource": "*"
  }
 ]
}

Симулятор политики

введите описание изображения здесь

Справочник по AWS

person Yash Bindlish    schedule 13.12.2018
comment
Привет! Спасибо, что помогли мне с этим. По сути, мне нужно добавить эту политику к роли конвейера кода, и это должно сработать, верно? Мне нужно разрешить доступ роли CodePipeline к роли сборки кода? Я правильно понял? - person Sashi; 14.12.2018
comment
Вам нужна роль сервиса AWS CodeBuild, чтобы AWS CodeBuild мог взаимодействовать с зависимыми сервисами AWS (Code Pipeline) от вашего имени. - person Yash Bindlish; 14.12.2018
comment
Политика, которую я опубликовал, принадлежит моей роли службы сборки кода, и у нее есть разрешения на getObject и putObject из конвейера кода. Я попробую создать новый CodePipeline с помощью сборки кода и посмотрю, повторится ли проблема снова. - person Sashi; 14.12.2018
comment
Да, и обратитесь по следующей ссылке, которая поможет понять роль службы и способы использования AWS CodePipeline с AWS CodeBuild docs.aws.amazon.com/codebuild/latest/userguide/ - person Yash Bindlish; 14.12.2018
comment
Я создал новый конвейер и опробовал его. Все та же проблема. Я выполнил точные шаги, указанные по ссылке. Также убедитесь, что я создал новую сборку из консоли CodePipeline вместо CodeBuild. - person Sashi; 15.12.2018
comment
Не могли бы вы опубликовать свой последний документ о политике вместе с результатами симулятора политик в своем первоначальном редактируемом сообщении - person Yash Bindlish; 15.12.2018
comment
В конце концов мне удалось решить эту проблему. Я скопировал и вставил права доступа S3 из вашей политики в свою, и я наконец смог прочитать ведро S3! Не уверен, что это правильный способ сделать это, но на данный момент он определенно решил проблему. Спасибо за вашу помощь. - person Sashi; 15.12.2018
comment
У меня была проблема, когда у меня были get, getobjectversion и уже были там. Я добавил s3: List * ... Я почти уверен, что для сборки кода не нужны разрешения createBucket :) - person ROunofF; 08.04.2020