gpt4 book ai didi

amazon-web-services - Cloudformation 模板 - 具有 cloudfront 分发的 S3 存储桶网站 - 分发无法访问源

转载 作者:行者123 更新时间:2023-12-03 07:13:45 25 4
gpt4 key购买 nike

我只是想在 S3 存储桶上获取一个静态站点,并且只能通过 CloudFront 发行版访问它,但是缺少一些东西,我不知道是什么。

目前我的堆栈有

  • 用于网站托管的 S3 存储桶
  • 用于为网站提供服务的云前端发行版
  • 存储桶策略,仅允许分配访问存储桶
  • 分发的默认缓存策略

当尝试直接从存储桶网站 URL 访问网站时,我收到 403(禁止、访问被拒绝),没关系。
当尝试从分发域访问它时,我收到一个通用错误页面,其中包含消息无法联系源。
当尝试从我的注册域访问它时,我收到一个 403 错误页面,其中显示消息无法满足请求。,然后是有关如何修复它的通用提示(稍后登录,联系网站所有者,检查文档等)

由于我使用 cli 中的 CloudFormation 模板,因此每个资源都位于同一区域,并且其他所有内容在我看来都是正确的,但显然有些问题。

CloudFormation 模板

Resources:

BucketPolicy:
Type: 'AWS::S3::BucketPolicy'
DependsOn:
- AppBucket
- CloudFrontDistribution
Properties:
Bucket: !Ref AppBucket
PolicyDocument:
Id: MyPolicy
Version: '2012-10-17'
Statement:
- Sid: PolicyForCloudFrontPrivateContent
Action: s3:GetObject
Effect: Allow
Principal:
Service: cloudfront.amazonaws.com
Condition:
StringLike:
aws:Referer: !Sub 'https://*.${CloudFrontDistribution}.cloudfront.net/*'
Resource: !Sub arn:aws:s3:::${AppBucket}/*

CloudFrontDistribution:
Type: AWS::CloudFront::Distribution
DependsOn:
- AppBucket
- DefaultCachePolicy
Properties:
DistributionConfig:
Enabled: true
Origins:
- Id: AppBucket
DomainName: !GetAtt AppBucket.DomainName
OriginPath: /*
S3OriginConfig: {}
DefaultCacheBehavior:
ViewerProtocolPolicy: redirect-to-https
TargetOriginId: AppBucket
CachePolicyId: !Ref DefaultCachePolicy

AppBucket:
Type: 'AWS::S3::Bucket'
Properties:
BucketName: 'test-spa-stack-bucket-app'
PublicAccessBlockConfiguration:
BlockPublicAcls : false
BlockPublicPolicy : false
IgnorePublicAcls : false
RestrictPublicBuckets : false
VersioningConfiguration:
Status: Enabled
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: 'AES256'
WebsiteConfiguration:
IndexDocument: index.html

DefaultCachePolicy:
Type: AWS::CloudFront::CachePolicy
Properties:
CachePolicyConfig:
Name: test-cache-policy
DefaultTTL: 10
MaxTTL: 10
MinTTL: 1
ParametersInCacheKeyAndForwardedToOrigin:
CookiesConfig:
CookieBehavior: none
EnableAcceptEncodingBrotli: true
EnableAcceptEncodingGzip: true
HeadersConfig:
HeaderBehavior: none
QueryStringsConfig:
QueryStringBehavior: none

最佳答案

您的存储桶策略似乎有误。

您需要允许 CloudFront 分配的 Origin 访问控制才能访问 S3 存储桶。

{
"Version": "2012-10-17",
"Statement": {
"Sid": "AllowCloudFrontServicePrincipalReadOnly",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE"
}
}
}
}

您还需要在 CloudFront 分配定义中提供同源访问控制 ID:

  CloudFrontDistribution:
Type: AWS::CloudFront::Distribution
DependsOn:
- AppBucket
- DefaultCachePolicy
Properties:
DistributionConfig:
Enabled: true
Origins:
- Id: AppBucket
DomainName: !GetAtt AppBucket.DomainName
OriginPath: /*
OriginAccessControlId: "EDFDVBD6EXAMPLE" <- PROVIDE ID HERE
DefaultCacheBehavior:
ViewerProtocolPolicy: redirect-to-https
TargetOriginId: AppBucket
CachePolicyId: !Ref DefaultCachePolicy

参见Restricting access to an Amazon S3 origin

关于amazon-web-services - Cloudformation 模板 - 具有 cloudfront 分发的 S3 存储桶网站 - 分发无法访问源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75212166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com