資源群組是一種基於資源的許可權管理方式。您可以將需要授予同樣許可權的Bucket歸為同一個資源群組,然後統一為該資源群組授權,從而提升授權效率。
背景資訊
企業使用者採用為每個專案建立雲帳號的方式來隔離資源,或者企業的不同子公司或部門為實現業務上雲時建立了不同的雲帳號,導致一家企業擁有大量的雲帳號,最終無法統一管理、監控和審計雲上資源。
為解決以上業務痛點,OSS支援使用者通過單個阿里雲帳號,根據不同使用情境以資源群組的方式對不同雲資源進行合理分類,賦予企業內不同專案成員按專案自治管理雲資源的能力。
注意事項
僅華東1(杭州)、華東2(上海)、華北1(青島)、華北2(北京)、華北 3(張家口)、華北5(呼和浩特)、華北6(烏蘭察布)、華南1(深圳)、華南2(河源)、華南3(廣州)、西南1(成都)、中國香港、美國(矽谷)、美國(維吉尼亞)、日本(東京)、新加坡、馬來西亞(吉隆坡)、印尼(雅加達)、德國(法蘭克福)、英國(倫敦)、阿聯酋(杜拜)地區支援配置資源群組。
一個資源群組可以包含不同地區的Bucket。一個Bucket只能屬於一個資源群組。
僅允許在Bucket擁有者名下不同資源群組之間轉移Bucket。
操作步驟
使用OSS控制台
假設某互連網公司使用了20個Bucket儲存不同部門的測試資料。要求examplebucket1~examplebucket10的資料所有員工可讀(公用讀取),examplebucket11~examplebucket20的資料所有員工可讀可寫(公用讀寫)。如果不使用資源群組,您需要分別對每個Bucket進行授權,非常繁瑣。如果使用了資源群組,您可以將需要授予同樣許可權的Bucket歸為一組,然後統一為該資源群組授權,從而極大提升授權效率。
此外,考慮到要為多名員工賦予相同許可權,您需要建立使用者組並對RAM使用者進行分類和授權,從而更好的系統管理使用者及其許可權。
建立使用者組UserGroup1並添加使用者群組成員。
通過RAM控制台建立使用者組時,使用者組名稱命名為UserGroup1。具體操作,請參見建立RAM使用者組。使用者組建立完成後,將所有需要訪問資源的使用者添加到使用者組。具體操作,請參見為RAM使用者組添加RAM使用者。
建立資源群組。
開啟資源管理主控台。
在左側導覽列,選擇資源群組>資源群組。
在資源群組頁面,單擊建立資源群組。
在建立資源群組面板,填寫資源群組名稱為ResourcegroupA,並自訂資源群組標識,例如Group1。
單擊確認。
此時,資源群組的狀態處於建立中。大約三秒後,單擊。如果狀態變為可用,表示資源群組ResourcegroupA建立成功。
重複上述步驟建立ResourcegroupB。
為目標Bucket選擇所屬資源群組。
登入OSS管理主控台。
單擊Bucket 列表,然後單擊目標儲存空間examplebucket1。
選擇Bucket 配置 > 資源群組。
在資源群組頁面,單擊設定。
選擇所屬資源群組為ResourcegroupA,然後單擊保存。
重複上述步驟為examplebucket2~examplebucket10選擇所屬資源群組ResourcegroupA,為examplebucket11~examplebucket20選擇所屬資源群組ResourcegroupB。
為資源群組授權。
在資源管理主控台的左側導覽列,選擇資源群組>資源群組。
單擊目標資源群組右側的許可權管理。
在許可權管理頁簽,單擊新增授權。
在新增授權面板,按如下說明完成各配置項。
配置項
說明
授權範圍
選中指定資源群組,並從下拉式清單中選擇ResourcegroupA。
授權主體
填寫已建立的使用者組UserGroup1。
選擇許可權
選中系統策略後,為資源群組ResourcegroupA授予唯讀訪問Object Storage Service服務(OSS)的許可權
AliyunOSSReadOnlyAccess
。單擊確定。
單擊完成。
重複上述步驟為資源群組ResourcegroupB授予管理Object Storage Service服務(OSS)許可權
AliyunOSSFullAccess
。
使用阿里雲SDK
僅Java SDK及Python SDK支援配置Bucket所屬資源群組。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.model.SetBucketResourceGroupRequest;
public class Demo {
public static void main(String[] args) throws Throwable {
// Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填寫Bucket名稱,例如examplebucket。
String bucketName = "examplebucket";
// 填寫資源群組ID。如果未填寫資源群組ID,則Bucket歸屬於預設資源群組。
String rgId = "rg-aekz****";
// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
String region = "cn-hangzhou";
// 建立OSSClient執行個體。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 建立setBucketResourceGroupRequest對象。
SetBucketResourceGroupRequest setBucketResourceGroupRequest = new SetBucketResourceGroupRequest(bucketName,rgId);
// 配置Bucket所屬資源群組。
ossClient.setBucketResourceGroup(setBucketResourceGroupRequest);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填寫Endpoint對應的Region資訊,例如cn-hangzhou。注意,v4簽名下,必須填寫該參數
region = "cn-hangzhou"
# yourBucketName填寫儲存空間名稱。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# 填寫資源群組ID。如果未填寫資源群組ID,則Bucket歸屬於預設資源群組。
resource_group_id = 'rg-aek27tc****'
# 配置Bucket所屬資源群組。
result = bucket.put_bucket_resource_group(resource_group_id)
print('配置資源群組成功,返回狀態為:' + str(result.status))
使用REST API
如果您的程式自訂要求較高,您可以直接發起REST API請求。直接發起REST API請求需要手動編寫代碼計算簽名。更多資訊,請參見PutBucketResourceGroup。