关于阿里云OSS踩坑记录

    前言:最近笔者通过PHP做了一个上传文件到阿里云OSS存储的程序,在上传过程中官方文档写的很清楚,几乎没有遇到什么问题,但在访问文件的过程中,遇到了问题,由于笔者的bucket是私有域,所以访问时,首先要授权,通过sts生成临时用户和token,然后通过oss授权访问接口生成临时访问链接,但是在生成访问链接的时候官方文档并没有写清楚调用方式,所以笔者把文档重新梳理了一下。

一、STS拿到临时AK和securityToken (通过阿里云子用户生成临时用户和令牌)

1、创建用户子账号

   1)云账号登录RAM控制台

   2)在左侧导航栏的人员管理菜单下,单击用户。

   3)单击新建用户。

   4)输入登录名称和显示名称。

   5)在访问方式区域下,选择编程访问。

   6)单击确定。

   7)勾选目标RAM用户,单击添加权限,被授权主体会自动填入。

   8)在添加权限页面,为已创建子账号添加AliyunSTSAssumeRoleAccess权限。

关于阿里云OSS踩坑记录

2、创建权限策略

   1)云账号登录RAM控制台

   2)在左侧导航栏的权限管理菜单下,单击权限策略管理。

   3)单击新建权限策略。

   4)填写策略名称和备注。

   5)配置模式选择可视化配置或脚本配置。

   以脚本配置为例,对ram-test(OSS的BUCKET)添加ListObjects与GetObject等只读权限,在策略内容中配置脚本如下:

关于阿里云OSS踩坑记录

 

关于阿里云OSS踩坑记录

3、创建角色。

   1)云账号登录RAM控制台

   2)在左侧导航栏,单击RAM角色管理。

   3)单击新建RAM角色,选择可信实体类型为阿里云账号,单击下一步。

   4)在新建RAM角色页面,填写RAM角色名称和备注,本示例RAM角色名称为RamOssTest。

   5)选择云账号为当前云账号。

   6)单击完成。

   7)单击为角色授权,被授权主体会自动填入。

   8)在添加权限页面,选择自定义权限策略,添加步骤2中创建的策略Ramtest。

   添加策略后,页面如下图所示:

关于阿里云OSS踩坑记录

4、通过STS API获取STS AK与SecurityToken。

通过调用STS服务接口AssumeRole来获取有效访问凭证。STS SDK的安装及使用详见STS PHP SDK安装及使用

以下是官方代码:

关于阿里云OSS踩坑记录

参数说明如下:

  • AccessKeyId、AccessKeySecret:子账号AK信息。
  • RoleArn:需要扮演的角色ID。
  • RoleSessionName:用来标识临时凭证的名称,建议使用不同的应用程序用户来区分。
  • Policy:在扮演角色的时候额外添加的权限限制。

注意:

     ①    REGION_ID 和 ENDPOINT

             这里的ENDPOINT并不是OSS云存储的ENDPOINT

             具体请参考STS各区域的endpoint,接入地址

             下面列出部分:

             大中华地区都可以用,但最好是在OSS同地区

关于阿里云OSS踩坑记录

     ②    POLICY

关于阿里云OSS踩坑记录

     以上代码是官方给出的代码,但插入我的PHP项目中会报错,因为php不支持json格式的变量声明

     做以下修改

关于阿里云OSS踩坑记录

     ③     最大的坑

关于阿里云OSS踩坑记录

 

     本来以为只用一个STS的SDK就够了,原来还有一个core的SDK,官方并没有对这SDK进行说明

关于阿里云OSS踩坑记录

    而且STS的SDK在GITHUB上并没有单独下载的地方,所以要全部下载

    https://github.com/aliyun/aliyun-openapi-php-sdk

    只使用下面两个:

关于阿里云OSS踩坑记录

 

关于阿里云OSS踩坑记录
   关于调用方式

关于阿里云OSS踩坑记录

   由于core SDK并没有用到命名空间,做以下修改

关于阿里云OSS踩坑记录

二、使用STS进行临时授权访问

关于阿里云OSS踩坑记录参数说明如下:

  • accessKeyId 、第一步拿到的临时AK
  • accessKeySecret :第一步拿到的临时AKS
  • securityToken :第一步拿到的临时令牌

最后:基本上第一步没有问题的话,第二步会很流畅的运行,但就是因为官方文档写的不清不楚,导致在调用的时候好多都要靠猜,对第一次调用PHPer来说很不友好,此篇文章是自己第一次调用“授权访问”的笔记,也希望对以后调用的人有帮助。