本文介紹了通過RAM的許可權管理功能,建立相應的權限原則,從而對Object Storage Service進行許可權管理,以滿足RAM使用者操作OSS的多種需求。
背景資訊
- 使用RAM對OSS進行許可權管理前,請先瞭解以下系統策略:
- AliyunOSSFullAccess:管理OSS的許可權。
- AliyunOSSReadOnlyAccess:唯讀訪問OSS的許可權。
當系統策略不能滿足您的需要時,您可以建立自訂策略。
- 使用RAM對OSS進行許可權管理前,請先瞭解OSS的許可權定義。更多資訊,請參見RAM Policy概述。
操作步驟
權限原則樣本
- 樣本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控制台會額外調用
ListBuckets
、GetBucketAcl
和GetObjectAcl
,以確定儲存空間屬性是公開還是私人。{ "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/*" } ] }
- 授權RAM使用者通過OSS SDK或OSS命令列工具列出並讀取一個儲存空間中的資源。儲存空間名稱為
- 樣本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/*" ] } } } ] }
- 列出所有
- 情境1:授予RAM使用者讀取檔案內容的許可權,不需要列出檔案的許可權。