通过STS SDK所生成的访问令牌上面只有“有效时间”控制;请问想对“bucket”进行隔离要怎样操作?
现在同一个阿里云账户里的各个bucket想通过访问令牌做数据隔离要怎样实现?
或者有别的思路可以实现bucket访问权限隔离吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要实现通过STS(Security Token Service)生成的访问令牌对不同Bucket进行数据隔离,可以通过以下方法实现。这些方法结合了STS临时访问凭证、RAM Policy、Bucket Policy以及VPC Policy等机制,确保在同一个阿里云账户下,不同Bucket之间的访问权限能够有效隔离。
STS生成的临时访问凭证权限由RAM角色的权限策略(Role Policy)和请求时附加的自定义Policy共同决定。为了实现Bucket隔离,可以为每个Bucket创建独立的RAM角色,并在角色权限策略中明确限定其可访问的Bucket资源。
创建RAM角色并绑定权限策略
为每个Bucket创建一个专用的RAM角色,并为其绑定仅允许访问特定Bucket的权限策略。例如:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:PutObject"
],
"Resource": [
"acs:oss::123456789012:bucket1/*"
]
}
]
}
上述策略仅允许访问bucket1
中的对象。
通过STS获取临时访问凭证
在调用STS服务获取临时访问凭证时,指定上述RAM角色。如果需要进一步限制权限,可以在STS请求中附加自定义Policy,进一步缩小权限范围。例如:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:GetObject"
],
"Resource": [
"acs:oss::123456789012:bucket1/example-object.txt"
]
}
]
}
这样,生成的临时访问凭证只能访问bucket1
中的example-object.txt
文件。
使用临时访问凭证访问OSS资源
将生成的临时访问凭证分发给客户端,客户端使用该凭证访问指定的Bucket资源。
Bucket Policy是一种面向资源的授权方式,可以直接在Bucket级别设置访问权限。通过Bucket Policy,可以限制哪些用户或角色可以访问特定Bucket。
配置Bucket Policy
在目标Bucket上配置Bucket Policy,明确指定允许访问的RAM用户或角色。例如:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::123456789012:user/user1"
]
},
"Action": [
"oss:GetObject",
"oss:PutObject"
],
"Resource": [
"acs:oss::123456789012:bucket1/*"
]
}
]
}
上述策略仅允许user1
访问bucket1
中的对象。
结合STS临时访问凭证
当使用STS生成的临时访问凭证访问Bucket时,Bucket Policy会与STS凭证的权限策略叠加生效。如果Bucket Policy未授权,则即使持有STS凭证也无法访问。
通过VPC Policy和Bucket Policy的组合,可以实现基于网络环境的访问控制,确保只有来自特定VPC的请求才能访问指定Bucket。
创建VPC并绑定Bucket
确保Bucket所在的VPC与客户端所在的VPC一致。具体操作请参考创建和管理专有网络。
配置VPC Policy
在VPC Policy中,限制只有特定VPC内的请求可以访问指定Bucket。例如:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:PutObject"
],
"Resource": [
"acs:oss::123456789012:bucket1/*"
],
"Condition": {
"StringEquals": {
"acs:SourceVpc": "vpc-1234567890abcdef"
}
}
}
]
}
配置Bucket Policy
在Bucket Policy中,进一步限制只有特定用户或角色可以通过VPC访问Bucket。例如:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::123456789012:user/user1"
]
},
"Action": [
"oss:GetObject"
],
"Resource": [
"acs:oss::123456789012:bucket1/*"
],
"Condition": {
"StringEquals": {
"acs:SourceVpc": "vpc-1234567890abcdef"
}
}
}
]
}
为了防止意外公开访问,建议为所有Bucket开启“阻止公共访问”功能。此功能会忽略已有的公共访问权限,并禁止创建新的公共访问权限。
使用KMS托管凭据
如果需要动态获取敏感信息(如AccessKey),可以使用密钥管理服务(KMS)托管凭据,避免明文存储带来的风险。
定期轮转AccessKey
对于长期有效的AccessKey,建议定期轮转以降低泄露风险。
通过以上方法,您可以实现同一阿里云账户下不同Bucket之间的访问权限隔离。推荐优先使用RAM角色+STS临时访问凭证的方式,结合Bucket Policy和VPC Policy,确保权限控制的灵活性和安全性。