1. 初识阿里云对象存储OSS
阿里云对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存储服务。它支持存放图片、视频、文档、程序包等各类非结构化数据,广泛用于网站静态资源托管、文件备份与归档、媒体存储、数据湖构建等场景。OSS的数据设计持久性不低于99.9999999999%(12个9),并支持无限扩展。
在使用OSS之前,需要理解几个核心概念:Bucket(存储空间)是存放文件的容器,相当于文件系统的根目录;Object(对象)是OSS中存储的基本数据单元,即具体的文件;Endpoint(访问域名)是访问OSS服务的地址,分为内网Endpoint和外网Endpoint。
2. 开通OSS服务与前期准备
2.1 账号注册与实名认证
使用OSS的第一步是拥有一个阿里云账号。访问阿里云官网,使用手机号或邮箱完成账号注册。注册完成后必须完成实名认证——个人实名或企业实名均可——这是使用绝大多数云产品的前置条件。未实名的账号无法正常创建Bucket、调用SDK接口,仅开放少量只读预览权限。个人用户可通过支付宝刷脸快速完成认证,企业用户需上传营业执照等材料提交人工审核。实名认证通过后,所有云产品服务权限才会完整开放。
2.2 开通OSS服务
登录阿里云统一控制台,在产品检索框输入“对象存储OSS”进入产品主页,点击“开通服务”按钮,勾选服务使用协议确认即可完成开通。需要特别注意的是:购买OSS资源包并不等于自动开通OSS服务,仍需手动完成此开通操作。新开通用户通常会发放对应的免费资源额度,包含基础存储容量与下行流量,具体以平台活动规则为准,可在费用控制台实时查看余量。
需要先登录阿里云控制台,点击:阿里云控制台
开通完成后进入OSS专属控制台,所有Bucket、文件、安全配置均在此页面统一管理。
3. 创建Bucket(存储空间)
Bucket是OSS中最基础的数据存储容器,所有文件(Object)都需要存放在指定的Bucket内。在OSS控制台左侧导航栏点击“Bucket列表”,然后点击“创建Bucket”即可开始创建。创建时涉及的参数选择会直接影响后续的使用体验和成本,以下几个关键参数需要慎重决策。
3.1 Bucket命名规范
Bucket名称在阿里云全平台全局唯一,不存在重名空间。命名规则:仅允许小写英文字母、数字和短横线(-),字符长度3至63位,首尾必须为字母或数字,不能以短横线开头或结尾。推荐命名格式为「项目-环境-用途」,例如 shop-prod-static,通过名称即可区分业务、运行环境和存储用途,方便多Bucket批量管理。名称创建后永久不可修改,若命名错误只能删除重建,删除前必须清空内部全部文件。
3.2 地域(Region)选型
地域选择遵循同域内网免费的核心原则。若业务服务器部署在对应地域的ECS、ACK等阿里云产品上,Bucket选择同一Region即可使用内网Endpoint进行访问,内网传输完全不计下行流量费用。跨地域访问只能使用外网地址,会持续产生流量计费。面向国内用户优先选择华东2(上海)、华北2(北京)等内地节点,面向海外客户可选择新加坡、美西等海外地域。地域创建后无法更改,选错只能重建Bucket并迁移数据。创建Bucket后务必记录对应的内网、外网Endpoint地址,这是SDK、ossutil接入的必备参数。
3.3 存储类型选型
OSS提供标准存储、低频访问存储、归档存储、冷归档存储四种存储类型,支持通过生命周期规则自动转换。不同类型在存储单价、最小留存期限、数据取回费用上差异巨大:
- 标准存储:无最低存储时长限制,读写响应速度最快,适合图片、网页等高频访问的热数据,网站静态资源首选。
- 低频访问存储:要求文件至少留存30天,存储单价更低,单次读取会产生少量取回费,适合月度访问不足1次的备份、素材类数据。
- 归档存储:最低留存60天,存储成本大幅下降,读取前需要1分钟解冻,适合季度级归档文件。
- 冷归档存储:最低留存180天,存储成本最低,解冻耗时更长,适合数年长期不查阅的原始备份、合规档案。
3.4 读写权限(ACL)
强烈建议选择“私有”(Private)。私有权限下,所有文件的访问都需要经过身份验证,默认情况下外部无法直接访问。只有明确需要公开访问的场景(如静态网站托管)才考虑设置为“公共读”,且需要配合其他安全措施。自2025年10月13日起,OSS开始分阶段为所有通过API、SDK或ossutil创建的新Bucket默认启用“阻止公共访问”。这意味着即使您尝试将Bucket设置为公共读,默认情况下也会被阻止,需要在创建后手动关闭该限制。
3.5 版本控制
版本控制功能可以记录Object的每次覆盖和删除操作,方便数据回滚。对于重要的生产数据,建议开启。但需注意,开启版本控制后,历史版本也会持续计费,需要配合生命周期规则清理过期版本。
创建完成后,请记录以下关键信息:Bucket名称、地域(Region)、Endpoint(地域对应的服务访问地址)。这些信息在后续的SDK配置中都会用到。
4. 文件上传:多种方式任你选
OSS支持多种文件上传方式,从最简单的控制台拖拽到自动化CI/CD集成,覆盖了从个人开发者到企业级应用的全场景需求。
4.1 OSS控制台上传
OSS管理控制台是阿里云提供的一款简单且易于上手的网页管理工具,无需安装任何软件,通过浏览器登录即可管理OSS资源。上传操作非常简单:进入目标Bucket,点击左侧导航栏的“文件管理”>“文件列表”,然后点击“上传文件”。将本地文件拖拽到待上传文件区域,或通过扫描文件选择文件。通过控制台单次可上传不超过5GB的文件,对于更大的文件,推荐使用命令行工具ossutil。
4.2 图形化工具ossbrowser
ossbrowser是在Windows、macOS或Linux桌面上管理OSS资源的图形化工具,提供类似本地文件管理器的操作体验。支持拖拽上传、断点续传,适合日常文件管理场景。用户可以从阿里云官网下载对应操作系统的安装包,配置AccessKey后即可像操作本地文件夹一样管理OSS中的文件。
4.3 命令行工具ossutil
ossutil是通过命令行管理OSS资源的工具,支持批量操作、自动化脚本和定时任务。适合需要高效处理大量文件或集成到自动化流程的场景。安装和配置ossutil的步骤如下:
- 从阿里云官网下载对应平台的ossutil可执行文件。
- 运行
ossutil config命令,按提示输入AccessKey ID、AccessKey Secret和Endpoint。 - 上传文件使用
ossutil cp命令,例如:ossutil cp /local/path/file.txt oss://my-bucket/remote/path/ - 支持递归上传整个目录:
ossutil cp -r /local/folder/ oss://my-bucket/remote/folder/
4.4 多语言SDK集成
OSS提供了Java、Python、PHP、Go、Node.js、Ruby等12种编程语言的SDK包,方便在应用程序中集成OSS功能。以下以Python SDK为例,演示完整的文件上传流程。
安装OSS Python SDK:
pip install oss2
Python SDK上传文件示例:
import oss2 # 配置访问凭证 - 建议使用RAM子账号的AccessKey access_key_id = '你的AccessKeyId' access_key_secret = '你的AccessKeySecret' bucket_name = 'your-bucket-name' endpoint = 'oss-cn-hangzhou.aliyuncs.com' # 请替换为实际地域的Endpoint # 创建Bucket对象 auth = oss2.Auth(access_key_id, access_key_secret) bucket = oss2.Bucket(auth, endpoint, bucket_name) # 上传本地文件 - 简单上传 local_file = '/local/path/example.jpg' remote_file = 'uploads/example.jpg' try: bucket.put_object_from_file(remote_file, local_file) print(f'文件 {local_file} 已成功上传至 {remote_file}') except oss2.exceptions.OssError as e: print(f'上传失败: {e}') # 流式上传 - 直接上传内存中的数据 content = b'Hello, OSS!' bucket.put_object('test/hello.txt', content) # 断点续传上传 - 适合大文件 oss2.resumable_upload(bucket, 'large/video.mp4', '/local/path/video.mp4')
Java SDK上传文件示例:
// Maven依赖 // <dependency> // <groupId>com.aliyun.oss</groupId> // <artifactId>aliyun-sdk-oss</artifactId> // <version>3.17.0</version> // </dependency> import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.PutObjectRequest; import java.io.File; public class OSSUploadDemo { public static void main(String[] args) { String endpoint = "oss-cn-hangzhou.aliyuncs.com"; String accessKeyId = "你的AccessKeyId"; String accessKeySecret = "你的AccessKeySecret"; String bucketName = "your-bucket-name"; String objectName = "uploads/example.jpg"; String filePath = "/local/path/example.jpg"; OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); try { PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath)); ossClient.putObject(putObjectRequest); System.out.println("文件上传成功"); } catch (Exception e) { e.printStackTrace(); } finally { ossClient.shutdown(); } } }
5. 文件访问:私有文件的签名URL与自定义域名
5.1 私有文件的访问机制
OSS文件默认为私有权限,只有文件拥有者可访问。出于数据安全考虑,推荐将文件读写权限设置为私有。私有权限的Bucket或Object需要携带签名URL进行请求。OSS不支持通过固定文件URL访问读写权限为私有的文件。但文件拥有者可以生成分享链接(预签名URL),授权他人在有效期内下载或在线预览指定文件。
5.2 通过控制台生成签名URL
在OSS控制台中,进入目标Bucket的文件列表,单击目标文件后在右侧详情面板中复制文件URL,即可获取默认有效期为300秒(5分钟)的临时下载链接。用户可以在详情面板中按需设置链接的过期时间(秒)。需要注意:此URL使用外网Endpoint,任何通过此URL的下载都会产生外网流出流量费。分享前请务必确认文件中不包含任何敏感数据。URL在设定的有效期后会自动失效,如需再次访问需重新生成。
5.3 通过SDK生成签名URL
通过SDK生成签名URL更加灵活,可以精确控制过期时间和访问权限。以下为Python SDK示例:
import oss2 from oss2 import Auth # 初始化认证 auth = Auth('你的AccessKeyId', '你的AccessKeySecret') bucket = oss2.Bucket(auth, 'oss-cn-hangzhou.aliyuncs.com', 'your-bucket-name') # 生成签名URL,有效期设置为3600秒(1小时) object_name = 'uploads/example.jpg' url = bucket.sign_url('GET', object_name, 3600) print(f'签名URL(1小时有效): {url}') # 生成带自定义参数的签名URL(如指定下载为附件) params = {'response-content-disposition': 'attachment; filename=image.jpg'} url_with_params = bucket.sign_url('GET', object_name, 3600, params=params) print(f'带下载参数的签名URL: {url_with_params}')
通过ossutil命令行也可生成签名URL:
ossutil sign oss://my-bucket/uploads/example.jpg --timeout 3600
5.4 绑定自定义域名
绑定自定义域名后,可以使用自定义域名实现文件在线预览、提升品牌一致性,并灵活配置HTTPS证书和CDN加速等能力。操作步骤如下:
- 在OSS控制台进入目标Bucket,选择“Bucket配置”>“域名管理”。
- 点击“绑定域名”,输入自定义域名(如
oss.example.com)。 - 使用域名归属的阿里云账号登录云解析DNS控制台,为目标域名添加CNAME记录,将自定义域名指向OSS提供的CNAME地址。
- 如需HTTPS访问,还需为自定义域名配置SSL证书。
自2025年3月20日起,新开通OSS服务的用户在中国内地地域的Bucket将无法通过默认外网域名调用数据操作类API,需通过自定义域名(CNAME)方式访问OSS服务。这使得绑定自定义域名成为新用户的必要操作。
6. CDN加速OSS:提升访问速度与降低流量成本
6.1 CDN加速的工作原理
CDN加速为OSS提供全球分布式缓存能力。当网站或应用需要向全球用户分发存储在OSS中的静态资源(如图片、音视频、文档)时,通过配置CDN加速,可以显著提升访问速度、降低网络延迟,并削减流量成本。其工作原理如下:
- 请求路由:用户首次请求资源时,请求通过智能DNS解析被路由到地理位置最近且网络状况最优的CDN节点。
- 回源获取:该CDN节点检测到本地无此资源缓存,随即向OSS源站发起回源请求获取资源内容。
- 缓存存储:OSS响应资源内容后,CDN节点根据预设缓存规则将资源存储在本地,同时向用户返回资源内容。
- 缓存命中:后续用户请求相同资源时,CDN节点直接从本地缓存响应,无需回源获取。
6.2 CDN加速配置步骤
前提条件:拥有一个已注册的域名。如果加速区域包含中国内地,域名必须完成ICP备案。
步骤一:添加CDN加速域名并配置源站
- 前往CDN控制台,点击“添加域名”。
- 选择加速区域和业务类型,填写加速域名。建议使用子域名(如
oss.example.com)以便于管理和扩展。 - 点击“新增源站信息”,选择源站信息为“OSS域名”,并选择目标Bucket域名。
- 点击“下一步”,完成CDN加速域名添加。
步骤二:配置CNAME解析
- 前往DNS控制台,在目标域名操作列点击“解析设置”。
- 点击“添加记录”,记录类型选择“CNAME”。
- 主机记录填写 @(主域名)或子域名前缀(如 oss)。
- 记录值填写CDN控制台提供的CNAME值。
步骤三:设置私有Bucket回源
默认情况下,新创建的Bucket读写权限为私有,通过CDN访问时需要开启“私有Bucket回源”功能,授权CDN节点访问私有资源。在CDN控制台目标域名的“回源配置”中,开启“阿里云OSS私有Bucket回源”,回源类型选择“同账号回源”。开启后,CDN将获得访问私有Bucket的授权,并自动在回源请求中添加签名信息。
6.3 使用OSS默认域名的注意事项
若当前使用OSS默认域名(如 {bucket}.oss-cn-hangzhou.aliyuncs.com)访问资源,无法在不改变URL链接的情况下直接转变为CDN加速链接。必须使用自定义域名进行CDN加速,并使用该自定义域名进行访问,这意味着业务侧需要修改原有的URL链接。
7. 安全管理:权限控制、防盗链与CORS
7.1 RAM子账号与最小权限原则
阿里云账号默认拥有全部权限,但强烈不建议在日常操作中使用主账号的AccessKey。阿里云账号下的RAM用户或RAM角色默认没有任何权限,需要阿里云账号或账号管理员通过RAM Policy或Bucket Policy授予操作权限。最佳实践是:
- 创建一个专门用于OSS操作的RAM子账号。
- 为该RAM用户授予最小必要的权限策略。例如,仅需上传和下载权限时,可授予
AliyunOSSReadOnlyAccess+ 自定义写入权限,而非AliyunOSSFullAccess。 - 如果RAM用户缺少OSS读权限,OSS文件列表将无法加载。
- 定期轮换AccessKey,避免密钥泄露风险。
7.2 防盗链(Referer白名单)
为防止其他网站盗用OSS中的资源链接,可以配置防盗链(Referer白名单)。只有来自白名单中网站的请求才能访问OSS资源。配置防盗链需要 oss:PutBucketReferer 权限。在OSS控制台的“权限管理”>“防盗链”中,可以设置允许访问的Referer列表,并选择是否允许空Referer访问。
7.3 跨域资源共享(CORS)
如果Web应用需要从浏览器中直接访问OSS资源(如通过AJAX请求),需要配置跨域资源共享(CORS)规则。在OSS控制台进入目标Bucket,选择“权限管理”>“跨域设置”,添加CORS规则。典型配置包括:允许的来源(Origin)、允许的方法(GET、POST、PUT等)、允许的Headers和暴露的Headers、缓存时间(MaxAgeSeconds)等。
8. 生命周期管理:自动转换存储类型与过期删除
并不是所有上传至OSS的数据都需要频繁访问,但基于数据合规或存档原因,部分数据仍需继续保存。您可以配置基于最后一次修改时间的生命周期规则,定期将Object从热存储类型转为冷存储类型,或者删除Object,以降低存储成本。
8.1 使用场景
- 医疗档案:上传至OSS后半年内偶尔访问,半年后基本不再访问。可设置生命周期规则,将已上传180天的医疗档案转为归档存储。
- 服务热线录音:上传后2个月内用于数据统计,2个月后偶尔访问,半年后基本不再访问,2年后不再需要存储。可设置60天后转低频访问、180天后转归档、730天后删除。
- 批量清理:Bucket内有大量文件需要全部删除,可配置一条匹配整个Bucket的生命周期规则,设置一天后删除所有文件。
8.2 生命周期规则配置要点
生命周期规则目前仅支持根据前缀和标签进行匹配,不支持通配符匹配、后缀匹配以及正则匹配。单个Bucket最多支持配置1000条生命周期规则。生命周期规则创建后的24小时内,OSS会加载规则,加载完成后会在每天的北京时间8:00开始执行。更新生命周期规则可能会中止当天的生命周期任务,请不要频繁更新。
不支持通过生命周期规则将Appendable类型Object转为冷归档或深度冷归档存储。也不支持通过生命周期规则将软链接(symlink)转换为低频访问、归档、冷归档等存储类型。
9. 成本优化:内网免流量与存储类型选择
9.1 内网访问免流量
通过内网访问同地域OSS内的文件时产生的流量费用是免费的,其他费用如请求费用、存储费用等需正常计费。这是OSS成本优化中最重要的一条原则。例如:客户在华东1(杭州)的Bucket中存储了1TB的标准存储文件,并通过华东1(杭州)地域的阿里云ECS实例使用Bucket的内网地址访问该Bucket中的资源,则流量费用为零。公网上传流量(文件从本地传到OSS)也是免费的。因此,务必将业务服务器与OSS Bucket部署在同一地域,以最大限度节省流量成本。
9.2 合理选择存储类型
根据数据的访问频率选择合适的存储类型是控制存储成本的关键。热数据使用标准存储,冷数据转换为低频访问或归档存储,可以显著降低存储费用。需要注意的是,低频访问和归档存储在读取时会收取数据取回费用,且有最低存储时长要求。因此在配置生命周期规则时,需要综合评估数据的访问模式和保存周期,找到成本最优的平衡点。
9.3 监控外网流量防止盗刷
外网流出流量是OSS费用中容易被忽视的部分。如果资源被恶意盗链或攻击,可能产生高额的外网流量费用。建议:
- 开启防盗链(Referer白名单)限制来源。
- 在OSS控制台的“监控审计”中关注外网流出流量的趋势。
- 对于敏感或高频访问的资源,考虑使用CDN加速,CDN下行流量单价通常低于直接访问OSS产生的外网流出流量。
10. 计费概述与常见问题
OSS的按量计费主要涉及以下几个维度:
- 存储容量费用:按实际存储的数据量(GB)和存储类型(标准/低频/归档等)计费。
- 流量费用:主要是外网流出流量费用。内网流量、公网上传流量免费。
- 请求费用:按API调用次数(PUT、GET、DELETE等)计费。
- 数据取回费用:低频访问和归档存储的数据取回会产生额外费用。
合理规划存储类型、利用内网访问、配置生命周期规则,即可有效控制OSS的使用成本。
常见问题解答
问1:OSS Bucket创建后可以修改名称或地域吗?
答:不可以。Bucket名称和地域在创建后均不可修改。如果命名错误或选错地域,只能删除Bucket(需先清空所有文件)后重新创建。
问2:私有Bucket中的文件如何分享给他人?
答:通过生成签名URL(预签名URL)进行分享。在OSS控制台的文件详情面板中可以直接复制有效期可调的临时链接;也可以通过SDK或ossutil的 sign 命令生成自定义有效期的签名URL。
问3:使用CDN加速OSS时,为什么访问URL需要改成自定义域名?
答:因为OSS默认域名(如 {bucket}.oss-cn-hangzhou.aliyuncs.com)无法直接与CDN加速关联。必须绑定自定义域名并将CDN加速域名指向该自定义域名,才能实现CDN加速访问。业务侧需要将原有的URL链接修改为自定义域名格式。
问4:RAM子账号无法加载OSS文件列表,是什么原因?
答:RAM子账号默认没有任何权限。如果缺少OSS读权限(如 AliyunOSSReadOnlyAccess 策略),OSS文件列表将无法加载。需要主账号或管理员为该RAM用户授予相应的OSS操作权限策略。
问5:生命周期规则配置后多久生效?
答:生命周期规则创建后的24小时内,OSS会加载规则。规则加载完成后,OSS会在每天的北京时间8:00开始执行。如果规则指定按天数策略,Object的最后修改时间与规则开始执行时间(8:00)必须间隔24小时以上。
问6:如何最大程度降低OSS的使用成本?
答:主要从三个方面入手:第一,将业务服务器与OSS Bucket部署在同一地域,利用内网访问免流量;第二,根据数据访问频率选择合适的存储类型,冷数据通过生命周期规则自动转为低频访问或归档存储;第三,开启防盗链并监控外网流量,防止恶意盗刷产生额外费用。