阅读1025 返回首页    go 阿里云 go 技术社区[云栖]


怎样对OSS中的某个目录进行授权___对象存储(OSS)授权问题_授权常见问题_访问控制-阿里云

OSS目录级别的授权

目录级别的授权属于授权的高级功能,如果您有此类需求,请您认真阅读并理解此部分。

背景

假设有一个用于存放照片的Bucket,叫myphotos。这个bucket下有一些目录,代表照片的拍摄地;每个拍摄地目录下又有年份子目录。

目录树结构如下

  1. myphotos[Bucket]
  2. ├── beijing
  3. │ ├── 2014
  4. │ └── 2015
  5. ├── hangzhou
  6. │ ├── 2013
  7. │ ├── 2014
  8. │ └── 2015 //授予此目录只读权限
  9. └── qingdao
  10. ├── 2014
  11. └── 2015

假设我们需要授权一个子用户只读访问myphotos/hangzhou/2015/目录的只读权限。根据使用场景不同,授权策略也有很大的区别。下面我们根据授权策略的复杂程度,由简入繁的为大家介绍三种场景。

场景一:子用户知道所有文件的路径,只需要读取文件内容的权限,不需要列出文件的权限

这个场景的特点是子用户知道文件的完整路径,可以使用完整的文件路径直接去读取文件内容。通常我们会将这样的权限授予一个软件系统,系统中文件路径符合某种规则(比如文件名是员工工号),或者文件路径持久化在软件系统的数据库中。

  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Effect": "Allow",
  6. "Action": [
  7. "oss:GetObject"
  8. ],
  9. "Resource": [
  10. "acs:oss:*:*:myphotos/hangzhou/2015/*"
  11. ]
  12. }
  13. ]
  14. }

场景二:子用户使用OSS CMD访问目录myphotos/hangzhou/2015/,但是不知道目录中有哪些文件,需要列出目录中文件的权限

通常会将这样的权限授予软件开发者。开发者不清楚目录中究竟有哪些文件,然后使用OSS CMD或API直接获取目录信息。

场景一相比,这里需要新增ListObjects的权限。因为我们仅允许列出myphotos/hangzhou/2015/目录中的文件,所以在新增的ListObjects权限中,增加”oss:Prefix”的条件限定。

  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Effect": "Allow",
  6. "Action": [
  7. "oss:GetObject"
  8. ],
  9. "Resource": [
  10. "acs:oss:*:*:myphotos/hangzhou/2015/*"
  11. ]
  12. },
  13. {
  14. "Effect": "Allow",
  15. "Action": [
  16. "oss:ListObjects"
  17. ],
  18. "Resource": [
  19. "acs:oss:*:*:myphotos"
  20. ],
  21. "Condition":{
  22. "StringLike":{
  23. "oss:Prefix":"hangzhou/2015/*"
  24. }
  25. }
  26. }
  27. ]
  28. }

场景三:子用户使用OSS控制台访问目录myphotos/hangzhou/2015/

最易用的场景,当子用户使用可视化的OSS客户端访问目录myphotos/hangzhou/2015/,可视化的客户端像Windows文件管理器一样,让子用户可以从根目录开始,一层一层的进入所要访问的目录。

与场景二相比,使用OSS可视化客户端时需要从从根目录一层一层导航进入myphotos/hangzhou/2015/,所以需要新增以下权限

  1. 列出所有Bucket的权限
  2. 列出myphotos下目录的权限,在这个例子中,即可以看到beijing/hangzhou/qingdao三个目录
  3. 列出myphotos/hangzhou下的目录的权限,即可以看到2013/2014/2015三个目录
  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Effect": "Allow",
  6. "Action": [
  7. "oss:ListBuckets",
  8. "oss:GetBucketAcl"
  9. ],
  10. "Resource": [
  11. "acs:oss:*:*:*"
  12. ]
  13. },
  14. {
  15. "Effect": "Allow",
  16. "Action": [
  17. "oss:GetObject",
  18. "oss:GetObjectAcl"
  19. ],
  20. "Resource": [
  21. "acs:oss:*:*:myphotos/hangzhou/2015/*"
  22. ]
  23. },
  24. {
  25. "Effect": "Allow",
  26. "Action": [
  27. "oss:ListObjects"
  28. ],
  29. "Resource": [
  30. "acs:oss:*:*:myphotos"
  31. ],
  32. "Condition": {
  33. "StringLike": {
  34. "oss:Delimiter": "/",
  35. "oss:Prefix": [
  36. "",
  37. "hangzhou/",
  38. "hangzhou/2015/*"
  39. ]
  40. }
  41. }
  42. }
  43. ]
  44. }

最后更新:2016-09-01 11:46:20

  上一篇:go 怎样为一个子用户授予只读访问ECS的权限___云服务器(ECS)授权问题_授权常见问题_访问控制-阿里云
  下一篇:go 在哪里可以查到OSS的权限定义___对象存储(OSS)授权问题_授权常见问题_访问控制-阿里云