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 (证书链)

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

相关推荐
dog25021 小时前
把确定性交给统计-浅析 AWS RNG
云计算·aws
知识浅谈1 天前
人工智能日报 每日AI新闻(2026年6月2日):OpenAI上AWS、Anthropic递表与AI终端竞赛升温
大数据·人工智能·aws
yyuuuzz2 天前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
代码N年归来仍是新手村成员4 天前
【AWS】Lambda 初识与服务部署
javascript·react.js·ai·node.js·云计算·ai编程·aws
zhojiew5 天前
在AWS裸金属实例上安装Cubesandbox并集成PydanticAI进行数据分析的实践
数据分析·云计算·aws
yyuuuzz5 天前
aws亚马逊云上运维常见问题梳理
运维·服务器·网络·云计算·aws
亚林瓜子6 天前
AWS S3日志桶常用过期文件生命周期策略
云计算·生命周期·aws·s3·过期·glacier
yyuuuzz6 天前
企业出海场景下的技术适配小经验
运维·服务器·网络·云计算·aws
yyuuuzz8 天前
国外云服务使用的常见技术问题梳理
运维·服务器·网络·数据库·aws
光于前裕于后9 天前
AWS Redshift 集成Zero-ETL和数据共享 Data sharing
云计算·etl·aws