教程示例:控制儲存空間和資料夾的訪問許可權

柯炎發表於2018-07-04

本教程示例詳細演示瞭如何控制使用者對 OSS 儲存空間和資料夾的訪問。在示例中,我們首先建立一個儲存空間和資料夾,然後使用阿里雲主賬號建立訪問管理 (RAM) 使用者,併為這些使用者授予對所建立 OSS 儲存空間及資料夾的增量許可權。

儲存空間和資料夾的基本概念

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

example-company

OSS 提供使用鍵值(key)對格式的分散式物件儲存服務。使用者根據其唯一的key(物件名)檢索物件的內容。例如,名為 example-company 的儲存空間有三個資料夾:Development、 Marketing 和 Private,以及一個物件 oss-dg.pdf

  • 在建立 Development 資料夾時,控制檯會建立一個key為 Development/ 的物件。注意,資料夾的key包括分隔符 /
  • 當您將名為 ProjectA.docx 的物件上傳到 Development 資料夾中時,控制檯會上傳該物件並將其key設定為 Development/ProjectA.docx

    在該key中,Development 為字首,而 / 為分隔符。您可以從儲存空間中獲取具有特定字首和分隔符的所有物件的列表。在控制檯中,單擊 Development 資料夾時,控制檯會列出資料夾中的物件,如下圖所示。

    devfolder

說明:當控制檯列出 example-company 儲存空間中的 Development 資料夾時,它會向 OSS 傳送一個用於指定字首 Development 和分隔符 / 的請求。控制檯的響應與檔案系統類似,會顯示資料夾列表。上例說明,儲存空間 example-company 有三個物件,其key分別為 Development/Alibaba Cloud.pdf、 Development/ProjectA.docxDevelopment/ProjectB.docx

控制檯通過物件的key推斷邏輯層次結構。當您建立物件的邏輯層次結構時,您可以管理對個別資料夾的訪問,如本教程後面描述的那樣。

在本教程開始之前,您還需要知道“根級”儲存空間內容的概念。假設 example-company 儲存空間包含以下物件:

  • Development/Alibaba Cloud.pdf
  • Development/ProjectA.docx
  • Development/ProjectB.docx
  • Marketing/data2016.xlsx
  • Marketing/data2016.xlsx
  • Private/2017/images.zip
  • Private/2017/promote.pptx
  • oss-dg.pdf

這些物件的key構建了一個以 Development、Marketing 和 Private 作為根級資料夾並以 oss-dg.pdf 作為根級物件的邏輯層次結構。當您單擊 OSS 控制檯中的儲存空間名時,控制檯會顯示將頂級字首和一個分隔符(Development/、Marketing/ 和 Private/)顯示為根級資料夾。物件 oss-dg.pdf 沒有字首,因此顯示為根級別項。

example-company

OSS 的請求和響應邏輯

在授予許可權之前,我們需要清楚,當使用者單擊某個儲存空間的名字時控制檯向 OSS 傳送的是什麼請求、OSS 返回的是什麼響應,以及控制檯如何解析該響應。

當使用者單擊某個儲存空間名時,控制檯會將 GetBucket 請求傳送至 OSS。此請求包括以下引數:

  • prefix,其值為空字串。
  • delimiter,其值為/

請求示例如下所示:

GET /?prefix=&delimiter=/ HTTP/1.1
Host: example-company.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 24 Feb 2012 08:43:27 GMT
Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:DNrnx7xHk3sgysx7I8U9I9IY1vY=

OSS 返回的響應包括 ListBucketResult 元素:

HTTP/1.1 200 OK
x-oss-request-id: 534B371674E88A4D8906008B
Date: Fri, 24 Feb 2012 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>example-company</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>

由於 oss-dg.pdf 不包含 / 分隔符,因此 OSS 在 <Contents/> 元素中返回該key。儲存空間 example-company 中的所有其他key都包含 / 分隔符,因此 OSS 會將這些key分組,併為每個字首值 Development/、Marketing/ 和 Private/ 返回一個 <CommonPrefixes/> 元素。該元素是一個字串,包含從這些key的第一個字元開始到第一次出現指定的 / 分隔符之間的字元。

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

example-company

現在,如果使用者單擊 Development 資料夾,控制檯會將 GetBucket 請求傳送至 OSS。此請求包括以下引數:

  • prefix,其值為 Development/
  • delimiter,其值為 /

請求示例如下所示:

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

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

HTTP/1.1 200 OK
x-oss-request-id: 534B371674E88A4D8906008B
Date: Fri, 24 Feb 2012 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>example-company</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>
</ListBucketResult>

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

list-objects

教程示例

本教程示例如下所示:

  • 建立一個儲存空間 example-company,然後向其中新增三個資料夾(Development、Marketing 和 Private)。

  • 您有 Anne 和 Leo 兩個使用者。您希望 Anne 只能訪問 Development 資料夾而 Leo 則只能訪問 Marketing 資料夾,並且希望將 Private 資料夾保持私有。在教程示例中,通過建立訪問控制 (RAM) 使用者(Anne 和 Leo)來管理訪問許可權,並授予他們必要的許可權。

  • RAM 還支援建立使用者組並授予適用於組中所有使用者的組級別許可權。這有助於更好地管理許可權。在本示例中,Anne 和 Leo 都需要一些公共許可權。因此,您還要建立一個名為 Staff 的組,然後將 Anne 和 Leo 新增到該組中。首先,您需要給該組分配策略授予許可權。然後,將策略分配給特定使用者,新增特定使用者的許可權。

說明:本教程示例使用 example-company 作為儲存空間名、使用 Anne 和 Leo 作為 RAM 使用者名稱並使用 Staff 作為組名。由於阿里雲 OSS 要求儲存空間名全域性唯一,所以您需要用自己的儲存空間名稱替換本教程中的儲存空間名。

示例準備

本示例使用阿里雲主賬號建立 RAM 使用者。最初,這些使用者沒有任何許可權。您將逐步授予這些使用者執行特定 OSS 操作的許可權。為了測試這些許可權,您需要使用每個使用者的RAM賬號登入到控制檯。當您作為主賬號所有者逐步授予許可權並作為 RAM 使用者測試許可權時,您需要每次使用不同賬號進行登入和登出。您可以使用一個瀏覽器來執行此測試。如果您可以使用兩個不同的瀏覽器,則該測試過程用時將會縮短:一個瀏覽器用於使用主賬號連線到阿里雲控制檯,另一個瀏覽器用於使用 RAM 賬號進行連線。

要使用您的主賬號登入到阿里雲控制檯,請訪問 https://account.aliyun.com/login/login.htm。 RAM 使用者不能使用相同的連結登入。他們必須使用 RAM 使用者登入連結。作為主賬號所有者,您可以向RAM使用者提供此連結。

說明:有關 RAM 的詳細資訊,請參見 使用 RAM 使用者賬號登入

為 RAM 使用者提供登入連結

  1. 使用主賬號登入 RAM 控制檯

  2. 在左側導航欄中,單擊 概覽

  3. 在 RAM使用者登入連結 後找到 URL。您將向 RAM 使用者提供此 URL,以便其使用 RAM 使用者名稱和密碼登入控制檯。

步驟 1.建立儲存空間

在此步驟中,您可以使用主賬號登入到 OSS 控制檯、建立儲存空間、將資料夾(Development、Marketing、Private)新增到儲存空間中,並在每個資料夾中上傳一個或兩個示例文件。
1. 使用主賬號登入 OSS 控制檯

  1. 建立名為 example-company 的儲存空間。 
    有關詳細過程,請參見 OSS 控制檯使用者指南 中的 建立儲存空間
  2. 將一個檔案上傳到儲存空間中。

    本示例假設您將檔案 oss-dg.pdf 上傳到儲存空間的根級別。您可以用不同的檔名上傳自己的檔案。

    有關詳細過程,請參見 OSS 控制檯使用者指南 中的 上傳檔案

  3. 新增名為 Development、Marketing 和 Private 的三個資料夾。

    有關詳細過程,請參見 OSS 控制檯使用者指南 中的 建立資料夾

  4. 將一個或兩個檔案上傳到每個資料夾中。

    本例假設您將具有以下物件鍵的物件上傳到儲存空間中:

    • Development/Alibaba Cloud.pdf
    • Development/ProjectA.docx
    • Development/ProjectB.docx
    • Marketing/data2016.xlsx
    • Marketing/data2016.xlsx
    • Private/2017/images.zip
    • Private/2017/promote.pptx
    • oss-dg.pdf

步驟 2.建立 RAM 使用者和組

在此步驟中,您使用 RAM 控制檯將兩個 RAM 使用者 Anne 和 Leo 新增到主賬號中。您還將建立一個名為 Staff 的組,然後將這兩個使用者新增到該組中。

說明:在此步驟中,不要分配任何授予這些使用者許可權的策略。在以下步驟中,您將逐步為其授予許可權。

有關建立 RAM 使用者的詳細過程,請參見 RAM 快速入門 中的 建立 RAM 使用者。請為每個 RAM 使用者建立登入密碼。

有關建立組的詳細過程,請參見 RAM 使用者指南 中的 建立組

步驟 3.確認 RAM 使用者沒有任何許可權

如果您使用兩個瀏覽器,現在可以在另一個瀏覽器中使用其中一個 RAM 使用者賬號登入到控制檯。

  1. 開啟 RAM 使用者登入連結,並用 Anne 或 Leo 的賬號登入到 RAM 控制檯。
  2. 開啟 OSS 控制檯。 
    您發現控制檯中沒有任何儲存空間,這意味著 Anne 不具有對儲存空間 example-company 的任何許可權。 
    no-bucket

步驟 4.授予組級別許可權

我們希望 Anne 和 Leo 都能執行以下操作:

  • 列出主賬號所擁有的所有儲存空間。

    為此,Anne 和 Leo 必須具有執行 oss:ListBuckets 操作的許可權。

  • 列出 example-company 儲存空間中的根級別項、資料夾和物件。

    為此,Anne 和 Leo 必須具有對 example-company 儲存空間執行 oss:ListObjects 操作的許可權。

步驟 4.1.授予列出所有儲存空間的許可權

在此步驟中,建立一個授予使用者最低許可權的策略。憑藉最低許可權,使用者可列出主賬號所擁有的所有儲存空間。您還將此策略分配給 Staff 組,以便授予獲得主賬號擁有的儲存空間列表的組許可權。

  1. 使用主賬號登入RAM 控制檯

  2. 建立策略 AllowGroupToSeeBucketListInConsole

    1. 在左側導航窗格中,單擊 策略管理,然後單擊 新建授權策略
    2. 單擊 空白模板
    3. 在 授權策略名稱 欄位中,輸入 AllowGroupToSeeBucketListInConsole
    4. 在 策略內容 欄位中,複製並貼上以下策略。json { "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets" ], "Resource": [ "acs:oss:*:*:*" ] } ] } 說明:策略為 JSON 文件。在該策略中,Statement 是一個物件陣列,每個物件使用名/值對的集合來描述許可權。前面的策略描述了一個特定的許可權。Effect 元素值決定是允許還是拒絕特定的許可權。Action 指定訪問許可權的型別。在本策略中,oss:ListBuckets 是預定義的 OSS 操作,可返回經過身份驗證的傳送者所擁有的所有儲存空間的列表。
  3. 將 AllowGroupToSeeBucketListInConsole 策略分配給 Staff 組。

    有關分配策略的詳細過程,請參見 RAM 快速入門 中 將策略分配給 RAM 使用者 的 將策略分配給 RAM 組

    可以將策略分配給 RAM 控制檯中的 RAM 使用者和組。在本例中,我們將策略分配給組,因為我們希望 Anne 和 Leo 都能夠列出這些儲存空間。

  4. 測試許可權。

    1. 開啟 RAM 使用者登入連結,並用 Anne 或 Leo 的賬號登入到 RAM 控制檯。
    2. 開啟 OSS 控制檯。 
      控制檯列出所有儲存空間。
    3. 單擊 example-company 儲存空間,然後單擊檔案選項卡。 
      此時將顯示一個訊息框,表明您沒有相應的訪問許可權。

    no-access

步驟 4.2.授予列出儲存空間根級內容的許可權

在此步驟中,您授予許可權,允許所有使用者列出儲存空間 example-company 中的所有專案。當使用者在 OSS 控制檯中單擊 example-company 時,能夠看到儲存空間中的根級別項。

example-company

  1. 使用主賬號登入 RAM 控制檯

  2. 用以下策略取代分配給 Staff 組的現有策略 AllowGroupToSeeBucketListInConsole,該策略還允許 oss:ListObjects 操作。請用您的儲存空間名替換策略資源中的 example-company。

    有關詳細過程,請參見 RAM 使用者指南 中 授權策略 的 修改自定義授權策略 部分。注意,您最多可對 RAM 策略進行五次修改。如果超過了五次,則需要刪除該策略並建立一個新的策略,然後再次將新策略分配給 Staff 組。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListBuckets",
            "oss:GetBucketAcl"
          ],
          "Resource": [
            "acs:oss:*:*:*"
          ],
          "Condition": {}
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListObjects"
          ],
          "Resource": [
            "acs:oss:*:*:example-company"
          ],
          "Condition": {
            "StringLike": {
              "oss:Prefix": [
                ""
              ],
              "oss:Delimiter": [
                "/"
              ]
            }
          }
        }
      ]
    }
    
    

    說明:

    • 要列出儲存空間內容,使用者需要呼叫 oss:ListObjects 操作的許可權。為了確保使用者僅看到根級內容,我們新增了一個條件:使用者必須在請求中指定一個空字首,也就是說,他們不能單擊任何根級資料夾。我們還通過要求使用者請求包含分隔符引數和值 / 來新增需要資料夾樣式訪問的條件。
    • 當使用者登入到 OSS 控制檯時,控制檯檢查使用者的身份是否有訪問 OSS 服務的許可權。要在控制檯中支援儲存空間操作,我們還需要新增 oss:GetBucketAcl 操作。
  3. 測試更新的許可權。

    1. 開啟 RAM 使用者登入連結,並用 Anne 或 Leo 的賬號登入到 RAM 控制檯。
    2. 開啟 OSS 控制檯。 
      控制檯列出所有儲存空間。
    3. 單擊 example-company 儲存空間,然後單擊檔案選項卡。 
      控制檯列出所有根級別項。 
      example-company
    4. 單擊任何資料夾或物件 oss-dg.pdf。 
      此時將顯示一個訊息框,表明您沒有相應的訪問許可權。

組策略摘要

新增組策略的最終結果是授予 RAM 使用者 Anne 和 Leo 以下最低許可權:

  • 列出主賬號所擁有的所有儲存空間。
  • 檢視 example-company 儲存空間中的根級別項。

然而,他們可以進行的操作仍然有限。在以下部分中,我們將授予使用者以下特定許可權:

  • 允許 Anne 在 Development 資料夾中獲取和放入物件。
  • 允許 Bob 在 Finance 資料夾中獲取和放入物件。

對於使用者特定的許可權,您需要將策略分配給特定使用者,而非分配給組。以下部分授予 Anne 在 Development 資料夾中操作的許可權。您可以重複這些步驟,授予 Leo 在 Finance 資料夾中進行類似操作的許可權。

步驟 5.授予 RAM 使用者 Anne 特定許可權

在此步驟中,我們向 Anne 授予額外的許可權,使她可以看到 Development 資料夾的內容,並將物件放入資料夾中。

步驟 5.1.授予 RAM 使用者 Anne 許可權以列出 Development 資料夾內容

若要 Anne 能夠列出 Development 資料夾內容,您必須為其分配策略。該策略必須能夠授予其對 example-company 儲存空間執行 oss:ListObjects 操作的許可權,還必須包括要求使用者在請求中指定字首 Development/ 的條件。
1. 使用主賬號登入 RAM 控制檯
1. 建立策略 AllowListBucketsIfSpecificPrefixIsIncluded,授予 RAM 使用者 Anne 許可權以列出 Development 資料夾內容。
1. 在左側導航窗格中,單擊 策略管理,然後單擊 新建授權策略

2. 單擊 <strong>空白模板</strong>。

3. 在 <strong>授權策略名稱</strong> 欄位中,輸入 <strong>AllowListBucketsIfSpecificPrefixIsIncluded</strong>。

4. 在 <strong>策略內容</strong> 欄位中,複製並貼上以下策略。

```json
{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "oss:ListObjects"
      ],
      "Resource": [
        "acs:oss:*:*:example-company"
      ],
      "Condition": {
        "StringLike": {
          "oss:Prefix": [
            "Development/*"
          ]
        }
      }
    }
  ]
}
```
  1. 將策略分配給 RAM 使用者 Anne。

    有關分配策略的詳細過程,請參見 RAM 快速入門 中的 將策略分配給 RAM 使用者

  2. 測試 Anne 的許可權。

    1. 開啟 RAM 使用者登入連結,並用 Anne 的賬號登入到 RAM 控制檯。
    2. 開啟 OSS 控制檯。 
      控制檯列出所有儲存空間。
    3. 單擊 example-company 儲存空間,然後單擊檔案選項卡。 
      控制檯列出所有根級別項。 
      example-company
    4. 單擊 Development/ 資料夾。 
      控制檯列出資料夾中的物件。 
      list-objects

步驟 5.2 授予 RAM 使用者 Anne 在 Development 資料夾中獲取和放入物件的許可權。

若要 Anne 能夠在 Development 資料夾中獲取和放入物件,您必須授予她呼叫 oss:GetObject 和 oss:PutObject 操作的許可權,包括使用者必須在請求中指定字首 Development/ 的條件。
1. 使用主賬號登入 RAM 控制檯

  1. 用以下策略取代您在之前步驟中建立的策略 AllowListBucketsIfSpecificPrefixIsIncluded

    有關詳細過程,請參見 RAM 使用者指南 中 授權策略 的 修改自定義授權策略 部分。注意,您最多可對 RAM 策略進行五次修改。如果超過五次,您需要刪除該策略並建立一個新的策略,然後再次將新策略分配給使用者。

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

    說明:當使用者登入到 OSS 控制檯時,控制檯檢查使用者的身份是否有訪問 OSS 服務的許可權。要在控制檯中支援儲存空間操作,我們還需要新增 oss:GetObjectAcl 操作。

  2. 測試更新的策略。

    1. 開啟 RAM 使用者登入連結,並用 Anne 的賬號登入到 RAM 控制檯。
    2. 開啟 OSS 控制檯。 
      控制檯列出所有儲存空間。
    3. 在 OSS 控制檯中,確認 Anne 現在可以在 Development 資料夾中新增物件並下載物件。

步驟 5.3 顯式拒絕 RAM 使用者 Anne 訪問儲存空間中任何其他資料夾的許可權

RAM 使用者 Anne 現在可以在 example-company 儲存空間中列出根級內容,並將物件放入 Development 資料夾中。如果要嚴格限制訪問許可權,您可以顯式拒絕 Anne 對儲存空間中任何其他資料夾的訪問。如果有授予 Anne 訪問儲存空間中任何其他資料夾的其他策略,則此顯式策略將替代這些許可權。

您可以將以下語句新增到 RAM 使用者 Anne 的策略 AllowListBucketsIfSpecificPrefixIsIncluded,以要求 Anne 傳送到 OSS 的所有請求包含字首引數,該引數的值可以是 Development/* 或空字串。

    {
      "Effect": "Deny",
      "Action": [
        "oss:ListObjects"
      ],
      "Resource": [
        "acs:oss:*:*:example-company"
      ],
      "Condition": {
        "StringNotLike": {
          "oss:Prefix": [
            "Development/*",
            ""
          ]
        }
      }
    }

按照之前的步驟更新您為 RAM 使用者 Anne 建立的策略 AllowListBucketsIfSpecificPrefixIsIncluded。複製並貼上以下策略以替換現有策略。

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

步驟 6.授予 RAM 使用者 Leo 特定許可權

現在,您希望授予 Leo 訪問 Marketing 資料夾的許可權。請遵循之前用於向 Anne 授予許可權的步驟,但應將 Development 資料夾替換為 Marketing 資料夾。有關詳細過程,請參見步驟 5:授予 RAM 使用者 Anne 特定許可權。

步驟 7.確保 Private 資料夾安全

在本例中,您僅擁有兩個使用者。您在組級別授予兩個使用者所有所需的最小許可權,只有當您真正需要單個使用者級別上的許可權時,才授予使用者級別許可權。此方法有助於最大限度地減少管理許可權的工作量。隨著使用者數量的增加,我們希望確保不意外地授予使用者對 Private 資料夾的許可權。因此,我們需要新增一個顯式拒絕訪問 Private 資料夾的策略。顯式拒絕策略會取代任何其他許可權。若要確保 Private 資料夾保持私有,可以向組策略新增以下兩個拒絕語句:

  • 新增以下語句以顯式拒絕對 Private 資料夾 (example-company/Private/*) 中的資源執行任何操作。json { "Effect": "Deny", "Action": [ "oss:*" ], "Resource": [ "acs:oss:*:*:example-company/Private/*" ], "Condition": {} } 
  • 您還要在請求指定了 Private/ prefix 時拒絕執行 ListObjects 操作的許可權。在控制檯中,如果 Anne 或 Leo 單擊 Private 資料夾,則此策略將導致 OSS 返回錯誤響應。json { "Effect": "Deny", "Action": [ "oss:ListObjects" ], "Resource": [ "acs:oss:*:*:*" ], "Condition": { "StringLike": { "oss:Prefix": [ "Private/" ] } } } 

用包含前述拒絕語句的更新策略取代 Staff 組策略 AllowGroupToSeeBucketListInConsole。在應用更新策略後,組中的任何使用者都不能訪問您的儲存空間中的 Private 資料夾。

  1. 使用主賬號登入 RAM 控制檯

  2. 用以下策略取代分配給 Staff 組的現有策略 AllowGroupToSeeBucketListInConsole。請用您的儲存空間名替換策略資源中的 example-company。

    有關詳細過程,請參見 RAM 使用者指南 中 授權策略 的 修改自定義授權策略 部分。注意,您最多可對 RAM 策略進行五次修改。如果超過五次,您需要刪除該策略並建立一個新的策略,然後再次將新策略分配給 Staff 組。

    {
    "Version": "1",
    "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "oss:ListBuckets",
        "oss:GetBucketAcl"
      ],
      "Resource": [
        "acs:oss:*:*:*"
      ],
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "oss:ListObjects"
      ],
      "Resource": [
        "acs:oss:*:*:example-company"
      ],
      "Condition": {
        "StringLike": {
          "oss:Prefix": [
             ""
           ],
          "oss:Delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": [
        "oss:*"
      ],
      "Resource": [
        "acs:oss:*:*:example-company/Private/*"
      ],
      "Condition": {}
    },
    {
      "Effect": "Deny",
      "Action": [
        "oss:ListObjects"
      ],
      "Resource": [
        "acs:oss:*:*:*"
      ],
      "Condition": {
        "StringLike": {
          "oss:Prefix": [
            "Private/"
          ]
        }
      }
    }
    ]
    }
    

清理

要進行清理,您需要在 RAM 控制檯中刪除使用者 Anne 和 Leo。有關詳細過程,請參見 RAM 使用者指南使用者刪除 RAM 使用者部分。

為了確保您不再因儲存而繼續被收取費用,您還需要刪除為本示例建立的物件和儲存空間。


相關文章