В CodeBuild у меня 2 проекта. Один предназначен для промежуточной площадки, а другой - для производственной площадки. Когда я компилирую свой сайт и запускаю его через промежуточный проект, он работает нормально. Он успешно синхронизируется с моим ведром s3 для промежуточного сайта. Однако при попытке скомпилировать его и запустить через производственный проект при запуске команды синхронизации возвращается ошибка:
fatal error: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied
[Container] 2018/09/11 08:40:33 Command did not exit successfully aws s3 sync public/ s3://$S3_BUCKET exit status 1
Я немного покопался и думаю, что проблема в моей политике ведра. Я использую CloudFront в качестве CDN поверх своей корзины S3. Я не хочу изменять политику ведра для производственного ковша до тех пор, пока я не буду абсолютно уверен, что это необходимо. Я боюсь, что это может повлиять на работающий сайт. Вот моя политика ведра для рабочего ведра:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[bucket_name]/*"
},
{
"Sid": "2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity [access_code]"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[bucket_name]/*"
}
]
}
Согласно описанию ошибки, разрешение на список отсутствует.
Добавьте указанное ниже разрешение в политику сегмента:
"Action": [
"s3:Get*",
"s3:List*"
]
Это должно решить вашу проблему. Также проверьте роль службы IAM
, созданную на codebuild
, для доступа к корзинам S3
. Как политика корзины S3
, так и роль IAM
управляют доступом к корзине S3
в этом типе настройки.
Ваша служебная роль должна иметь разрешение списка для S3
.
{
"Sid": "S3ObjectPolicy",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:List*"
],
"Resource": ["arn:aws:s3:::my_bucket",
"arn:aws:s3:::my_bucket/*"]
}
Какую роль и политику IAM использует CodeBuild? Это может помешать сохранению файлов в корзине Prod. Также ведро prod S3 находится в той же учетной записи, что и CodeBuild? В противном случае вам потребуется настроить доступ для нескольких учетных записей.