全部產品
Search
文件中心

Object Storage Service:使用RAMPolicy控制OSS的存取權限

更新時間:Apr 19, 2025

本教程樣本示範了如何使用RAM Policy控制OSS儲存空間、檔案夾及檔案的存取權限。

背景資訊

RAM Policy是基於使用者的授權策略。通過設定RAM Policy,您可以集中系統管理使用者(例如員工、系統或應用程式),並控制他們對資源的存取權限,例如限制使用者對某個Bucket的讀許可權。

RAM Policy為JSON格式,各欄位定義如下:

  • Statement:授權語句,一個權限原則可以有多條授權語句。

  • Effect:授權效力,包括允許(Allow)和拒絕(Deny)兩種。

    說明

    當權限原則中既有Allow又有Deny的授權語句時,遵循Deny優先的原則。

  • Action:對具體資源的操作許可權。

如果您選擇使用RAM Policy,建議您通過官方工具RAM策略編輯器快速產生RAM策略。

相比於RAM Policy,Bucket Policy支援在控制台直接進行圖形化配置操作,並且Bucket擁有者可以直接進行授權訪問。更多資訊,請參見使用Bucket Policy授權其他使用者訪問OSS資源

儲存空間和檔案夾的基本概念

阿里雲OSS的資料模型為扁平型結構,所有檔案都直接隸屬於其對應的儲存空間,不存在目錄與子檔案夾的階層。但您可以在OSS控制台上類比資料夾階層。在該控制台中,您可以按檔案夾對相關檔案進行分組、分類和管理,如下圖所示。ram

OSS使用索引值(key)對格式的分布式Object Storage Service服務。您可以根據其唯一的key(對象名)檢索對象內容。例如,名為examplebucket的儲存空間有三個檔案夾:DevelopmentMarketingPrivate,以及一個對象oss-dg.pdf

  • 建立檔案夾時,控制台會建立一個key為檔案夾名/的對象。

  • 上傳對象到檔案夾中時,控制台會將對象的 key設定為檔案夾名/對象名

    在key中,檔案夾名為首碼,而/為分隔字元。您可以從儲存空間中擷取具有特定首碼和分隔字元的所有對象的列表。在控制台中,單擊檔案夾時,控制台會列出檔案夾中的對象,如下圖所示。

    development

    說明

    當控制台列舉examplebucket儲存空間中的 Development檔案夾時,它會向OSS發送一個用於指定首碼 Development和分隔字元/的請求。因此,儲存空間examplebucket有三個對象,其key分別為Development/Alibaba Cloud.pdfDevelopment/ProjectA.docxDevelopment/ProjectB.docx

在本教程開始之前,您還需要瞭解根級儲存空間內容的概念。假設examplebucket儲存空間包含以下對象:

  • Development/Alibaba Cloud.pdf

  • Development/ProjectA.docx

  • Development/ProjectB.docx

  • Marketing/data2020.xlsx

  • Marketing/data2021.xlsx

  • Private/2017/images.zip

  • Private/2017/promote.pptx

  • oss-dg.pdf

這些對象的key構建了一個以DevelopmentMarketingPrivate作為根級檔案夾並以oss-dg.pdf作為根級對象的邏輯階層。當您單擊OSS控制台中的儲存空間名時,控制台會將一級首碼和一個分隔字元,例如Development/Marketing/Private/顯示為根級檔案夾。對象oss-dg.pdf沒有首碼,因此顯示為根層級項。

ram

OSS的請求和響應邏輯

在授予RAM使用者相關許可權之前,您需要瞭解控制台與OSS之間的請求和響應邏輯。

  • 請求某個儲存空間

    單擊examplebucket儲存空間時,控制台會將GetBucket (ListObjects)請求發送至OSS。

    • 請求樣本

      GET /?prefix=&delimiter=/ HTTP/1.1
      Host: examplebucket.oss-cn-hangzhou.aliyuncs.com
      Date: Fri, 24 Feb 2012 08:43:27 GMT
      Authorization: OSS qn6q*******************:DNrn******************

      此請求包括prefix和delimiter參數,其中prefix的值為空白字串,delimiter的值為正斜線(/)。

    • 響應樣本

      HTTP/1.1 200 OK
      x-oss-request-id: 534B371674E88A4D8906****
      Date: Fri, 7 Aug 2020 08:43:27 GMT
      Content-Type: application/xml
      Content-Length: 712
      Connection: keep-alive
      Server: AliyunOSS
      <?xml version="1.0" encoding="UTF-8"?>
      <ListBucketResult xmlns="http://doc.oss-cn-hangzhou.aliyuncs.com">
      <Name>examplebucket</Name>
      <Prefix></Prefix>
      <Marker></Marker>
      <MaxKeys>100</MaxKeys>
      <Delimiter>/</Delimiter>
          <IsTruncated>false</IsTruncated>
          <Contents>
              <Key>oss-dg.pdf</Key>
              ...
          </Contents>
         <CommonPrefixes>
              <Prefix>Development</Prefix>
         </CommonPrefixes>
            <CommonPrefixes>
              <Prefix>Marketing</Prefix>
         </CommonPrefixes>
            <CommonPrefixes>
              <Prefix>Private</Prefix>
         </CommonPrefixes>
      </ListBucketResult>
    • 控制台解析

      控制台會解析此結果並顯示如下的根層級項:

      ram

  • 請求儲存空間下的某個檔案夾

    單擊Development/檔案夾,控制台會將GetBucket (ListObjects)請求發送至OSS。此請求包括以下參數:

    • 請求樣本

      GET /?prefix=Development/&delimiter=/ HTTP/1.1
      Host: examplebucket.oss-cn-hangzhou.aliyuncs.com
      Date: Fri, 24 Feb 2012 08:43:27 GMT
      Authorization: OSS qn6q*******************:DNrn******************

      此請求包括prefix和delimiter參數,其中prefix的值為Development/,delimiter的值為正斜線(/)。

    • 響應樣本

      作為響應,OSS返回以指定首碼開頭的key:

      HTTP/1.1 200 OK
      x-oss-request-id: 534B371674E88A4D8906****
      Date: Fri, 7 Aug 2020 08:43:27 GMT
      Content-Type: application/xml
      Content-Length: 712
      Connection: keep-alive
      Server: AliyunOSS
      <?xml version="1.0" encoding="UTF-8"?>
      <ListBucketResult xmlns="http://doc.oss-cn-hangzhou.aliyuncs.com">
      <Name>examplebucket</Name>
      <Prefix>Development/</Prefix>
      <Marker></Marker>
      <MaxKeys>100</MaxKeys>
      <Delimiter>/</Delimiter>
          <IsTruncated>false</IsTruncated>
          <Contents>
              <Key>ProjectA.docx</Key>
              ...
          </Contents>
          <Contents>
              <Key>ProjectB.docx</Key>
              ...
          </Contents>
          <Contents>
              <Key>Alibaba Cloud.pdf</Key>
              ...
          </Contents>
      </ListBucketResult>
    • 控制台解析

      控制台會解析此結果並顯示如下的key:

      development

情境樣本

假設您是目標儲存空間examplebucket的Owner,且該Bucket下所有的檔案或目錄讀寫權限ACL預設為私人。現在,您希望授予RAM使用者Anne訪問該Bucket下檔案夾Development及其子檔案夾和檔案的讀寫權限,RAM使用者Leo訪問檔案夾Marketing及其子檔案夾和檔案的唯讀許可權,以及當前阿里雲帳號下的所有RAM使用者均無權訪問檔案夾Private的許可權。

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

  1. 登入OSS控制台建立名為examplebucket的儲存空間

  2. 建立目錄Development、MarketingPrivate

  3. 按如下要求上傳檔案至指定路徑。

    • 將oss-dg.pdf檔案上傳至examplebucket的根目錄。

    • 將檔案Alibaba Cloud.pdf、ProjectA.docx以及ProjectB.docx上傳至Development目錄。

    • 將檔案data2020.xlsx和data2021.xlsx上傳至Marketing目錄。

    • 將檔案images.zip和promote.pptx上傳至Private目錄。

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

通過RAM控制台建立RAM使用者Anne和Leo為例。

步驟三:授予RAM使用者Anne擁有檔案夾Development的讀寫權限

  1. 建立自訂權限原則AllowAnneToReadAndWriteFolderDevelopment

    1. 在左側導覽列,選擇許可權管理 > 权限策略

    2. 單擊创建权限策略,選擇並單擊指令碼編輯頁簽。

    3. 輸入以下權限原則內容,然後單擊確定

      {
          "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/*"
                  ]
              }
          ]
      }
    4. 在建立權限原則頁面輸入策略名稱稱備忘,然後單擊确定

  2. 為RAM使用者Anne添加自訂權限原則AllowAnneToReadAndWriteFolderDevelopment

步驟四:授予RAM使用者Leo擁有檔案夾Marketing的唯讀許可權

參見步驟三建立自訂權限原則AllowLeoToReadAndWriteFolderMarketing,並授予RAM使用者Leo唯讀訪問檔案夾Marketing及檔案夾下所有檔案的許可權。其策略內容配置如下:

{
    "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/*"
            ]
        }
    ]
}

步驟5:拒絕當前阿里雲帳號下的所有RAM使用者訪問Private檔案夾

  1. 建立RAM使用者組添加使用者群組成員

    使用者組建立完成後,將當前阿里雲帳號下的所有RAM使用者添加到該使用者組。

  2. 建立自訂權限原則DenyAllRamToAccessFolderPrivate

    1. 在左側導覽列,選擇許可權管理 > 权限策略

    2. 权限策略頁面,單擊创建权限策略

    3. 輸入以下權限原則內容,然後單擊確定

      {
          "Version":"1",
          "Statement":[
              {
                  "Effect":"Deny",
                  "Action":[
                      "oss:*"
                  ],
                  "Resource":[
                      "acs:oss:*:*:examplebucket/Private/*"
                  ],
                  "Condition":{
      
                  }
              },
              {
                  "Effect":"Deny",
                  "Action":[
                      "oss:ListObjects"
                  ],
                  "Resource":[
                      "acs:oss:*:*:*"
                  ],
                  "Condition":{
                      "StringLike":{
                          "oss:Prefix":[
                              "Private/",
                              "Private/*"
                          ]
                      }
                  }
              }
          ]
      }
    4. 在建立權限原則頁面輸入策略名稱稱備忘,然後單擊确定

  3. 為使用者組添加自訂權限原則DenyAllRamToAccessFolderPrivate

    添加權限原則後,使用者組中的任何RAM使用者都不能訪問您儲存空間examplebucket中的檔案夾Private,且當RAM使用者請求列舉Private檔案夾下的Private/2017/images.zipPrivate/2017/promote.pptx檔案時,OSS也將返回錯誤響應。