只需一步:创建oss bucket并控制访问权限

本文介绍怎样利用阿里云资源编排服务(ROS),一步创建阿里云资源(以OSS为例)、创建多个子帐号,并付给子帐号不同的资源访问权限。

先试为快,一步创建 >>

资源编排的RAM功能介绍

阿里云资源访问控制服务(RAM),帮助您把不同的资源权限分配给特定的用户(比如员工、系统或应用程序),达到最小特权的安全实践。例如,授权某个子用户管理两台指定的ECS实例。

资源编排服务按照三种粒度进行访问控制:

  • ALIYUN::RAM::User

    • 给当前账号创建子账号,同时给子帐号指定授权策略
  • ALIYUN::RAM::Group

    • 创建用户组,如果给组指定授权策略,组中的每个用户都默认拥有了相同的访问权限
  • ALIYUN::RAM::Role

    • 创建角色,如果给角色设置授权策略,那么扮演此角色的用户即拥有了此访问权限

给子用户授权OSS访问的实践

应用场景:

在某款app的开发过程中,需要将部分数据存储到oss中。管理员创建ros-bucket,考虑到权限隔离的问题,开发小组中只有liSir拥有ros-bucket的读写权限,其他人只有只读权限,逻辑结构如下图:

只需一步:创建oss 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"]
              ]
            ]
        ]
      }
    }
  }

验证(以控制台为例)

  • 用子帐号liSir登录oss控制台,可以对ros-bucket进行上传文件、删除文件等任何操作。例如,可以上传几个文件,如下图所示:

只需一步:创建oss bucket并控制访问权限

  • 用子帐号developer登录控制台并上传文件, 系统提示没有权限。如下图所示:

只需一步:创建oss bucket并控制访问权限

上一篇:c11 move 和 forward


下一篇:DevOps助力云原生应用开发实战分享