全部產品
Search
文件中心

Resource Access Management:通過RAM對OSS進行許可權管理

更新時間:Feb 05, 2024

本文介紹了通過RAM的許可權管理功能,建立相應的權限原則,從而對Object Storage Service進行許可權管理,以滿足RAM使用者操作OSS的多種需求。

背景資訊

  • 使用RAM對OSS進行許可權管理前,請先瞭解以下系統策略:
    • AliyunOSSFullAccess:管理OSS的許可權。
    • AliyunOSSReadOnlyAccess:唯讀訪問OSS的許可權。

    當系統策略不能滿足您的需要時,您可以建立自訂策略。

  • 使用RAM對OSS進行許可權管理前,請先瞭解OSS的許可權定義。更多資訊,請參見RAM Policy概述

操作步驟

  1. 建立RAM使用者。
    具體操作,請參見建立RAM使用者
  2. 建立自訂策略。
    更多資訊,請參見建立自訂權限原則權限原則樣本
  3. 為RAM使用者授權。
    具體操作,請參見為RAM使用者授權

權限原則樣本

  • 樣本1:授權RAM使用者管理一個名為myphotos的儲存空間。
    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "oss:*",
                "Resource": [
                    "acs:oss:*:*:myphotos",
                    "acs:oss:*:*:myphotos/*"
                ]
            }
        ]
    }
  • 樣本2:授權RAM使用者列出並讀取一個儲存空間中的資源。
    • 授權RAM使用者通過OSS SDK或OSS命令列工具列出並讀取一個儲存空間中的資源。儲存空間名稱為myphotos
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": "oss:ListObjects",
                  "Resource": "acs:oss:*:*:myphotos"
              },
              {
                  "Effect": "Allow",
                  "Action": "oss:GetObject",
                  "Resource": "acs:oss:*:*:myphotos/*"
              }
          ]
      }
    • 授權RAM使用者能夠通過OSS控制台進行操作。
      說明 為了操作體驗的最佳化,使用者登入OSS控制台時,OSS控制台會額外調用ListBucketsGetBucketAclGetObjectAcl,以確定儲存空間屬性是公開還是私人。
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                            "oss:ListBuckets",
                            "oss:GetBucketStat",
                            "oss:GetBucketInfo",
                            "oss:GetBucketTagging",
                            "oss:GetBucketAcl" 
                            ],    
                  "Resource": "acs:oss:*:*:*"
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:ListObjects",
                      "oss:GetBucketAcl"
                  ],
                  "Resource": "acs:oss:*:*:myphotos"
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:GetObject",
                      "oss:GetObjectAcl"
                  ],
                  "Resource": "acs:oss:*:*:myphotos/*"
              }
          ]
      }
  • 樣本3:授權RAM使用者通過特定的IP地址訪問OSS。
    • Allow授權中增加IP限制:允許通過192.168.0.0/16, 172.16.0.1/16兩個IP位址區段讀取myphotos中的資訊。
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                            "oss:ListBuckets",
                            "oss:GetBucketStat",
                            "oss:GetBucketInfo",
                            "oss:GetBucketTagging",
                            "oss:GetBucketAcl" 
                            ], 
                  "Resource": [
                      "acs:oss:*:*:*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:ListObjects",
                      "oss:GetObject"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos",
                      "acs:oss:*:*:myphotos/*"
                  ],
                  "Condition":{
                      "IpAddress": {
                          "acs:SourceIp": ["192.168.0.0/16", "172.16.1.0/16"]
                      }
                  }
              }
          ]
      }
    • Deny授權中增加IP限制:如果源IP不在192.168.0.0/16中,則禁止對OSS執行任何操作。
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                            "oss:ListBuckets",
                            "oss:GetBucketStat",
                            "oss:GetBucketInfo",
                            "oss:GetBucketTagging",
                            "oss:GetBucketAcl" 
                            ], 
                  "Resource": [
                      "acs:oss:*:*:*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:ListObjects",
                      "oss:GetObject"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos",
                      "acs:oss:*:*:myphotos/*"
                  ]
              },
              {
                  "Effect": "Deny",
                  "Action": "oss:*",
                  "Resource": [
                      "acs:oss:*:*:*"
                  ],
                  "Condition":{
                      "NotIpAddress": {
                          "acs:SourceIp": ["192.168.0.0/16"]
                      }
                  }
              }
          ]
      }
      說明 因為權限原則的鑒權規則是Deny優先,所以訪問者從192.168.0.0/16以外的IP地址訪問myphotos中的內容時,OSS會提示沒有許可權。
  • 樣本4:OSS目錄層級的授權。

    假設用於存放照片的儲存空間名為myphotos,該儲存空間下有一些目錄,代表照片的拍攝地,每個拍攝地目錄下又有年份子目錄。

    myphotos[Bucket]
      ├── beijing
      │   ├── 2014
      │   └── 2015
      ├── hangzhou
      │   ├── 2013
      │   ├── 2014
      │   └── 2015 //授予該目錄唯讀許可權
      └── qingdao
          ├── 2014
          └── 2015

    若要授權RAM使用者訪問myphotos/hangzhou/2015/目錄的唯讀許可權。目錄層級的授權屬於授權的進階功能,根據使用情境不同,授權策略的複雜程度也不同,以下幾種情境可供參考。

    • 情境1:授予RAM使用者讀取檔案內容的許可權,不需要列出檔案的許可權。

      RAM使用者知道檔案的完整路徑,可以使用完整的檔案路徑直接去讀取檔案內容,通常會將這樣的許可權授予應用程式。

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:GetObject"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos/hangzhou/2015/*"
                  ]
              }
          ]
      }
    • 情境2:授權RAM使用者使用OSS命令列工具訪問目錄myphotos/hangzhou/2015/並列出目錄中檔案的許可權。

      RAM使用者不清楚目錄中有哪些檔案,可以使用OSS命令列工具或API直接擷取目錄資訊,通常會將這樣的許可權授予軟體開發人員。

      此情境需要新增ListObjects的許可權。

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:GetObject"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos/hangzhou/2015/*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:ListObjects"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos"
                  ],
                  "Condition":{
                      "StringLike":{
                          "oss:Prefix":"hangzhou/2015/*"
                      }
                  }
              }
          ]
      }
    • 情境3: 授予RAM使用者使用OSS控制台訪問目錄。

      RAM使用者使用可視化的OSS用戶端訪問目錄myphotos/hangzhou/2015/,可視化的用戶端類似Windows檔案管理工具,RAM使用者可以從根目錄開始,一層一層地進入要訪問的目錄,此情境是最易用的情境。

      此情境需要新增以下許可權:

      • 列出所有Bucket的許可權。
      • 列出myphotos下目錄的許可權。
      • 列出myphotos/hangzhou下的目錄的許可權。
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                            "oss:ListBuckets",
                            "oss:GetBucketStat",
                            "oss:GetBucketInfo",
                            "oss:GetBucketTagging",
                            "oss:GetBucketAcl" 
                            ], 
                  "Resource": [
                      "acs:oss:*:*:*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:GetObject",
                      "oss:GetObjectAcl"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos/hangzhou/2015/*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:ListObjects"
                  ],
                  "Resource": [
                      "acs:oss:*:*:myphotos"
                  ],
                  "Condition": {
                      "StringLike": {
                          "oss:Delimiter": "/",
                          "oss:Prefix": [
                              "",
                              "hangzhou/",
                              "hangzhou/2015/*"
                          ]
                      }
                  }
              }
          ]
      }