阿里云oss安全令牌获取
阿里云oss帐号方面搞得比较复杂,关系层层嵌套,也是最烦人的地方,简单的事搞得这么复杂!!
首先需要理清楚 用户、角色、权限 这三个关系,
创建流程
1 创建用户
2 为该用户添加 AliyunOSSFullAccess 权限 (调用STS服务AssumeRole接口的权限)ps: 意思应该就是调用STS服务的角色权限,有了他就可以调用指定角色
3 创建角色
4 为角色添加 AliyunOSSFullAccess权限 (管理对象存储服务(OSS)权限) ps:用户调用oss接口权限
5 这一步根据需要可以省略,例:指定上传文件权限,权限策略-》创建权限-》 脚本编辑-》回到角色管理,添加该权限
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:PutObject", "Resource": [ "acs:oss:*:*:51zuso/exampledir", "acs:oss:*:*:51zuso/exampledir/*" ] } ] }
6 php api获令牌
帐号添加操作过程
1 进入到RAM 访问控制
2 创建用户
3 用户添加 AliyunOSSFullAccess 权限
4 创建角色
选 阿里去帐号
选 当前云帐号
5 为角色添加 AliyunOSSFullAccess权限
php aip调用
1 下载阿里云sdk类库
composer require alibabacloud/sts
2 调用
<?php if (is_file(__DIR__ . '/vendor/autoload.php')) { require_once __DIR__ . '/vendor/autoload.php'; } use AlibabaCloud\Client\AlibabaCloud; use AlibabaCloud\Client\Exception\ClientException; use AlibabaCloud\Client\Exception\ServerException; use AlibabaCloud\Sts\Sts; AlibabaCloud::accessKeyClient('你的用户用AccessKey', '你的用户用access-key-secret') ->regionId('你的Bucket 列表地域') ->asDefaultClient()->options([ ]); try { $request = Sts::v20150401()->assumeRole(); $result = $request ->withRoleArn("你的角色ARN") ->withRoleSessionName("你的角色名") ->withDurationSeconds(3600) ->debug(true) // Enable the debug will output detailed information ->request(); echo '<pre>'; print_r($result->toArray()); } catch (ClientException $exception) { echo $exception->getMessage() . PHP_EOL; } catch (ServerException $exception) { echo $exception->getMessage() . PHP_EOL; echo $exception->getErrorCode() . PHP_EOL; echo $exception->getRequestId() . PHP_EOL; echo $exception->getErrorMessage() . PHP_EOL; }
最终返回
阿里云在线api调式
在这里测试发现,怎么测试都是报错,
后面下载的了相关的sdk与示例代码,在自已服务器上运行是可以的
https://next.api.aliyun.com/api/Sts/2015-04-01/AssumeRole?lang=PHP&sdkStyle=old¶ms={}
//自已引入下载到的sdk if (is_file(__DIR__ . '/vendor/autoload.php')) { require_once __DIR__ . '/vendor/autoload.php'; }