全部產品
Search
文件中心

Object Storage Service:通過RAM Policy設定授權策略

更新時間:Jan 15, 2026

RAM Policy是基於身份的授權策略,專門用於集中系統管理使用者身份對OSS資源的存取權限。通過RAM Policy可精確定義“哪個身份”、“在什麼條件下”、“可以對哪些OSS資源”、“執行何種操作”,實現許可權精細化管控,保障企業資料安全。

工作原理

RAM Policy採用基於身份的授權模式,授權主體為RAM中的身份實體(RAM使用者、使用者組、RAM角色)。許可權評估嚴格遵循“顯式拒絕優先”原則,OSS收到訪問請求後,系統綜合評估所有相關策略(包括RAM Policy和Bucket Policy),按以下順序進行許可權判定:

  1. 顯式拒絕(Deny)優先:任何策略中存在一條明確的"Effect": "Deny"規則匹配該請求,請求立即被拒絕

  2. 尋找顯式允許(Allow):不存在匹配的Deny規則時,系統尋找是否存在一條明確的"Effect": "Allow"規則匹配該請求。匹配成功時,請求被允許

  3. 預設拒絕:既無匹配的Deny規則,也無匹配的Allow規則時,請求預設被拒絕

OSS支援兩種權限原則類型:系統策略和自訂策略。系統策略由阿里雲建立和維護,使用者只能使用不能修改。自訂策略由使用者建立和維護,可自主進行建立、更新和刪除操作。

授權系統權限原則

系統權限原則由阿里雲建立,可在RAM控制台直接為使用者身份授權。以下以RAM使用者為例示範授權步驟。

  1. 前往RAM使用者列表,單擊目標使用者操作列的添加权限

  2. 在搜尋方塊中輸入系統策略名稱稱,勾選目標系統策略。OSS支援以下兩種系統策略:

  3. 單擊確認新增授權,完成使用權限設定。

授權自訂權限原則

自訂策略由使用者自主建立和維護,授權自訂權限原則時,需先建立自訂權限原則,再為對應的使用者身份進行授權。

步驟一:建立自訂權限原則

  1. 前往權限原則列表,單擊创建权限策略

  2. 選擇指令碼編輯,在編輯框內輸入JSON格式的授權策略。可使用RAM Policy Editor快速產生授權策略。

    樣本授權策略:允許對example-bucket及該Bucket內所有資源的全部操作。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:*",
          "Resource": [
            "acs:oss:*:*:example-bucket",
            "acs:oss:*:*:example-bucket/*"
          ]
        }
      ]
    }

    完整的授權策略包含Version(版本號碼)和Statement(授權語句)。

    • Version:權限原則版本,固定為1,不允許修改。

    • Statement:策略語句的主體,包含一條或多條具體的授權/拒絕規則。每條授權語句包含Effect(授權效力)、Action(授權操作)、Resource(授權資源)和Condition(授權條件)。

      策略元素

      說明

      Effect

      策略的效力,可選值為Allow(允許)或Deny(拒絕)。

      Action

      對資源執行的具體操作,支援使用萬用字元*

      Resource

      策略作用的資源範圍。

      Condition

      策略生效的條件。

      當配置多個條件時,所有條件必須同時滿足(AND關係),策略才會生效。

      完整的授權元素列表請參見OSS授權文法與元素

  3. 單擊确定,輸入策略名称,然後單擊确定,完成自訂策略建立。

步驟二:為使用者身份進行授權

建立自訂權限原則後,需要將自訂策略授權給目標使用者身份。以下以RAM使用者為例示範授權步驟。

  1. 前往RAM使用者列表,單擊目標使用者操作列的添加权限

  2. 在搜尋方塊中輸入自訂策略名稱稱,勾選目標策略。

  3. 單擊確認新增授權,完成使用權限設定。

常見授權情境

以下情境展示了RAM Policy在實際業務中的典型應用,涵蓋許可權授予、訪問限制和安全控制等多種需求。每個情境提供完整的策略配置樣本,可根據實際需求修改其中的Bucket名稱、目錄路徑等參數後直接使用。

情境1:授予RAM使用者對某個Bucket的完全控制許可權

以下樣本為授予RAM使用者對名為mybucket的Bucket擁有完全控制的許可權。

重要

對於行動裝置 App來說,授予使用者對Bucket的完全控制許可權存在極高風險,應盡量避免。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:*",
      "Resource": [
        "acs:oss:*:*:mybucket",
        "acs:oss:*:*:mybucket/*"
      ]
    }
  ]
}

情境2:禁止RAM使用者刪除某個Bucket下匹配特定模式檔案的許可權

以下樣本為禁止RAM使用者刪除名為mybucket的Bucket下首碼為abc且格式為.txt的所有檔案。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "oss:DeleteObject"
      ],
      "Resource": [
        "acs:oss:*:*:mybucket/abc*.txt"
      ]
    }
  ]
}

情境3:授予RAM使用者列舉並讀取某個Bucket下所有資源的許可權

  • 以下樣本為授予RAM使用者通過OSS SDK或OSS命令列工具列舉並讀取名為mybucket的Bucket下所有資源的許可權。

    說明

    ListObjects操作(Action)必須以整個Bucket作為Resource。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:ListObjects",
          "Resource": "acs:oss:*:*:mybucket"
        },
        {
          "Effect": "Allow",
          "Action": "oss:GetObject",
          "Resource": "acs:oss:*:*:mybucket/*"
        }
      ]
    }
  • 以下樣本為授予RAM使用者通過OSS控制台列舉並讀取名為mybucket的Bucket下所有資源的許可權。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListBuckets",
            "oss:GetBucketStat",
            "oss:GetBucketInfo",
            "oss:GetBucketTagging",
            "oss:GetBucketLifecycle",
            "oss:GetBucketWorm",                      
            "oss:GetBucketVersioning", 
            "oss:GetBucketAcl" 
          ],    
          "Resource": "acs:oss:*:*:*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListObjects",
            "oss:GetBucketAcl"
          ],
          "Resource": "acs:oss:*:*:mybucket"
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetObject",
            "oss:GetObjectAcl"
          ],
          "Resource": "acs:oss:*:*:mybucket/*"
        }
      ]
    }

情境4:禁止RAM使用者刪除某個Bucket的許可權

以下樣本用于禁止RAM使用者刪除名為mybucket的Bucket的許可權。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:*",
      "Resource": [
        "acs:oss:*:*:mybucket",
        "acs:oss:*:*:mybucket/*"
      ]
    },
    {
      "Effect": "Deny",
      "Action": [
        "oss:DeleteBucket"
      ],
      "Resource": [
        "acs:oss:*:*:mybucket"
      ]
    }
  ]
}

情境5:授予RAM使用者訪問某個Bucket下多個目錄的許可權

假設用於存放照片的Bucket為mybucket,該Bucket下有一些目錄,代表照片的拍攝地,每個拍攝地目錄下還包含年份子目錄。

mybucket[Bucket]
  ├── beijing
  │   ├── 2014
  │   └── 2015
  └── hangzhou
      ├── 2014
      └── 2015 

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

  • 授予RAM使用者僅擁有讀取目錄mybucket/hangzhou/2014/mybucket/hangzhou/2015/中檔案內容的許可權。

    由於RAM使用者知道檔案的完整路徑,建議直接使用完整的檔案路徑來讀取目錄下的檔案內容。

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

    RAM使用者不清楚目錄中有哪些檔案,可使用OSS命令列工具或API直接擷取目錄資訊,此情境下需要添加ListObjects許可權。

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

    使用OSS控制台訪問目錄mybucket/hangzhou/2014/mybucket/hangzhou/2015/時,RAM使用者可從根目錄開始,逐層進入要訪問的目錄。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListBuckets",
            "oss:GetBucketStat",
            "oss:GetBucketInfo",
            "oss:GetBucketTagging",
            "oss:GetBucketLifecycle",
            "oss:GetBucketWorm",                      
            "oss:GetBucketVersioning", 
            "oss:GetBucketAcl" 
          ], 
          "Resource": [
            "acs:oss:*:*:*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetObject",
            "oss:GetObjectAcl"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket/hangzhou/2014/*",
            "acs:oss:*:*:mybucket/hangzhou/2015/*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListObjects"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket"
          ],
          "Condition": {
            "StringLike": {
              "oss:Delimiter": "/",
              "oss:Prefix": [
                "",
                "hangzhou/",
                "hangzhou/2014/*",
                "hangzhou/2015/*"
              ]
            }
          }
        }
      ]
    }

情境6:禁止RAM使用者刪除某個Bucket下任意檔案的許可權

以下樣本用于禁止RAM使用者刪除名為mybucket的儲存空間下任意檔案的許可權。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "oss:DeleteObject"
      ],
      "Resource": [
        "acs:oss:*:*:mybucket/*"
      ]
    }
  ]
}

情境7:禁止RAM使用者訪問指定標籤Object的許可權

以下為添加Deny策略,用于禁止RAM使用者訪問儲存空間examplebucket下對象標籤為status:ok以及key1:value1的Object的許可權。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "oss:GetObject"
      ],
      "Resource": [
        "acs:oss:*:174649585760xxxx:examplebucket/*"
      ],
      "Condition": {
        "StringEquals": {
          "oss:ExistingObjectTag/status":"ok",
          "oss:ExistingObjectTag/key1":"value1"
        }
      }
    }
  ]
}

情境8:授予RAM使用者通過特定的IP地址訪問OSS的許可權

  • Allow授權中增加IP地址限制。

    以下樣本為在Allow授權中增加IP地址限制,授予RAM使用者僅允許通過192.168.0.0/16198.51.100.0/24兩個IP位址區段讀取名為mybucket的Bucket下所有資源的許可權。

    {
      "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:*:*:mybucket",
            "acs:oss:*:*:mybucket/*"
          ],
          "Condition":{
            "IpAddress": {
              "acs:SourceIp": ["192.168.0.0/16", "198.51.100.0/24"]
            }
          }
        }
      ]
    }
  • Deny授權中增加IP地址限制。

    以下樣本為在Deny授權中增加IP地址限制,禁止源IP地址不在192.168.0.0/16範圍內的RAM使用者對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:*:*:mybucket",
            "acs:oss:*:*:mybucket/*"
          ]
        },
        {
          "Effect": "Deny",
          "Action": "oss:*",
          "Resource": [
            "acs:oss:*:*:*"
          ],
          "Condition":{
            "NotIpAddress": {
              "acs:SourceIp": ["192.168.0.0/16"]
            }
          }
        }
      ]
    }
    說明

    由於權限原則的鑒權規則是Deny優先,所以訪問者從192.168.0.0/16以外的IP地址訪問mybucket中的內容時,OSS會提示沒有許可權。

情境9:通過RAM或STS服務向其他使用者授權

通過RAM或STS服務授予IP地址為192.168.0.1的使用者使用Java SDK用戶端執行以下操作。

  • 列舉mybucket中以foo為首碼的對象。

  • 允許向mybucket中上傳、下載和刪除以file開頭的對象。

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "oss:GetBucketAcl",
        "oss:ListObjects"
      ],
      "Resource": [
        "acs:oss:*:177530505652xxxx:mybucket"
      ],
      "Effect": "Allow",
      "Condition": {
        "StringEquals": {
          "acs:UserAgent": "java-sdk",
          "oss:Prefix": "foo"
        },
        "IpAddress": {
          "acs:SourceIp": "192.168.0.1"
        }
      }
    },
    {
      "Action": [
        "oss:PutObject",
        "oss:GetObject",
        "oss:DeleteObject"
      ],
      "Resource": [
        "acs:oss:*:177530505652xxxx:mybucket/file*"
      ],
      "Effect": "Allow",
      "Condition": {
        "StringEquals": {
          "acs:UserAgent": "java-sdk"
        },
        "IpAddress": {
          "acs:SourceIp": "192.168.0.1"
        }
      }
    }
  ]
}

情境10:禁止將 Bucket 和 Object 的 ACL 設定為公用訪問

以下樣本用于禁止將Bucket和Object的ACL設定為公用訪問,保障OSS資料安全。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "oss:PutBucket",
        "oss:PutBucketAcl"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "oss:x-oss-acl": "private"
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": [
        "oss:PutObject",
        "oss:PutObjectAcl"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "oss:x-oss-object-acl": [
            "private",
            "default"
          ]
        }
      }
    }
  ]
}

情境11:授予RAM使用者使用IMM相關功能的許可權

以下RAM Policy用於授予RAM使用者使用IMM文檔處理的許可權。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "oss:GetObject",
        "oss:PutObject",
        "oss:PostProcessTask",
        "oss:ProcessImm"
      ],
      "Resource": "*"
    },
    {
      "Action": [
        "imm:CreateOfficeConversionTask",
        "imm:GetWebofficeURL"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Effect": "Allow",
      "Action": "ram:PassRole",
      "Resource": "acs:ram:*:*:role/aliyunimmdefaultrole"
    }
  ]
}

情境12:授予RAM使用者轉換儲存冗餘類型的許可權

  • 授予RAM使用者轉換某個Bucket儲存冗餘類型的許可權。

    以下樣本為RAM使用者授予轉換mybucket的儲存冗餘類型的許可權。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:CreateBucketDataRedundancyTransition",
            "oss:GetBucketDataRedundancyTransition",
            "oss:ListBucketDataRedundancyTransition",
            "oss:DeleteBucketDataRedundancyTransition"
          ],
          "Resource": "acs:oss:*:*:mybucket"
        }
      ]
    }
  • 授予RAM使用者轉換所有Bucket儲存冗餘類型的許可權。

    重要

    以下樣本會授予RAM使用者轉換阿里雲帳號下所有Bucket的儲存冗餘類型的許可權,請謹慎操作。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:CreateBucketDataRedundancyTransition",
            "oss:GetBucketDataRedundancyTransition",
            "oss:ListBucketDataRedundancyTransition",
            "oss:DeleteBucketDataRedundancyTransition"
          ],
          "Resource": "acs:oss:*:*:*"
        }
      ]
    }

情境13:授予RAM使用者建立OSS資源套件訂單的許可權

以下RAM Policy用於授予RAM使用者建立OSS資源套件訂單的許可權。

重要

RAM使用者建立OSS資源套件訂單後,可聯絡雲帳號擁有者完成訂單支付。如果要使RAM使用者能夠完成OSS資源套件訂單支付,雲帳號擁有者需要授予RAM使用者支付訂單的許可權bss:PayOrderbss:PayOrder屬於高危許可權,涉及資金操作,非必要請勿授予。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:CreateOrder",
      "Resource": "acs:oss:*:*:*"
    }
  ]
}

情境14:授予RAM使用者開通OSS的許可權

以下RAM Policy用於授予RAM使用者開通OSS的許可權。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:ActivateProduct",
      "Resource": "acs:oss:*:*:*"
    }
  ]
}

情境15:授予RAM使用者讀寫指定標籤Bucket資料的許可權

以下RAM Policy用於授予RAM使用者讀寫指定標籤Bucket資料的許可權,標籤鍵為key1,標籤值為value1。

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "oss:ListBuckets",
        "oss:GetBucketStat",
        "oss:GetBucketInfo",
        "oss:GetBucketAcl",
        "oss:ListObjects",
        "oss:PutObject",
        "oss:GetObject"
      ],
      "Resource": [
        "acs:oss:*:*:*"
      ],
      "Effect": "Allow",
      "Condition": {
        "StringEquals": {
          "oss:BucketTag/key1": "value1"
        }
      }
    }
  ]
}
說明

策略生效後,RAM使用者僅能對帶有標籤key1=value1的OSS Bucket執行指定操作。不同訪問方式的行為特性如下:

  • 通過OSS SDK或ossutil發起ListBuckets請求時,需添加標籤過濾參數(如tag-key=key1,tag-value=value1)。策略配置正確時,返回結果僅包含符合指定標籤條件的Bucket。

  • 通過OSS控制台發起ListBuckets請求時,由於控制台無法附加標籤參數,請求將因不滿足策略條件限制(oss:BucketTag/key1=value1)而被拒絕,系統提示許可權不足。

  • 其他動作(如PutObjectGetObject等)同樣受標籤條件限制,操作的目標Bucket必須滿足key1=value1的標籤要求。

應用於生產環境

在配置RAM Policy和管理RAM身份時,遵循以下安全最佳實務,可有效降低資料泄露風險並確保許可權管控的精確性:

  • 遵循最小許可權原則:始終只授予執行任務所必需的最小許可權集。避免使用oss:*這樣寬泛的授權,除非絕對必要。通過最小許可權原則可減少潛在的攻擊面,降低許可權濫用和誤操作風險。

  • 使用RAM角色和STS臨時憑證:對於應用程式,尤其是部署在ECS或容器中的應用,建議使用RAM角色並擷取STS臨時憑證來訪問OSS。相比長期AccessKey,臨時憑證具備自動到期機制,避免將長期AccessKey寫入程式碼在代碼或設定檔中,顯著降低了AK泄露的風險。

  • 人員使用者與程式使用者分離:為不同的人員和應用程式建立獨立的RAM使用者,實現身份管理的專業化和許可權的精細控制。

    • 人員使用者:設定控制台訪問,使用帳號和密碼訪問雲產品控制台,推薦開啟MFA多因素認證。

    • 程式使用者:設定使用永久AccessKey訪問,通過存取金鑰調用API訪問雲資源。

  • AccessKey安全管理

    • 不要把RAM使用者的AccessKey ID和AccessKey Secret儲存在工程代碼中,否則可能導致AK泄露。

    • 建議使用STS或環境變數等方式擷取訪問授權。

    • 定期輪換AccessKey。

  • RAM角色安全建議

    • 建立RAM角色後,請勿隨意變更RAM角色的可信實體,避免影響業務或帶來過度授權風險。

    • 設定合理的STS Token有效期間,避免有效期間過長帶來安全風險。

  • 定期審計許可權:定期檢查並清理不再需要的RAM使用者和權限原則,確保許可權與當前業務需求保持一致。

  • 利用Condition加強安全:在策略中添加Condition,例如限制源IP或VPC,通過多維度條件約束為資料訪問增加額外的安全防線。

相關文檔