阿里云 ALIYUN OSS 使用STS临时访问凭证访问OSS
使用STS临时访问凭证访问OSS
小官提示:
SDK里有个读取权限的配置文件需要按你的需求改改的,否则提示 403
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:PutObject" ], "Resource": "*" } ] }
https://help.aliyun.com/document_detail/100624.htm?spm=a2c4g.11186623.0.0.1e8f1cd5A7MOQd#concept-xzh-nzk-2gb
您可以通过STS服务给其他用户颁发一个临时访问凭证。该用户可使用临时访问凭证在规定时间内访问您的OSS资源。临时访问凭证无需透露您的长期密钥,使您的OSS资源访问更加安全。
前提条件
已确保当前账号为阿里云账号或者被授予AliyunRAMFullAccess
权限的RAM用户。关于为RAM用户授权的具体步骤,请参见为RAM用户授权。
适用场景
假设您是一个移动App开发者,希望使用阿里云OSS服务来保存App的终端用户数据,并且要保证每个App用户之间的数据隔离。此时,您可以使用STS授权用户直接访问OSS。
使用STS授权用户直接访问OSS的流程如下:
App用户登录。App用户和云账号无关,它是App的终端用户,App服务器支持App用户登录。对于每个有效的App用户来说,需要App服务器能定义出每个App用户的最小访问权限。
App服务器请求STS服务获取一个安全令牌(SecurityToken)。在调用STS之前,App服务器需要确定App用户的最小访问权限(用RAM Policy来自定义授权策略)以及凭证的过期时间。然后通过扮演角色(AssumeRole)来获取一个代表角色身份的安全令牌(SecurityToken)。
STS返回给App服务器一个临时访问凭证,包括一个安全令牌(SecurityToken)、临时访问密钥(AccessKeyId和AccessKeySecret)以及过期时间。
App服务器将临时访问凭证返回给App客户端,App客户端可以缓存这个凭证。当凭证失效时,App客户端需要向App服务器申请新的临时访问凭证。例如,临时访问凭证有效期为1小时,那么App客户端可以每30分钟向App服务器请求更新临时访问凭证。
App客户端使用本地缓存的临时访问凭证去请求OSS API。OSS收到访问请求后,会通过STS服务来验证访问凭证,正确响应用户请求。
步骤一:创建RAM用户
登录RAM控制台。
在左侧导航栏,选择
。单击创建用户。
输入登录名称和显示名称。
在访问方式区域下,选择Open API 调用访问,然后单击确定。
单击复制,保存访问密钥(AccessKey ID 和 AccessKey Secret)。
步骤二:为RAM用户授予请求AssumeRole的权限
单击已创建RAM用户右侧对应的添加权限。
在添加权限页面,选择AliyunSTSAssumeRoleAccess系统策略。
单击确定。
步骤三:创建用于获取临时访问凭证的角色
在左侧导航栏,选择
。单击创建角色,选择可信实体类型为阿里云账号,单击下一步。
角色名称填写为RamOssTest,选择云账号为当前云账号。
单击完成。角色创建完成后,单击关闭。
在RAM角色管理页面,搜索框输入角色名称RamOssTest。
单击复制,保存角色的ARN。
步骤四:为角色授予上传文件的权限
创建上传文件的自定义权限策略。
在左侧导航栏,选择
。单击创建权限策略。
在创建权限策略页面,单击脚本编辑,然后在策略文档输入框中赋予角色向目标存储空间examplebucket下的目录exampledir上传文件的权限。具体配置示例如下。
警告 以下示例仅供参考。您需要根据实际需求配置更细粒度的授权策略,防止出现权限过大的风险。关于更细粒度的授权策略配置详情,请参见通过RAM或STS服务向其他用户授权。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:PutObject" ], "Resource": "*" } ] }
策略配置完成后,单击下一步。
在基本信息区域,填写策略名称为RamTestPolicy,然后单击确定。
为RAM角色RamOssTest授予自定义权限策略。
在左侧导航栏,选择
。在角色页面,找到目标RAM角色RamOssTest。
单击RAM角色RamOssTest右侧的添加权限。
在添加权限页面下的自定义策略页签,选择已创建的自定义权限策略RamTestPolicy。
单击确定。
步骤五:获取临时访问凭证
使用阿里云SDK
您可以使用多语言STS SDK来获取临时访问凭证。