全部產品
Search
文件中心

Object Storage Service:基於RAM Policy控制OSS的存取權限

更新時間:Jan 21, 2026

通過完整的企業情境示範,掌握針對OSS儲存空間、目錄和檔案配置精細化存取權限的方法。深入瞭解OSS扁平化儲存結構和首碼列舉機制對策略配置的影響,掌握為不同RAM使用者授予目錄層級讀寫、唯讀及拒絕存取權限。

儲存結構與授權

OSS儲存模型

OSS採用扁平化儲存模型,以索引值(Key-Value)對格式儲存物件檔案,所有檔案直接隸屬於儲存空間,物理上不存在目錄層級結構。控制台中顯示的“目錄”通過對象檔案Key的首碼和分隔字元(/)類比出資料夾階層,實現檔案的分組、分類和管理功能。

以儲存空間examplebucket為例,控制台顯示的目錄結構及對應的對象Key如下:

examplebucket
├── Development/                     # Key: Development/(目錄對象)
│   ├── Alibaba Cloud.pdf            # Key: Development/Alibaba Cloud.pdf
│   ├── ProjectA.docx                # Key: Development/ProjectA.docx
│   └── ProjectB.docx                # Key: Development/ProjectB.docx
├── Marketing/                       # Key: Marketing/(目錄對象)
│   ├── data2020.xlsx                # Key: Marketing/data2020.xlsx
│   └── data2021.xlsx                # Key: Marketing/data2021.xlsx
├── Private/                         # Key: Private/(目錄對象)
│   └── 2017/                        # Key: Private/2017/(目錄對象)
│       ├── images.zip               # Key: Private/2017/images.zip
│       └── promote.pptx             # Key: Private/2017/promote.pptx
└── oss-dg.pdf                       # Key: oss-dg.pdf

目錄對象的Key以/結尾,這是OSS識別“目錄”的標誌。實際儲存中,所有對象(包括目錄對象)都是扁平儲存的。

由於OSS沒有真正的目錄層級,當需要授權訪問某個“目錄”時,實際上是在授權訪問具有特定首碼的所有對象。例如授權訪問Development/目錄,等同於授權訪問所有Key以Development/開頭的對象。

Bucket、目錄、檔案請求差異

不同的操作目標對應不同的API請求和Resource配置,理解這些差異是正確配置權限原則的關鍵。

ListObjects請求機制

控制台檔案清單顯示目錄結構的核心是GetBucket (ListObjects)介面的兩個參數:

參數

作用

樣本值

prefix

限制返回的對象必須以該首碼開頭

Development/

delimiter

對象分組的字元,通常為/

/

使用者在控制台點擊Development/檔案夾時,控制台向OSS發送如下請求:

GET /?prefix=Development/&delimiter=/ HTTP/1.1
Host: examplebucket.oss-cn-hangzhou.aliyuncs.com

OSS返回所有以Development/開頭的對象。由於指定了delimiter=/,OSS會將子目錄(如Development/SubFolder/)作為CommonPrefixes返回,而非展開其下的所有檔案。

不同操作的Resource配置

操作目標

觸發的API

Resource配置

策略配置要點

列舉儲存空間根目錄

ListObjects,prefix為空白,delimiter為/

acs:oss:*:*:examplebucket

Resource指向Bucket本身,而非具體路徑

進入某個檔案夾

ListObjects,prefix為檔案夾名/,delimiter為/

acs:oss:*:*:examplebucket

Resource指向Bucket本身,而非具體路徑,通過Condition的oss:Prefix限制可列舉範圍

讀寫檔案內容

GetObjectPutObject

acs:oss:*:*:examplebucket/檔案夾名/*

Resource可精確到路徑,支援萬用字元*

控制台與API/SDK訪問差異

通過OSS控制台訪問時,使用者需要從Bucket列表逐層導航進入目標目錄,這比直接使用API/SDK需要更多的許可權:

訪問方式

要求的權限

API/SDK

僅需目標資源的操作許可權(如oss:GetObject

控制台

除目標資源許可權外,還需oss:ListBuckets(顯示Bucket列表)、oss:GetBucketInfo(顯示Bucket資訊)等輔助許可權

情境說明

假設儲存空間examplebucket所有檔案的讀寫權限ACL預設為私人。儲存空間結構如下:

examplebucket
├── Development/           # 開發部門檔案夾
│   ├── Alibaba Cloud.pdf
│   ├── ProjectA.docx
│   └── ProjectB.docx
├── Marketing/             # 市場部門檔案夾
│   ├── data2020.xlsx
│   └── data2021.xlsx
├── Private/               # 機密檔案夾
│   └── 2017/
│       ├── images.zip
│       └── promote.pptx
└── oss-dg.pdf

許可權控制目標如下:

RAM使用者/使用者組

授權目標

權限類別型

RAM使用者 Anne

Development/檔案夾及其所有檔案

讀寫權限

RAM使用者 Leo

Marketing/檔案夾及其所有檔案

唯讀許可權

指定使用者組的所有成員

Private/檔案夾及其所有檔案

禁止訪問

步驟一:建立儲存空間並上傳檔案

  1. 前往Bucket列表建立Bucket,如examplebucket

  2. 在儲存空間內建立目錄DevelopmentMarketingPrivate(在Private下再建立子目錄2017)。

  3. 按如下路徑上傳檔案

    • 根目錄:oss-dg.pdf

    • Development/目錄:Alibaba Cloud.pdfProjectA.docxProjectB.docx

    • Marketing/目錄:data2020.xlsxdata2021.xlsx

    • Private/2017/目錄:images.zippromote.pptx

步驟二:建立RAM使用者Anne和Leo

前往RAM使用者列表建立使用者Anne和Leo。

步驟三:授予Anne對Development檔案夾的讀寫權限

策略設計思路

要實現對Development/檔案夾的讀寫訪問,需要授予兩類許可權:

  1. 列舉許可權:允許使用者查看Development/檔案夾的內容(oss:ListObjects),通過Condition限制只能列舉以Development開頭的對象。

  2. 讀寫權限:允許使用者讀取和上傳Development/下的檔案(oss:GetObjectoss:PutObject),Resource指向examplebucket/Development/*

建立並授權策略

  1. 前往RAM權限原則列表,單擊建立權限原則

  2. 選擇指令碼編輯,輸入以下策略內容:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:ListObjects",
          "Resource": "acs:oss:*:*:examplebucket",
          "Condition": {
            "StringLike": {
              "oss:Prefix": [
                "Development",
                "Development/*"
              ]
            }
          }
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetObject",
            "oss:PutObject",
            "oss:GetObjectAcl"
          ],
          "Resource": "acs:oss:*:*:examplebucket/Development/*"
        }
      ]
    }

    策略解析

    • 第一個Statement:授予列舉許可權,Resource為Bucket本身,通過Conditionoss:Prefix條件限制只能列舉Development及其子目錄下的內容。

    • 第二個Statement:授予讀寫權限,Resource精確指向Development/*路徑下的所有對象。

  3. 單擊確定,輸入策略名稱稱(如AllowAnneAccessDevelopment),單擊確定完成建立。

  4. 前往RAM使用者列表,為RAM使用者Anne添加許可權,選擇剛建立的策略。

步驟四:授予Leo對Marketing檔案夾的唯讀許可權

參照步驟三,為RAM使用者Leo建立並授予唯讀策略。與讀寫策略的區別在於Action只包含讀取相關操作。策略內容:

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:ListObjects",
      "Resource": "acs:oss:*:*:examplebucket",
      "Condition": {
        "StringLike": {
          "oss:Prefix": [
            "Marketing",
            "Marketing/*"
          ]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "oss:GetObject",
        "oss:GetObjectAcl"
      ],
      "Resource": "acs:oss:*:*:examplebucket/Marketing/*"
    }
  ]
}

Action中移除了oss:PutObject,Leo只能讀取而不能上傳或修改檔案。

步驟五:禁止指定使用者組訪問Private檔案夾

通過使用者組統一系統管理權限,將需要禁止訪問Private/檔案夾的RAM使用者添加到同一使用者組,然後為該使用者組配置拒絕策略。

說明

此方法僅對已加入使用者組的RAM使用者生效。如需對帳號下所有RAM使用者(包括後續新增的使用者)生效,建議使用Bucket Policy在資源側配置拒絕策略。

建立使用者組並新增成員

  1. 前往RAM使用者組列表建立使用者組(如DenyPrivateAccessGroup)。

  2. 添加群組成員,將需要禁止訪問Private/檔案夾的RAM使用者添加到使用者組。

建立並授予拒絕策略

  1. 前往RAM權限原則列表,單擊建立權限原則

  2. 選擇指令碼編輯,輸入以下策略內容:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Deny",
          "Action": "oss:*",
          "Resource": "acs:oss:*:*:examplebucket/Private/*"
        },
        {
          "Effect": "Deny",
          "Action": "oss:ListObjects",
          "Resource": "acs:oss:*:*:examplebucket",
          "Condition": {
            "StringLike": {
              "oss:Prefix": [
                "Private/",
                "Private/*"
              ]
            }
          }
        }
      ]
    }

    策略解析

    • 第一個Statement:拒絕對Private/路徑下所有檔案的任何操作。

    • 第二個Statement:拒絕列舉Private/檔案夾的內容,防止使用者查看檔案清單。

  3. 單擊確定,輸入策略名稱稱(如DenyAccessPrivateFolder),單擊確定完成建立。

  4. 前往RAM使用者組列表,為RAM使用者組添加許可權,選擇剛建立的策略。

使用者組中的RAM使用者嘗試訪問Private/檔案夾時,無論是列舉檔案還是下載檔案,OSS都將返回許可權拒絕的錯誤響應。

相關文檔