什么是 S3 兼容对象存储?
对象存储将您的文件作为一个个独立的 对象 保存在称为 存储桶(bucket) 的扁平容器中,而不是采用传统磁盘所使用的文件夹与块(folders-and-blocks)模型。每个对象都包含其数据、一个唯一的键(即它的名称)以及元数据。您可以通过 HTTP,使用 Amazon S3 API 来访问它——这是数千种工具、SDK 和备份软件早已支持的事实标准。
由于 Skyline Cloud 对象存储是 S3 兼容 的,凡是能与 Amazon S3 协作的工具——AWS CLI、s3cmd、rclone、MinIO 客户端,Laravel/Django/Node 的 SDK、Veeam,或者您 CMS 的媒体插件——在这里同样可以使用。区别在于您的数据字节实际存放在哪里:境内(沙特王国境内),这让您符合 PDPL 数据驻留要求,并能在您自己的时区获得讲阿拉伯语的支持。
何时使用对象存储(以及何时不该用)
适合使用对象存储
适合使用块/磁盘存储
备份、归档、快照
需要低延迟随机 I/O 的数据库
静态资源:图片、视频、PDF
操作系统 / 启动卷
Web/移动应用中的用户上传内容
需要 mmap 或 POSIX 文件系统的应用
数据湖、日志、大型非结构化数据集
期望挂载磁盘的软件
对象存储可扩展至数十亿个对象,每 GB 成本低廉且持久可靠,并通过 URL 访问——但它 不是 文件系统。您无法 cd 进入其中,也无法在其上运行数据库。
第 1 步:创建存储桶
在您 注册 Skyline Cloud 后,打开控制台的 Object Storage(对象存储) 部分并创建一个存储桶。
事先需要了解的几条规则:
- 存储桶名称在该端点(endpoint)内全局唯一,并且必须符合 DNS 规范:仅限小写字母、数字和连字符;长度 3–63 个字符;不允许下划线或大写字母。示例:
acme-app-uploads。 - 默认选择 Private(私有) 访问权限。仅当您打算直接在 Web 上提供对象时(例如,CDN 后面的一个公开图片存储桶),才将对象设为公开。
- 从存储桶详情中记下您的 端点 URL(endpoint URL) 和 区域(region)——使用 CLI 时这两项都会用到。
第 2 步:生成访问密钥
S3 使用一对密钥进行身份验证,而不是用户名和密码:
- Access Key ID(访问密钥 ID)——属于较为公开的标识符。
- Secret Access Key(私有访问密钥)——仅显示一次。请立即复制并将其保存在密码管理器或密钥保险库中。
在控制台的 Access Keys(访问密钥) 区域生成这对密钥。请遵循最小权限原则:为每个应用或环境(预发布 vs. 生产)创建独立的密钥,这样您可以吊销其中一个而不会影响其他密钥。切勿将密钥提交到 Git,也不要将其粘贴到客户端代码中。
第 3 步:配置 AWS CLI
AWS CLI 是验证一切正常运行的最快方式。安装它,然后创建一个命名配置文件(profile),以免与任何真实的 AWS 配置冲突:
# Install (Linux/macOS)
pip install awscli # or: brew install awscli
aws configure --profile skyline
# AWS Access Key ID [None]: <YOUR_ACCESS_KEY_ID>
# AWS Secret Access Key [None]: <YOUR_SECRET_ACCESS_KEY>
# Default region name [None]: <YOUR_REGION>
# Default output format [None]: json
之后每条命令都通过 --endpoint-url 和该配置文件指向您的 Skyline 端点:
# List your buckets
aws s3 ls --profile skyline \
--endpoint-url https://<YOUR_ENDPOINT>
# List objects in one bucket
aws s3 ls s3://acme-app-uploads --profile skyline \
--endpoint-url https://<YOUR_ENDPOINT>
提示:导出
AWS_PROFILE=skyline并在 shell 中设置端点,这样您就可以省略这些参数。请将<YOUR_ENDPOINT>和<YOUR_REGION>替换为存储桶详情中的实际值。
第 4 步:上传、下载与同步
EP="--endpoint-url https://<YOUR_ENDPOINT> --profile skyline"
# Upload one file
aws s3 cp ./logo.png s3://acme-app-uploads/logo.png $EP
# Download it back
aws s3 cp s3://acme-app-uploads/logo.png ./logo-copy.png $EP
# Sync a whole local directory to a bucket prefix
aws s3 sync ./public/assets s3://acme-app-uploads/assets $EP
# Delete an object
aws s3 rm s3://acme-app-uploads/old.zip $EP
aws s3 sync 只传输发生变化的文件,因此非常适合增量备份和部署流水线。
更喜欢用 s3cmd?
s3cmd --configure # set host_base / host_bucket to <YOUR_ENDPOINT>
s3cmd put ./report.pdf s3://acme-app-uploads/report.pdf
s3cmd ls s3://acme-app-uploads
第 5 步:使用预签名 URL 分享文件
要在不将整个存储桶公开的情况下,授予对某个私有对象的临时、限时访问权限,请生成一个预签名 URL(presigned URL):
aws s3 presign s3://acme-app-uploads/report.pdf \
--expires-in 3600 \
--endpoint-url https://<YOUR_ENDPOINT> --profile skyline
该链接有效期为一小时,随后即失效。对于发票下载、一次性交付链接以及面向特定用户的媒体内容,这是正确的做法——远比将存储桶切换为公开更安全。
第 6 步:将其接入您的应用
让应用的 S3 SDK 指向 Skyline 端点,而非 AWS。以 Laravel 为例,在 config/filesystems.php 中配置 s3 磁盘:
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'endpoint' => env('AWS_ENDPOINT'), // https://<YOUR_ENDPOINT>
'use_path_style_endpoint' => true,
],
将 use_path_style_endpoint(或 AWS SDK for JavaScript 中等效的 forcePathStyle)设为 true,使请求采用 endpoint/bucket/key 形式,而非虚拟主机式子域名。完成之后,Storage::disk('s3')->put(...) 便会直接写入您位于境内的存储桶。
最佳实践
- 生命周期规则(Lifecycle rules)——自动让旧对象(日志、临时上传文件)过期或降级到更低存储层级,以控制成本。
- 版本控制(Versioning)——对保存不可替代数据的存储桶保持开启,这样意外覆盖也能恢复。
- 服务端加密(Server-side encryption)——对 PDPL 下的任何敏感数据进行静态加密。
- 作用域受限的密钥(Scoped keys)——每个服务一个密钥;定期轮换并吊销。
对象存储能与您技术栈的其余部分天然契合:在您的网站运行于 Skyline 云托管 的同时,从存储桶提供资源服务;并将您的 企业邮箱 和数据库的备份保存在另一个启用版本控制的独立存储桶中。如需更深入的境内对象存储指南,请参阅我们的 对象存储资源中心。
几分钟即可开始
启动一个 S3 兼容存储桶,数据保存在沙特境内,价格透明,并提供本地阿拉伯语支持。创建您的免费 Skyline Cloud 账户,今天就创建您的第一个存储桶吧。
Comments
0 total · 0 threads