Un groupe de ressources offre une méthode de contrôle d'accès basée sur les ressources. Regroupez les buckets ayant les mêmes exigences en matière d'autorisations, puis accordez des autorisations à l'ensemble du groupe. Cette approche améliore l'efficacité des opérations d'autorisation.
Contexte
Les entreprises créent souvent des comptes Alibaba Cloud distincts pour différents projets, filiales ou départements afin d'isoler les ressources. Toutefois, cette multiplication des comptes rend difficile la gestion centralisée, la surveillance et l'audit des ressources cloud.

Pour relever ce défi, Object Storage Service (OSS) vous permet d'utiliser un seul compte Alibaba Cloud pour organiser vos ressources cloud en groupes de ressources selon différents scénarios. Cela permet aux membres des projets au sein de votre entreprise de gérer leurs propres ressources de projet.

Notes d'utilisation
Un groupe de ressources peut contenir des buckets provenant de différentes régions. Un bucket ne peut appartenir qu'à un seul groupe de ressources.
Un bucket ne peut être transféré qu'entre des groupes de ressources appartenant au même compte Alibaba Cloud.
Procédure
Utiliser la console OSS
Cette section présente l'exemple d'une entreprise qui utilise 20 buckets pour stocker les données de test de différents départements. L'objectif est d'accorder un accès en lecture seule à 10 buckets (examplebucket1 à examplebucket10) et un accès en lecture-écriture aux 10 autres buckets (examplebucket11 à examplebucket20) pour tous les employés. Sans groupes de ressources, vous devriez configurer les autorisations pour chaque bucket individuellement, ce qui constitue un processus fastidieux. En utilisant des groupes de ressources, vous pouvez regrouper les buckets ayant les mêmes exigences en matière d'autorisations et accorder des autorisations au groupe, ce qui améliore considérablement l'efficacité.
De plus, pour gérer efficacement les autorisations de plusieurs employés, créez un groupe d'utilisateurs afin de classer et d'autoriser les utilisateurs RAM. Cela simplifie la gestion des utilisateurs et des autorisations.
-
Créez un groupe d'utilisateurs nommé UserGroup1 et ajoutez-y des membres.
Dans la console RAM, créez un groupe d'utilisateurs nommé UserGroup1. Pour plus d'informations, consultez la rubrique Créer un groupe d'utilisateurs RAM. Une fois le groupe d'utilisateurs créé, ajoutez les utilisateurs requis au groupe. Pour plus d'informations, consultez la rubrique Ajouter un utilisateur RAM à un groupe d'utilisateurs RAM.
-
Créez des groupes de ressources.
Accédez à la console Resource Management.
Dans le volet de navigation de gauche, sélectionnez Resource Group > Resource Group.
Sur la page Resource Group, cliquez sur Create Resource Group.
Dans le panneau Create Resource Group, définissez Display Name sur ResourcegroupA et saisissez un Resource Group Identifier personnalisé, tel que Group1.
-
Cliquez sur OK.
Le groupe de ressources est désormais à l'état Creating. Après environ trois secondes, cliquez sur
. Si l'état passe à Available, le groupe de ressources ResourcegroupA a été créé avec succès. Répétez les étapes précédentes pour créer un groupe de ressources nommé ResourcegroupB.
-
Attribuez les buckets aux groupes de ressources.
Connectez-vous à la console OSS.
Cliquez sur Buckets, puis cliquez sur le bucket cible, examplebucket1.
Sélectionnez Bucket Settings > Resource Group.
Sur la page Resource Group, cliquez sur Settings.
Sélectionnez ResourcegroupA dans la liste déroulante Resource Group et cliquez sur Save.
Répétez ces étapes pour attribuer les buckets examplebucket2 à examplebucket10 à ResourcegroupA, et les buckets examplebucket11 à examplebucket20 à ResourcegroupB.
-
Accordez des autorisations aux groupes de ressources.
Dans le volet de navigation de gauche de la console Resource Management, sélectionnez Resource Group > Resource Group.
Recherchez le groupe de ressources cible et cliquez sur Manage Permission dans la colonne Actions.
Sous l'onglet Permissions, cliquez sur Grant Permission.
-
Dans le panneau Grant Permission, configurez les paramètres comme décrit dans le tableau suivant.
Parameter
Description
Authorized Scope
Sélectionnez Specific Resource Group puis choisissez ResourcegroupA dans la liste déroulante.
Principal
Saisissez le groupe d'utilisateurs que vous avez créé : UserGroup1.
Select Policy
Sélectionnez System Policy. Ensuite, attribuez la stratégie
AliyunOSSReadOnlyAccesspour accorder un accès en lecture seule aux ressources Object Storage Service (OSS) dans ResourcegroupA. Cliquez sur OK.
Cliquez sur Complete.
Répétez ces étapes pour accorder l'autorisation
AliyunOSSFullAccessà ResourcegroupB. Cette stratégie accorde un accès de gestion complet à OSS.
Utiliser les SDK Alibaba Cloud
Vous pouvez configurer le groupe de ressources d'un bucket à l'aide des SDK pour Java, Python ou Go. Pour plus d'informations, consultez la rubrique Présentation des 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 {
// In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the name of the bucket. Example: examplebucket.
String bucketName = "examplebucket";
// Specify the ID of the resource group. If you do not specify a resource group ID, the bucket belongs to the default resource group.
String rgId = "rg-aekz****";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
String region = "cn-hangzhou";
// Create an OSSClient instance.
// Call the shutdown method to release associated resources when the OSSClient is no longer in use.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Create a setBucketResourceGroupRequest object.
SetBucketResourceGroupRequest setBucketResourceGroupRequest = new SetBucketResourceGroupRequest(bucketName,rgId);
// Configure the resource group to which the bucket belongs.
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"
)
// Specify the global variables.
var (
region string // The region in which the bucket is located.
bucketName string // The name of the bucket.
)
// Specify the init function used to initialize command line parameters.
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// Parse command line parameters.
flag.Parse()
// Specify the ID of the resource group. If you do not specify a resource group ID, the bucket belongs to the default resource group.
var groupId string = "rg-aekz****"
// Check whether the bucket name is empty.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// Check whether the region is empty.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// Load the default configurations and specify the credential provider and region.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Create an OSSClient instance.
client := oss.NewClient(cfg)
// Create a request to configure the resource group for the bucket.
request := &oss.PutBucketResourceGroupRequest{
Bucket: oss.Ptr(bucketName), // The name of the bucket.
BucketResourceGroupConfiguration: &oss.BucketResourceGroupConfiguration{
ResourceGroupId: oss.Ptr(groupId),
},
}
// Execute the request to configure the resource group for the bucket.
result, err := client.PutBucketResourceGroup(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put bucket resource group %v", err)
}
// Display the result of the request.
log.Printf("put bucket resource group result:%#v\n", result)
}
import argparse
import alibabacloud_oss_v2 as oss
# Create a command line argument parser and describe the purpose of the script: configure the resource group for a bucket.
parser = argparse.ArgumentParser(description="put bucket resource group sample")
# Define the command-line arguments, including the required parameters - region and bucket name - as well as the optional parameters - endpoint and resource group 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():
# Parse command line arguments to obtain the values entered.
args = parser.parse_args()
# Load access credentials from environment variables for authentication.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Use the default configuration to create a cfg object and specify the credential provider.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# Set the region attribute of the cfg object to the region provided in the command line.
cfg.region = args.region
# If a custom endpoint is provided, update the endpoint attribute of the cfg object with the provided endpoint.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Use the preceding settings to initialize the OSSClient instance.
client = oss.Client(cfg)
# Send a request to configure the resource group for the specified bucket.
result = client.put_bucket_resource_group(oss.PutBucketResourceGroupRequest(
bucket=args.bucket, # Name of the bucket.
bucket_resource_group_configuration=oss.BucketResourceGroupConfiguration(
resource_group_id=args.resource_group_id, # Resource group ID.
),
))
# Display the HTTP status code of the operation and request ID to check the request status.
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
)
# Call the main function to start the processing logic when the script is directly run.
if __name__ == "__main__":
main() # Entry point of the script. The control flow starts here.Utiliser ossutil
Vous pouvez utiliser ossutil pour configurer un groupe de ressources. Pour savoir comment installer ossutil, consultez la rubrique Installer ossutil.
La commande suivante définit l'ID du groupe de ressources sur rg-123 pour le bucket examplebucket.
ossutil api put-bucket-resource-group --bucket examplebucket --resource-group-configuration "{\"ResourceGroupId\":\"rg-123\"}"
Pour plus d'informations sur cette commande, consultez la rubrique put-bucket-resource-group.
Référence API
Les opérations décrites dans cette rubrique utilisent l'API REST sous-jacente. Pour une personnalisation avancée, vous pouvez appeler directement l'API REST, ce qui nécessite de calculer manuellement la signature de la requête. Pour plus d'informations, consultez la rubrique PutBucketResourceGroup.