阿里云 OSS 注册与配置(从零开通到可用 AK/SK)标准流程文档
目标:完成 OSS 服务开通 → 创建 Bucket → 创建 RAM 用户 → 获取 AK/SK → 授权访问 OSS ,让后端(Java/其他语言)能正常访问 Bucket。
适用对象:第一次使用阿里云 OSS 的个人/团队账号。
目录
-
- 准备:账号与实名
-
- 开通 OSS 服务
-
- 创建 Bucket(存储空间)
-
- 创建 RAM 用户并获取 AK/SK(AccessKey)
-
- 给 RAM 用户授权 OSS 权限(关键)
-
- 验证配置是否正确(最小验证法)
-
- 常见错误与对照排查
-
- 安全建议(必读)
- 附录 A:最小权限策略模板示例
1. 准备:账号与实名
- 注册阿里云账号(手机号/邮箱均可)。
- 完成实名认证:
- 个人实名认证或企业实名认证均可。
- 充值/开通支付方式(OSS 会按量计费)。
备注:未实名通常无法完整使用云产品,或权限受限。
2. 开通 OSS 服务
- 登录阿里云控制台。
- 在产品与服务中找到 对象存储 OSS。
- 首次进入会提示开通服务,按引导完成开通。
开通完成后,你将可以进行 Bucket 创建、权限管理等操作。
3. 创建 Bucket(存储空间)
3.1 创建入口
- 控制台 → 对象存储 OSS → Bucket 列表 → 创建 Bucket
3.2 创建时必须确认的字段
-
Bucket 名称
- 全局唯一(整个阿里云范围内不能重复)
- 只能使用小写字母、数字、短横线
- - 建议:
项目名-环境-用途,例如:java-zzyl-elias
-
地域(Region)
- 例如:华北2(北京)、华东1(杭州)等
- 选择建议:
- 服务端部署在哪个地域,Bucket 尽量同地域,延迟低、流量成本低
- 后续 Java 配置会用到地域对应的 Endpoint
-
存储类型
- 标准存储(常用默认)
- 低频/归档等按需选择
-
读写权限(ACL)
- 推荐:私有(Private)
- 公共读/公共读写仅在明确需要且做好安全措施时使用
创建成功后,记录以下信息:
bucketName:Bucket 名称region:地域(例如北京)endpoint:地域 Endpoint(后续 SDK 配置用)
4. 创建 RAM 用户并获取 AK/SK(AccessKey)
目的:不要用主账号长期在代码里放 AK,推荐用 RAM 子账号 + 最小权限。
4.1 创建 RAM 用户
- 控制台 → 访问控制 RAM
- 用户 → 创建用户
- 填写:
- 登录名/显示名:自定义
- 勾选 OpenAPI 调用访问 (非常关键)
- 这会让你能创建 AccessKey(AK/SK)
4.2 创建 AccessKey(AK/SK)
- 进入刚创建的 RAM 用户详情
- 访问方式/认证管理中找到 AccessKey
- 点击创建 AccessKey
- 保存好:
AccessKeyId(AK)AccessKeySecret(SK)
注意:SK 通常只在创建时显示一次,务必保存。丢失只能重新生成并替换。
5. 给 RAM 用户授权 OSS 权限(关键)
如果没有授权,会出现典型报错:
AccessDeniedThe bucket you access does not belong to you- 或访问某些 API 被隐式拒绝(ImplicitDeny)
5.1 授权入口
- RAM 控制台 → 用户
- 选择你的 RAM 用户
- 点击 添加权限
5.2 权限选择方式(两种)
方式 A:直接使用系统策略(简单)
适合快速验证或学习环境:
AliyunOSSFullAccess:OSS 全权限(不建议生产长期使用)
方式 B:自定义最小权限策略(推荐)
适合生产环境:只允许访问某个 bucket 的某些动作(Put/Get/Delete 等)。
做法:
- RAM 控制台 → 权限管理 → 策略 → 创建策略(JSON)
- 写入最小策略(示例见附录 A)
- 将策略授权给该 RAM 用户
6. 验证配置是否正确(最小验证法)
验证目标:确认 AK/SK + endpoint + bucketName + 权限 正确。
6.1 必须确认的三件事
-
endpoint 与 bucket 地域一致
- 例如 bucket 在北京:endpoint 必须是
oss-cn-beijing.aliyuncs.com
- 例如 bucket 在北京:endpoint 必须是
-
bucketName 必须是纯 bucket 名
- 正确:
java-zzyl-elias - 错误:
java-zzyl-elias,改了的啊(多了逗号/注释会导致访问不存在/访问别人 bucket)
- 正确:
-
RAM 用户确实对该 bucket 有权限
- 至少要具备你要调用的动作权限(PutObject/GetObject 等)
6.2 典型验证方式(任选其一)
- 使用 OSS 控制台手动上传文件(验证 bucket 可用)
- 使用 OSS Browser(官方工具)用 AK/SK 登录并上传
- 后端写最小测试:列 bucket、上传一个小文件(需要你项目 SDK 支持)
7. 常见错误与对照排查
7.1 Access key id should not be null or empty
含义:程序运行时 没有拿到 AK。常见原因:
- 配置没加载(YAML 前缀不对、未绑定、环境变量没设置)
- AK 写错字段名(
accessKeyId为空) - 使用了环境变量凭证提供器,但系统环境变量没配
排查:打印(脱敏)配置是否为空;确认运行配置里环境变量是否设置。
7.2 The bucket you access does not belong to you
含义:访问的 bucket 不属于当前 AK 所属账号或未被授权。常见原因:
- bucketName 写错(多了字符/注释/空格)
- 使用了另一个账号的 AK
- RAM 策略没有授权访问该 bucket(隐式拒绝)
7.3 AccessDenied / ImplicitDeny
含义:权限不足。处理方式:
- 给 RAM 用户补充策略权限
- 确认策略的
Resource指向正确 bucket - 确认 Action 包含你调用的 API(例如
oss:GetBucketAcl、oss:PutObject)
8. 安全
- 不要把 AK/SK 明文写进 Git 仓库
- 最小权限原则
- 只给必要 Action
- 只允许访问指定 bucket
- 定期轮换 AK
- 生产环境推荐 STS 临时凭证
- 泄露处理
- 立即禁用/删除该 AccessKey
- 生成新 Key 并替换应用配置
附录 A:最小权限策略模板示例
场景:允许某 RAM 用户对指定 bucket 做上传/下载/删除(只对 bucket 内对象生效)。
将下面 JSON 中的 java-zzyl-elias 替换为你的 bucket 名称:
json
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:PutObject",
"oss:GetObject",
"oss:DeleteObject",
"oss:ListObjects"
],
"Resource": [
"acs:oss:*:*:java-zzyl-elias",
"acs:oss:*:*:java-zzyl-elias/*"
]
}
]
}
说明:
这个"java-zzyl-elias"是我自己去的bucket名称
acs:oss:*:*:bucketName/*表示 bucket 下所有对象- 如需更严格,可把
/*细化到某个前缀目录,例如java-zzyl-elias/upload/*