【发布时间】:2020-01-07 18:25:48
【问题描述】:
我想创建一个配置为用作网站的 S3 存储桶,并且我想仅限来自特定 VPC 内部的请求访问 S3 网站。 p>
我正在使用 Cloudformation 来设置存储桶和存储桶策略。
bucket CF 启用了WebsiteConfiguration,并将AccessControl 设置为PublicRead。
ContentStorageBucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: PublicRead
BucketName: "bucket-name"
WebsiteConfiguration:
IndexDocument: index.html
ErrorDocument: error.html
存储桶策略包括两个条件:一个条件授予访问办公室 IP 时对存储桶的完全访问权限,另一个条件授予通过 VPC 端点访问。代码如下:
ContentStorageBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref ContentStorageBucket
PolicyDocument:
Id: BucketPolicy
Version: '2012-10-17'
Statement:
- Sid: FullAccessFromParticularIP
Action:
- s3:*
Effect: "Allow"
Resource:
- !GetAtt [ ContentStorageBucket, Arn ]
- Fn::Join:
- '/'
- - !GetAtt [ ContentStorageBucket, Arn ]
- '*'
Principal: "*"
Condition:
IpAddress:
aws:SourceIp: "x.x.x.x"
- Sid: FullAccessFromInsideVpcEndpoint
Action:
- s3:*
Effect: "Allow"
Resource:
- !GetAtt [ ContentStorageBucket, Arn ]
- Fn::Join:
- '/'
- - !GetAtt [ ContentStorageBucket, Arn ]
- '*'
Principal: "*"
Condition:
StringEquals:
aws:sourceVpce: "vpce-xxxx"
为了测试上述政策条件,我做了以下工作:
- 我已将一个名为
json.json的文件添加到 S3 存储桶; - 我创建了一个 EC2 实例并将其放置在存储桶中引用的 VPC 中。
- 我已从白名单 IP 地址内向文件端点
http://bucket-name.s3-website-us-east-1.amazonaws.com/json.json发出 curl 请求,请求成功; - 我已从 EC2 实例(放置在 VPC 中)内部向文件端点发出 curl 请求,但请求失败并显示 403 Access Denied
注意事项:
- 我已确保 EC2 实例位于正确的 VPC 中。
-
aws:sourceVpce不是使用 VPC ID 的值,而是使用对应 VPC 的 Endpoint ID 的值。 - 我还使用了带有 VPC ID 的
aws:sourceVpc,而不是使用带有端点 ID 的aws:sourceVpce,但这产生了与上述相同的结果。
鉴于此,我目前不确定如何继续进行进一步调试。您对可能出现的问题有什么建议吗?如果问题不清楚或有任何需要澄清的地方,请告诉我。感谢您的帮助!
【问题讨论】:
-
您是否检查了您的 EC2 实例所在子网的路由表?您需要一条代表 S3 端点到 vpc 端点的前缀列表的路由(会有一条路由说 pl-XXXXXXXX 到 vpce-XXXXXXXX)。如果此路由不存在,您的请求将通过公共 Internet 并被拒绝,除非它在白名单 IP 上。
-
对于全新的Managing Data Access with Amazon S3 Access Points 来说,这听起来像是一个很棒的用例。
-
如果您通过 awscli 使用 IAM 凭据而不是没有凭据和 curl,访问是否有效?另外,可能的调试帮助:aws.amazon.com/premiumsupport/knowledge-center/…
-
@TopherIsSwell 感谢您标记此内容。目前我在路由表中没有该路由,所以这很可能是问题所在。如果它工作,我会调查并报告。感谢您的帮助。还要感谢 jarmod 提到的调试链接,这似乎也让我找到了丢失的路线。
-
@RafaelMarques 您的存储桶策略对我有效,没有任何更改,因此显然是路由或 VPC 端点策略。
标签: amazon-web-services amazon-s3 amazon-vpc