Я пытаюсь создать команду, которая сделает распространение CloudFront недействительным при выпуске нового кода. Это попытка решить проблему, из-за которой новый вытолкнутый HTML-код не отображается в моем веб-приложении в течение 24 часов. Идея исходит из этого СПРАВОЧНИК ПО КОМАНДАМ AWS CLI
Вот команда:
aws cloudfront create-invalidation --distribution-id XXXXXXXXXXXXXX --invalidation-batch file://invbatch.json
Вот ответ, который я получаю, когда запускаю команду:
Ошибка клиента (AccessDenied) произошла при вызове операции CreateInvalidation: User: arn: aws: iam :: XXXXXXXXXXXXXX: user / cats-kittens-beanstalk-user не авторизован для выполнения: cloudfront: CreateInvalidation
Есть идеи, почему это может быть? Я знаю, что AWS отклоняет этот доступ, даже если в некоторых случаях пользователю разрешено запускать команды - см. Вот.
Политики IAM не позволяют ограничивать доступ к определенным дистрибутивам CloudFront. Решение состоит в том, чтобы использовать подстановочный знак для ресурса вместо ссылки только на конкретный ресурс CloudFront. Добавление этого в вашу политику IAM решит возникшую у вас проблему.
Вот пример этого в действующей политике IAM:
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": [
"cloudfront:CreateInvalidation",
"cloudfront:GetInvalidation",
"cloudfront:ListInvalidations"
],
"Resource": "*"
}
]
}
Документы: