阿里云的OSS对象存储有很多的应用场景,比起自建文件存储服务器,功能更强大,使用更方便。一般使用OSS建议用STS授权的方式去最小化授权,为了用户的使用体验,客户端一般需要直传OSS服务器,尽量要避免先上传到自身的服务器,然后再服务器上再上传到OSS服务器的中转方式。
阿里云后台身份管理-用户,创建一个用户(需要短信验证)https://ram.console.aliyun.com/

下面勾选使用永久 AccessKey 访问:

创建用户后,获取该用户对应的AccessKey ID和AccessKey Secret,记录保存 。
创建角色,STS需要扮演角色。角色名称:role-sts

记录该角色的ARN,比如:acs:ram::188000217311:role/role-sts
权限策略需要创建2个策略:
一个叫 policy-sts,策略内容为(即允许oss的所有操作):
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:*",
"Resource": "*"
}
]
}另一个权限策略叫 policy-oss-对应的bucket名(如policy-oss-myai),策略内容为(仅允许对指定的bucket操作):
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:*",
"Resource": [
"acs:oss:*:1908326626:myai",
"acs:oss:*:1908326626:myai/*"
]
}
]
}上面倒数第2个一长串数字 1908326626 ,其实是阿里云账号的数字ID,上面创建用户之后的登录账号:audi@144397217311.onaliyun.com,@符号之后的就是这串数字ID了。
回到用户列表,点击创建的用户后面的操作按钮:“新增授权”

添加2个权限:
policy-oss-myai:自定义策略(仅允许对指定的bucket操作)
AliyunSTSAssumeRoleAccess:系统策略-调用STS服务AssumeRole接口的权限
提醒:千万别忘记这个系统策略 AliyunSTSAssumeRoleAccess ,它是用于STS 角色扮演的,否则前后端分离代码无权限调用STS方式哦!
回到角色列表,点击角色 role-sts 后面的操作按钮:“新增授权”
添加1个权限:
policy-sts:自定义策略(允许操作所有OSS)
因为扮演的这个角色,也需要有操作OSS的权限。
来源、允许headers均设置:*,暴露headers:ETag,勾选methods:GET\POST\PUT\DELETE\HEAD,缓存时间:1800秒或更长,如下图:

设为公共读,写还是私有的,这样方便客户端读取。
程序对接,一般客户端先去服务器拉取STS token,然后用STS token去直传到OSS,提高用户体验。
对于Laravel、Lumen程序来说,composer安装:
composer require aliyuncs/oss-sdk-php:~2.0 composer require alibabacloud/sts composer require alibabacloud/client:^1.5
依赖:
安装:composer require aliyuncs/oss-sdk-php:~2.0 - Installing aliyuncs/oss-sdk-php (v2.7.2): Extracting archive 安装:composer require alibabacloud/client:^1.5 - Installing mtdowling/jmespath.php (2.7.0): Extracting archive - Installing psr/http-message (2.0): Extracting archive - Installing psr/http-client (1.0.3): Extracting archive - Installing ralouphie/getallheaders (3.0.3): Extracting archive - Installing psr/http-factory (1.0.2): Extracting archive - Installing guzzlehttp/psr7 (2.8.0): Extracting archive - Installing guzzlehttp/promises (2.3.0): Extracting archive - Installing guzzlehttp/guzzle (7.10.0): Extracting archive - Installing clagiordano/weblibs-configmanager (v1.2.0): Extracting archive - Installing adbario/php-dot-notation (2.5.0): Extracting archive - Installing alibabacloud/client (1.5.32): Extracting archive 安装:composer require alibabacloud/sts - Installing alibabacloud/sts (1.8.2294): Extracting archive
剩下的事,就是和程序去对接了。