リソースグループは、リソースベースのアクセス制御方法を提供します。権限要件が同じバケットをグループ化し、そのグループ全体に対して権限を付与できます。このアプローチにより、認可効率が向上します。
背景情報
企業では、リソースを分離するために、異なるプロジェクト、子会社、または部門ごとに個別の Alibaba Cloud アカウントを作成することがよくあります。しかし、アカウントが多数存在すると、クラウドリソースを一元的に管理・監視・監査することが困難になります。

この課題に対処するため、Object Storage Service (OSS) では、単一の Alibaba Cloud アカウントを使用して、さまざまなシナリオに基づいてクラウドリソースをリソースグループに整理できます。これにより、企業内のプロジェクトメンバーが各自のプロジェクトリソースを管理できるようになります。

注意事項
-
リソースグループには、異なるリージョンのバケットを含めることができます。ただし、1 つのバケットは 1 つのリソースグループにのみ所属できます。
-
バケットは、同じ Alibaba Cloud アカウントに属するリソースグループ間でのみ転送できます。
操作手順
OSS コンソールの使用
ここでは、ある企業が 20 個のバケットを使用して、各部門のテストデータを保存しているケースを例に説明します。すべての従業員に対して、10 個のバケット(examplebucket1 ~ examplebucket10)には読み取り専用アクセスを、残りの 10 個のバケット(examplebucket11 ~ examplebucket20)には読み書きアクセスを付与する必要があります。リソースグループを使用しない場合、各バケットの権限を個別に設定する必要があり、煩雑な作業となります。リソースグループを使用すれば、同じ権限要件を持つバケットをグループ化し、グループ単位で権限を付与できるため、大幅に効率が向上します。
さらに、複数の従業員に対する権限管理を効率化するため、RAM ユーザーを分類・認可するユーザグループを作成できます。これにより、ユーザーおよび権限管理が簡素化されます。
-
UserGroup1 という名前のユーザグループを作成し、メンバーを追加します。
RAM コンソールで、UserGroup1 という名前のユーザグループを作成します。詳細については、「RAM ユーザグループの作成」をご参照ください。ユーザグループを作成後、必要なユーザーをユーザグループに追加します。詳細については、「RAM ユーザーを RAM ユーザグループに追加する」をご参照ください。
-
リソースグループを作成します。
-
Resource Management コンソールに移動します。
-
左側のナビゲーションウィンドウで、リソースグループ > リソースグループを選択します。
-
リソースグループページで、リソースグループの作成をクリックします。
-
リソースグループの作成パネルで、表示名を ResourcegroupA に設定し、名前に任意の値(例:Group1)を入力します。
-
OK をクリックします。
リソースグループは現在 作成中 の状態です。約 3 秒後に
をクリックします。ステータスが 利用可能 に変更されたら、リソースグループ ResourcegroupA の作成は成功しています。 -
上記の手順を繰り返して、ResourcegroupB という名前のリソースグループを作成します。
-
-
バケットをリソースグループに割り当てます。
-
OSS コンソールにログインします。
-
バケットをクリックし、対象のバケット examplebucket1 をクリックします。
-
バケットの設定 > リソースグループを選択します。
-
リソースグループページで、設定をクリックします。
-
リソースグループドロップダウンリストから ResourcegroupA を選択し、設定をクリックします。
-
上記の手順を繰り返して、examplebucket2 ~ examplebucket10 を ResourcegroupA に、examplebucket11 ~ examplebucket20 を ResourcegroupB に割り当てます。
-
-
リソースグループに権限を付与します。
-
Resource Management コンソールの左側ナビゲーションウィンドウで、リソースグループ > リソースグループを選択します。
-
対象のリソースグループを見つけ、[操作] 列の 権限の管理 をクリックします。
-
権限タブで、権限の設定をクリックします。
-
権限の付与パネルで、次の表のとおりパラメーターを設定します。
パラメーター
説明
認可範囲
特定のリソースグループ を選択し、ドロップダウンリストから ResourcegroupA を選択します。
プリンシパル
作成したユーザグループを入力します:UserGroup1。
ポリシーの選択
システムポリシー を選択します。次に、ResourcegroupA 内の Object Storage Service (OSS) リソースに対する読み取り専用アクセスを付与するために、
AliyunOSSReadOnlyAccessポリシーを割り当てます。 -
OK をクリックします。
-
完了をクリックします。
-
上記の手順を繰り返して、ResourcegroupB に
AliyunOSSFullAccess権限を付与します。このポリシーにより、OSS に対する完全な管理アクセスが許可されます。
-
Alibaba Cloud SDK の使用
Java、Python、または Go 向けの SDK を使用して、バケットのリソースグループを構成できます。詳細については、「SDK の概要」をご参照ください。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.SetBucketResourceGroupRequest;
public class Demo {
public static void main(String[] args) throws Throwable {
// この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。例:examplebucket。
String bucketName = "examplebucket";
// リソースグループ ID を指定します。リソースグループ ID を指定しない場合、バケットはデフォルトのリソースグループに属します。
String rgId = "rg-aekz****";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient の使用が不要になったら、shutdown メソッドを呼び出して関連リソースを解放します。
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);
// バケットが属するリソースグループを構成します。
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();
}
}
}
}package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を指定します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメーターを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// リソースグループ ID を指定します。リソースグループ ID を指定しない場合、バケットはデフォルトのリソースグループに属します。
var groupId string = "rg-aekz****"
// バケット名が空かどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSSClient インスタンスを作成します。
client := oss.NewClient(cfg)
// バケットのリソースグループを構成するリクエストを作成します。
request := &oss.PutBucketResourceGroupRequest{
Bucket: oss.Ptr(bucketName), // バケットの名前。
BucketResourceGroupConfiguration: &oss.BucketResourceGroupConfiguration{
ResourceGroupId: oss.Ptr(groupId),
},
}
// バケットのリソースグループを構成するリクエストを実行します。
result, err := client.PutBucketResourceGroup(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put bucket resource group %v", err)
}
// リクエストの結果を表示します。
log.Printf("put bucket resource group result:%#v\n", result)
}
import argparse
import alibabacloud_oss_v2 as oss
# コマンドライン引数パーサを作成し、スクリプトの目的を説明します。バケットのリソースグループを構成します。
parser = argparse.ArgumentParser(description="put bucket resource group sample")
# 必須パラメーター(リージョンとバケット名)およびオプションパラメーター(エンドポイントとリソースグループ ID)を含むコマンドライン引数を定義します。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--resource_group_id',
help='The ID of the resource group to which the bucket belongs. (Optional, default is an empty string)',
default='')
def main():
# 入力された値を取得するためにコマンドライン引数を解析します。
args = parser.parse_args()
# 認証のために環境変数からアクセス認証情報を読み込みます。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# デフォルト構成を使用して cfg オブジェクトを作成し、認証情報プロバイダーを指定します。
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# cfg オブジェクトのリージョン属性をコマンドラインで指定されたリージョンに設定します。
cfg.region = args.region
# カスタムエンドポイントが指定されている場合、cfg オブジェクトのエンドポイント属性を指定されたエンドポイントで更新します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 上記の設定を使用して OSSClient インスタンスを初期化します。
client = oss.Client(cfg)
# 指定されたバケットのリソースグループを構成するリクエストを送信します。
result = client.put_bucket_resource_group(oss.PutBucketResourceGroupRequest(
bucket=args.bucket, # バケットの名前。
bucket_resource_group_configuration=oss.BucketResourceGroupConfiguration(
resource_group_id=args.resource_group_id, # リソースグループ ID。
),
))
# リクエスト状態を確認するために、操作の HTTP ステータスコードとリクエスト ID を表示します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
)
# スクリプトが直接実行されたときに処理ロジックを開始するために main 関数を呼び出します。
if __name__ == "__main__":
main() # スクリプトのエントリポイント。制御フローはここから始まります。ossutil の使用
ossutil を使用してリソースグループを構成できます。ossutil のインストール方法については、「ossutil のインストール」をご参照ください。
次のコマンドは、examplebucket バケットのリソースグループ ID を rg-123 に設定します。
ossutil api put-bucket-resource-group --bucket examplebucket --resource-group-configuration "{\"ResourceGroupId\":\"rg-123\"}"
このコマンドの詳細については、「put-bucket-resource-group」をご参照ください。
API リファレンス
このトピックの操作は、基盤となる REST API を使用しています。高度なカスタマイズが必要な場合は、REST API を直接呼び出すことができますが、その場合、リクエスト署名を手動で計算する必要があります。詳細については、「PutBucketResourceGroup」をご参照ください。