本文介绍怎样利用阿里云资源编排服务(ROS),一步创建阿里云资源(以OSS为例)、创建多个子帐号,并付给子帐号不同的资源访问权限。
资源编排的RAM功能介绍
阿里云资源访问控制服务(RAM),帮助您把不同的资源权限分配给特定的用户(比如员工、系统或应用程序),达到最小特权的安全实践。例如,授权某个子用户管理两台指定的ECS实例。
资源编排服务按照三种粒度进行访问控制:
-
- 给当前账号创建子账号,同时给子帐号指定授权策略
-
- 创建用户组,如果给组指定授权策略,组中的每个用户都默认拥有了相同的访问权限
-
- 创建角色,如果给角色设置授权策略,那么扮演此角色的用户即拥有了此访问权限
给子用户授权OSS访问的实践
应用场景:
在某款app的开发过程中,需要将部分数据存储到oss中。管理员创建ros-bucket,考虑到权限隔离的问题,开发小组中只有liSir拥有ros-bucket的读写权限
,其他人只有只读权限
,逻辑结构如下图:
实践:
创建
Bucket(ros-bucket)
- 作为被访问的资源
- 创建用户组
Group(devGroup)
创建两个
User
- User(liSir)
- User(developer), 加入用户组 devGroup
创建两个
Policy
- fullAccessPolicy 拥有bucket的读写权限,并为组devGroup授权
- readOnlyPolicy 拥有bucket的只读权限,并为User(liSir)授权
创建Bucket
ALIYUN::OSS::Bucket 参考模板定义,AccessControl
配置为private
。只有当前账号可以对该bucket内的Object进行读写操作。
"Resources": {
"MyBucket": {
"Type": "ALIYUN::OSS::Bucket",
"Properties": {
"AccessControl": "private",
"BucketName": "ros-bucket"
}
}
}
创建Group
ALIYUN::RAM::Group 参考模板定义,这里定义组名为devGroup。
"Resources": {
"devGroup": {
"Type": "ALIYUN::RAM::Group",
"Properties": {
"GroupName": "devGroup"
}
}
}
创建两个User
ALIYUN::RAM::User 参考模板定义,创建两个子帐号,并分别配置登录名和密码。然后把developer加入到组devGroup。
"Resources": {
"liSir": {
"Type": "ALIYUN::RAM::User"
"Properties": {
"UserName": "liSir",
"LoginProfile": {
"Password": "123456789"
}
}
},
"developer": {
"Type": "ALIYUN::RAM::User",
"Properties": {
"UserName": "developer",
"LoginProfile": {
"Password": "123456789"
},
"Groups": [
"Fn::Join": ["",
[
"Fn::GetAtt" : [ "devGroup", "GroupName"]
]
]
]
}
}
}
创建两个Policy
ALIYUN::RAM::ManagedPolicy 参考模板定义。Policy语法定义。
fullAccessPolicy
- 允许oss类型资源的所有操作
- 然后为User(liSir)授权
readOnlyPolicy
- 允许对oss类型资源进行获取bucket列表操作。
- 然后限制对MyBucket只能进行读取操作。
- 最后为组(devGroup)授权
"Resources": {
"fullAccessPolicy": {
"Type": "ALIYUN::RAM::ManagedPolicy",
"Properties": {
"PolicyName": "fullAccessPolicy",
"PolicyDocument" : {
"Version": "1",
"Statement" : [{
"Effect" : "Allow",
"Action" : [ "oss:*" ],
"Resource" : ["acs:oss:*:*:*"]
}]
},
"Users": [
"Fn::Join": ["",
[
"Fn::GetAtt" : [ "liSir", "UserName"]
]
]
]
}
},
"readOnlyPolicy": {
"Type": "ALIYUN::RAM::ManagedPolicy",
"Properties": {
"PolicyName": "readOnlyPolicy",
"PolicyDocument": {
"Version": "1",
"Statement" : [{
"Effect": "Allow",
"Action": [
"oss:ListBuckets"
],
"Resource": [
"acs:oss:*:*:*"
]
},
{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:ListObjects"
],
"Resource": [
"Fn::Join": ["",
[
"acs:oss:*:*:",
"Fn::GetAtt" : [ "MyBucket", "Name"]
]
]
]
}]
},
"Groups": [
"Fn::Join": ["",
[
"Fn::GetAtt" : [ "devGroup", "GroupName"]
]
]
]
}
}
}
验证(以控制台为例)
- 点击链接到ROS控制台创建资源栈,创建完成的资源列表如下图:
- 用子帐号
liSir
登录oss控制台,可以对ros-bucket进行上传文件、删除文件等任何操作。例如,可以上传几个文件,如下图所示:
- 用子帐号
developer
登录控制台并上传文件, 系统提示没有权限。如下图所示: