OSS可以通过阿里云STS(Security Token Service)进行临时授权访问。

背景信息

OSS可以通过阿里云STS(Security Token Service)进行临时授权访问。阿里云STS是为云计算用户提供临时访问令牌的Web服务。通过STS,您可以为第三方应用或子用户(即用户身份由您自己管理的用户)颁发一个自定义时效和权限的访问凭证。关于STS的更多信息,请参见STS介绍

STS的优势如下:

  • 您无需透露您的长期密钥(AccessKey)给第三方应用,只需生成一个访问令牌并将令牌交给第三方应用。您可以自定义这个令牌的访问权限及有效期限。
  • 您无需关心权限撤销问题,访问令牌过期后自动失效。

示例代码

以下代码用于使用STS进行临时授权:

require 'aliyun/sts'
require 'aliyun/oss'

sts = Aliyun::STS::Client.new(
  # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  access_key_id: 'AccessKeyId',
  access_key_secret: 'AccessKeySecret')

# 依次填写角色ARN并自定义角色会话名称。
token = sts.assume_role('role-arn', 'session-name')

client = Aliyun::OSS::Client.new(
  # Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
  access_key_id: token.access_key_id,
  access_key_secret: token.access_key_secret,
  # 从STS服务获取的安全令牌(SecurityToken)。
  sts_token: token.security_token)

# 填写Bucket名称,例如examplebucket。
bucket = client.get_bucket('examplebucket')

向STS申请临时token时,还可以指定自定义的STS Policy。这样申请的临时权限是所扮演角色的权限与Policy指定的权限的交集。以下示例将通过STS Policy申请对examplebucket的只读权限,并指定临时token的过期时间为15分钟。

说明 关于Policy语法和结构的更多信息,请参见RAM Policy概述
require 'aliyun/sts'
require 'aliyun/oss'

sts = Aliyun::STS::Client.new(
  # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  access_key_id: 'AccessKeyId',
  access_key_secret: 'AccessKeySecret')

policy = Aliyun::STS::Policy.new
policy.allow(['oss:Get*'], ['acs:oss:*:*:examplebucket/*'])

token = sts.assume_role('<role arc>', '<session name>', policy, 15 * 60)

client = Aliyun::OSS::Client.new(
  # Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
  access_key_id: token.access_key_id,
  access_key_secret: token.access_key_secret,
  # 从STS服务获取的安全令牌(SecurityToken)。
  sts_token: token.security_token)

# 填写Bucket名称,例如examplebucket。
bucket = client.get_bucket('examplebucket')

相关文档

关于使用STS进行临时授权详细用法和参数说明,请参见API文档