阿里云STS:安全、灵活的临时访问管理
阿里云的STS(Security Token Service)是一种临时访问权限管理服务,用于为用户或应用程序提供临时的访问凭证。这些凭证可以自定义有效期和访问权限,主要用于跨账号访问、临时授权以及单点登录(SSO)等场景。
STS的主要特点
- 临时性:STS Token具有时效性,可以自定义有效期,到期后自动失效,无需手动撤销。
- 自定义权限:可以为STS Token绑定自定义权限策略,提供更加灵活和精细的云资源授权。
- 安全性:减少长期访问密钥泄露的风险,不需要将AccessKey交给第三方应用。
使用阿里云STS的步骤
-
创建RAM用户和RAM角色:
- 登录RAM控制台,创建RAM用户和RAM角色。
- 为RAM角色授予相应的权限策略。
-
获取STS Token:
- 使用RAM用户的访问密钥调用STS API(如
AssumeRole
接口),以获取RAM角色的临时身份凭证,即STS Token。
- 使用RAM用户的访问密钥调用STS API(如
-
使用STS Token访问资源:
- 使用STS Token(包括临时访问密钥和安全令牌)访问阿里云资源,如OSS。
OSS应用 + STS的使用案例
案例背景
某电商企业A将商品数据存储在阿里云OSS中。供应商企业B需要定期向A的OSS上传数据,但企业A不希望将固定AccessKey泄露给企业B。
解决方案
-
创建RAM用户和RAM角色:
- 企业A在RAM控制台创建一个RAM用户(如
upload_user
)和一个RAM角色(如upload_role
)。 - 为
upload_role
授予上传OSS数据的权限策略。
- 企业A在RAM控制台创建一个RAM用户(如
-
获取STS Token:
- 企业A的应用服务器以
upload_user
身份调用STS API的AssumeRole
接口,获取upload_role
的STS Token。
- 企业A的应用服务器以
-
传递STS Token给企业B:
- 企业A将获取的STS Token传递给企业B,企业B使用该Token访问企业A的OSS资源。
-
企业B上传数据:
- 企业B使用STS Token上传数据到企业A的OSS中。Token过期后,企业B将自动失去访问权限。
优势
- 安全性:企业A无需将长期AccessKey泄露给企业B,降低了数据泄露风险。
- 权限控制:企业A可以根据需求动态调整企业B的访问权限。
- 时效性:STS Token过期后自动失效,确保了访问控制的灵活性和时效性。
示例代码(Python)
以下是使用Python获取STS Token并访问OSS的示例代码:
python
import oss2
from aliyunsdkcore.client import AcsClient
from aliyunsdksts.request.v20150401 import AssumeRoleRequest
# STS配置
access_key_id = 'your_access_key_id'
access_key_secret = 'your_access_key_secret'
role_arn = 'your_role_arn'
role_session_name = 'your_role_session_name'
# 获取STS Token
client = AcsClient(access_key_id, access_key_secret)
request = AssumeRoleRequest()
request.set_accept_format('json')
request.set_RoleArn(role_arn)
request.set_RoleSessionName(role_session_name)
response = client.do_action_with_exception(request)
sts_token = response.decode('utf-8')
# 解析STS Token
import json
sts_info = json.loads(sts_token)
access_key_id = sts_info['Credentials']['AccessKeyId']
access_key_secret = sts_info['Credentials']['AccessKeySecret']
security_token = sts_info['Credentials']['SecurityToken']
# 使用STS Token访问OSS
auth = oss2.StsAuth(access_key_id, access_key_secret, security_token)
bucket = oss2.Bucket(auth, 'https://oss-cn-beijing.aliyuncs.com', 'your_bucket_name')
# 上传文件到OSS
bucket.put_object('example.txt', 'Hello, World!')
数值指标
- 有效期:STS Token的有效期可以自定义,通常为15分钟到1小时。
- 权限粒度:STS Token可以精细到具体的资源操作,如读写OSS Bucket。
- 安全性:STS Token减少了长期AccessKey泄露的风险,提高了云资源的安全性。