AWS S3 Bucket 权限管理

背景

众所周知 AWS 的产品都非常的复杂与抽象, 如果没有系统性的认知, 自行摸索 S3 的权限管理是非常消耗精力与时间的. 所以这里记录一下 S3 的权限管理模式与开启公开访问权限的基本路径.

正文

0x1 创建 Bucket

所有的权限配置从这里开始, 第一步不能错.

当我们新建一个Bucket时, 将Bucket的名称添加为之后可能的域名映射可以避免复杂的配置, 如 s3.example.com:

0x2 配置 ACL 所有权

ACL 控制指其他的AWS账户是否能够写入此 Bucket, 一般来说我们的 Bucket 都是私有的, 所以不应该开启这个选项:

0x3 配置公共访问设置

开启公开访问的权限是必须的, 它是所有Bucket资源可通过链接外部访问的必要条件, 所以我们需要关闭 阻止所有公开访问 的限制并开启公开访问权限. 最后还须要勾选风险提示才能成功创建 Bucket, 如图:

这一步完成之后直接点击创建存储桶即可.

0x4 配置已创建的Bucket的权限策略

创建好的Bucket可以在 Amazon S3 > 存储桶 中访问, 我们点击创建好的 Bucket 进入详情页然后点击 权限 进入配置页:

然后点击存储桶策略的编辑按钮进入编辑策略的状态:

将以下内容粘贴至编辑器中, 这段策略的意思为 允许所有人访问 s3.example.com / 路径下的所有资源*:

json 复制代码
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::s3.example.com/*"
        }
    ]
}

Resource 字段可以直接复制上方的存储桶 ARN:

保存策略后即可通过资源链接直接访问, 可以进入 对象 页上传图片/文件进行测试.

0x5 获取 Bucket 资源 URL 配置 Cloudflare

上传一个文件后即可通过该文件的链接获取 URL:

一般来说, s3.example.com 这种域名(或者说非法 URI Path) Bucket 的资源 URL 都是由该 AWS S3 Bucket 的区域资源名称 + s3.example.com + 资源名称即 https://s3.{AWS Region ID}.amazonaws.com/{domain}/{object name}, 如下图的 s3.ap-southeast-1.amazonaws.com/s3.example.... 就符合这个条件.

如果不符合该url 那么后续的步骤可能会失败, 需要使用 CloudFront 服务实现

拿到URL后在用这个 hostname 配置 CNAME(s3.ap-southeast-1.amazonaws.com) 至 Cloudflare 的 DNS 配置即可, 如图:

这样就可以通过 https://s3.example.com/{object name} 来访问资源了.

0x6 使用 AWS CloudFront CDN 配置 Cloudflare

如果你的 Bucket 已经创建或者最终获得的 URL 不符合 https://s3.{AWS Region ID}.amazonaws.com/{domain}/{object name} 的模式就需要通过 CloudFront 来实现自定义域名的访问了 (这里特指非 AWS 的外部 DNS 域名服务商).

在创建 CloudFront 配置之前, 我们需要先导入 SSL 证书以支持后续 https 的访问.

导入证书需要先有 SSL 证书, 这里推荐使用 Let's Encrypt 创建免费证书, 具体的步骤可以参考 -> 入门指南.

获取到证书后, 一定记得把区域换成 美国东部 (弗吉尼亚北部) us-east-1, 因为在 CloudFront 中, 只能使用这个区域的证书!!!

导入证书在 AWS Certificate Manager 的导入证书页, 具体填写规则如下:

成功导入后在 CloudFront 中创建分配:

关闭 WAF, 此项为必选, 我们通过 Cloudflare 管理后续的 DNS 流量自然不需要此项, 毕竟 Cloudflare 免费:

然后还需要添加备用的域名与此域名的 SSL 证书, 否则无法通过此域名访问 CloudFront:

创建后就可以拿到 CloudFront 的访问域名了, 然后同上一步一样, 在 Cloudflare 中配置 CNAME 为此域名即可:

相关链接与推荐

Policies and Permissions (S3 Bucket权限策略)

Intermediate Certificates (证书链)

将阿拉伯数字的价格转换为中文价格的实现

相关推荐
sealaugh3214 小时前
aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图
笔记·学习·aws
冰万森18 小时前
亚马逊AI编程工具Amazon Q 和 Amazon CodeWhisperer使用教程
云计算·aws
Victor随笔集2 天前
AWS IoT Core for Amazon Sidewalk
物联网·aws·aws iot·sidewalk
xybDIY3 天前
解决AWS Organizatiion邀请多个Linker账号数量限额问题
云计算·aws
AlbertS4 天前
AWS上迁移WordPress遭遇若干问题记处理办法
acm·aws·wordpress·alb·route53·postfix
shiran小坚果4 天前
AWS Redshift 如何让新的table创建即自动赋予权限
数据库·云计算·database·aws
杰哥在此5 天前
Python知识点:如何使用AWS Greengrass与Python进行边缘计算
python·面试·编程·边缘计算·aws
shiran小坚果5 天前
AWS Redshift把老用户权限赋予新用户
数据库·云计算·database·aws
九河云6 天前
如何保障AWS根账号安全
安全·云计算·aws
大鹅i6 天前
AWS Network Firewall -NAT网关配置只应许白名单域名出入站
云计算·aws