Я участвую в известном конкурсе Cloud Resume Challenge, и сейчас большая часть моих настроек AWS автоматизирована с помощью Terraform, но я застрял на OAC-части настройки дистрибутива CloudFront и не нашел много документации в Интернете или в документации. Вот мой текущий скрипт Terraform:
locals {
s3_origin_id = aws_s3_bucket.gjd_crc_prod_bucket.bucket_regional_domain_name
}
resource "aws_cloudfront_origin_access_control" "crc_cf_oac" {
name = local.s3_origin_id
origin_access_control_origin_type = "s3"
signing_behavior = "always"
signing_protocol = "sigv4"
}
resource "aws_cloudfront_distribution" "crc_prod_cfdist" {
origin {
s3_origin_config {
origin_access_identity = aws_cloudfront_origin_access_control.crc_cf_oac.id
}
domain_name = local.s3_origin_id
origin_id = local.s3_origin_id
}
enabled = true
is_ipv6_enabled = true
default_root_object = "index.html"
default_cache_behavior {
cache_policy_id = "658327ea-f89d-4fab-a63d-7e88639e58f6"
allowed_methods = ["GET", "HEAD"]
cached_methods = ["GET", "HEAD"]
target_origin_id = local.s3_origin_id
viewer_protocol_policy = "https-only"
compress = true
}
viewer_certificate {
cloudfront_default_certificate = true
}
restrictions {
geo_restriction {
restriction_type = "none"
locations = []
}
}
}
Ошибка, которую я получаю, когда подаю заявку через Terraform:
aws_cloudfront_distribution.crc_prod_cfdist: Modifying... [id=E2F87SH1SP8PTO]
╷
│ Error: updating CloudFront Distribution (E2F87SH1SP8PTO): InvalidOriginAccessIdentity: The specified origin access identity does not exist or is not valid.
│ status code: 400, request id: 927f5e89-4ee0-4fa0-99c6-776547f41e03
│
│ with aws_cloudfront_distribution.crc_prod_cfdist,
│ on cloudfront.tf line 12, in resource "aws_cloudfront_distribution" "crc_prod_cfdist":
│ 12: resource "aws_cloudfront_distribution" "crc_prod_cfdist" {
│
╵
Вся документация, которую я могу найти (которую, если честно, не так уж и много), заключается в том, что OAC должен быть таким же простым, как создание ресурса OAC и последующая ссылка на идентификатор указанного ресурса в дистрибутиве, но он действует так, как будто он не существует/не существует. был создан еще.
Есть предположения? Я ненавижу прибегать к устаревшим/устаревшим вариантам.
Обновлено: хотел добавить, что это всего лишь скрипт CloudFront.tf. Я не уверен, какой протокол правильный, но мне нравится хранить службы в отдельных сценариях для удобства чтения. Буду рад поделиться другими, если это покажется необходимым (например, полностью функциональным сценарием корзины S3).
Обновлено: РЕШЕНО. Вот обновленный код, который использует ресурс OAC, но на который ссылаются с использованием OAI:
resource "aws_cloudfront_distribution" "crc_prod_cfdist" {
origin {
origin_access_control_id = aws_cloudfront_origin_access_control.crc_cf_oac.id
domain_name = local.s3_origin_id
origin_id = local.s3_origin_id
}
Таким образом, корзина S3 не настроена как статический сайт, поскольку при использовании AWS это больше не требуется. Установка работает при настройке через портал, поэтому я знаю, что это правда, но в остальном да, я хочу, чтобы дистрибутив CloudFront имел доступ к корзине S3.





Вместо aws_cloudfront_origin_access_control следует использовать aws_cloudfront_origin_access_identity.
OAI был признан устаревшим в пользу OAC: aws.amazon.com/about-aws/whats-new/2022/08/…
О боже, теперь я вижу. Я отредактировал основной пост, добавив обновленный фрагмент функционального кода. Как это сбивает с толку/раздражает.
Итак, вы хотите, чтобы CloudFront получил доступ к вашей корзине S3, настроенной как статический веб-сайт?