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文档。