通過RAM Policy,您可以集中管理您的使用者(例如員工、系統或應用程式)以及控制使用者可以訪問您名下哪些資源的許可權,例如授權RAM使用者列舉並讀取某個儲存空間(Bucket)的資源。
為RAM使用者授權自訂的權限原則
建立自訂權限原則。
您可以結合實際使用情境,選用下文列舉的常見授權樣本,然後通過指令碼配置方式建立自訂權限原則。具體操作,請參見建立自訂權限原則。
關於權限原則中包含版本號碼(Version)和授權語句(Statement),以及授權語句中包含的授權效力(Effect)、操作(Action)、資源(Resource)以及限制條件(Condition,可選項)等更多資訊,請參見RAM Policy。
重要在OSS中,Resource支援使用萬用字元星號(*)來表示某類具體的資源。Resource的格式為
acs:oss:{region}:{bucket_owner}:{bucket_name}/{object_name}
。例如當Resource為acs:oss:*:*:mybucket/*
,表示mybucket下的所有資源。當Resource為acs:oss:*:*:mybucket/abc*.txt
,表示mybucket下首碼為abc且格式為.txt的所有檔案。為RAM使用者授權自訂權限原則。
樣本一:授予RAM使用者對某個Bucket的完全控制許可權
以下樣本為授權RAM使用者對名為mybucket
的Bucket擁有完全控制的許可權。
對於行動裝置 App來說,授予使用者對Bucket的完全控制許可權有極高風險,應盡量避免。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:*",
"Resource": [
"acs:oss:*:*:mybucket",
"acs:oss:*:*:mybucket/*"
]
}
]
}
樣本二:拒絕RAM使用者刪除某個bucket下指定的多個檔案的許可權
以下樣本為拒絕RAM使用者刪除名為mybucket
的Bucket下首碼為abc且格式為.txt的所有檔案。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:DeleteObject"
],
"Resource": [
"acs:oss:*:*:mybucket/abc*.txt"
]
}
]
}
樣本三:授予RAM使用者列舉並讀取某個Bucket下所有資源的許可權
授予RAM使用者通過OSS SDK或OSS命令列工具列舉並讀取某個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控制台列舉並讀取某個Bucket的資源
以下樣本為授予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/*" } ] }
樣本四:拒絕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"
]
}
]
}
樣本五:授予RAM使用者訪問某個Bucket下多個目錄的許可權
假設用於存放照片的Bucket為mybucket
,該Bucket下有一些目錄,代表照片的拍攝地,每個拍攝地目錄下還包含了年份子目錄。
mybucket[Bucket]
├── beijing
│ ├── 2014
│ └── 2015
├── hangzhou
│ ├── 2013
│ ├── 2014
│ └── 2015
└── qingdao
├── 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/*" ] } } } ] }
樣本六:拒絕RAM使用者刪除某個Bucket下任意檔案的許可權
以下樣本用於拒絕RAM使用者刪除名為mybucket
的儲存空間下任意檔案的許可權。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:DeleteObject"
],
"Resource": [
"acs:oss:*:*:mybucket/*"
]
}
]
}
樣本七:拒絕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"
}
}
}
]
}
樣本八:授予RAM使用者通過特定的IP地址訪問OSS的許可權
在
Allow
授權中增加IP地址限制以下樣本為在
Allow
授權中增加IP地址限制,授予RAM使用者僅允許通過192.168.0.0/16
和198.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會提示沒有許可權。
樣本九:通過RAM或STS服務向其他使用者授權
通過RAM或STS服務授權IP地址為192.168.0.1
的使用者使用Java SDK用戶端執行以下操作。
列舉examplebucket中以
foo
為首碼的對象。允許向examplebucket中上傳、下載和刪除以
file
開頭的對象。
符合上述情境的RAM Policy配置樣本如下:
{
"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"
}
}
}
]
}
樣本十:限制上傳檔案的ACL不能為公用讀取或者公用讀寫
以下RAM Policy用於限制上傳至examplebucket的檔案ACL不能為公用讀取或者公用讀寫。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:PutObject",
"oss:PutObjectAcl"
],
"Resource": [
"acs:oss:*:*:examplebucket",
"acs:oss:*:*:examplebucket/*"
],
"Condition": {
"StringEquals": {
"oss:x-oss-object-acl": [
"public-read",
"public-read-write"
]
}
}
}
]
}
樣本十一:授予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"
}
]
}
樣本十二:授予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:*:*:*" } ] }
樣本十三:授予RAM使用者建立OSS資源套件訂單的許可權
以下RAM Policy用於授予RAM使用者建立OSS資源套件訂單的許可權。
RAM使用者建立OSS資源套件訂單後,可以聯絡雲帳號擁有者完成訂單支付。如果要使RAM使用者能夠完成OSS資源套件訂單支付,雲帳號擁有者需要授予RAM使用者支付訂單的許可權bss:PayOrder
。bss:PayOrder
屬於高危許可權,涉及資金操作,非必要請勿授予。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:CreateOrder",
"Resource": "acs:oss:*:*:*"
}
]
}
樣本十四:授予RAM使用者開通OSS的許可權
以下RAM Policy用於授予RAM使用者開通OSS的許可權。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:ActivateProduct",
"Resource": "acs:oss:*:*:*"
}
]
}