Todos os produtos
Search
Central de documentação

Object Storage Service:Use resource groups to grant permissions to multiple buckets

Última atualização: Jul 03, 2026

Um grupo de recursos oferece um método de controle de acesso baseado em recursos. Agrupe buckets com os mesmos requisitos de permissão e conceda permissões a todo o grupo simultaneamente. Essa abordagem aumenta a eficiência da autorização.

Contexto

Empresas frequentemente criam contas separadas na Alibaba Cloud para diferentes projetos, subsidiárias ou departamentos visando isolar recursos. No entanto, essa proliferação de contas dificulta o gerenciamento centralizado, o monitoramento e a auditoria dos recursos em nuvem.

account

Para resolver esse desafio, o Object Storage Service (OSS) permite usar uma única conta da Alibaba Cloud para organizar seus recursos em nuvem em grupos de recursos conforme os diferentes cenários. Isso possibilita que os membros dos projetos da sua empresa gerenciem seus próprios recursos.

rg

Observações de uso

  • Um grupo de recursos pode conter buckets de diferentes regiões. Cada bucket pertence a apenas um grupo de recursos.

  • Transfira um bucket apenas entre grupos de recursos que pertençam à mesma conta da Alibaba Cloud.

Procedimento

Use the OSS console

Esta seção apresenta o exemplo de uma empresa que utiliza 20 buckets para armazenar dados de teste de diferentes departamentos. O objetivo é conceder acesso somente leitura a 10 buckets (de examplebucket1 a examplebucket10) e acesso de leitura e gravação aos outros 10 buckets (de examplebucket11 a examplebucket20) para todos os funcionários. Sem grupos de recursos, seria necessário configurar as permissões individualmente para cada bucket, um processo trabalhoso. Com grupos de recursos, agrupe os buckets com os mesmos requisitos de permissão e conceda as permissões ao grupo, aumentando significativamente a eficiência.

Além disso, para gerenciar permissões de vários funcionários eficientemente, crie um grupo de usuários para classificar e autorizar usuários do RAM. Isso simplifica o gerenciamento de usuários e permissões.

  1. Crie um grupo de usuários chamado UserGroup1 e adicione membros.

    No console do RAM, crie um grupo de usuários chamado UserGroup1. Para mais informações, consulte Criar um grupo de usuários do RAM. Após criar o grupo, adicione os usuários necessários. Para mais informações, consulte Adicionar um usuário do RAM a um grupo de usuários do RAM.

  2. Crie grupos de recursos.

    1. Acesse o console do Resource Management.

    2. No painel de navegação à esquerda, escolha Resource Group > Resource Group.

    3. Na página Resource Group, clique em Create Resource Group.

    4. No painel Create Resource Group, defina Display Name como ResourcegroupA e insira um Resource Group Identifier personalizado, como Group1.

    5. Clique em OK.

      O grupo de recursos estará no estado Creating. Após cerca de três segundos, clique em 资源组_刷新列表. Se o status mudar para Available, o grupo de recursos ResourcegroupA foi criado com sucesso.

    6. Repita as etapas anteriores para criar um grupo de recursos chamado ResourcegroupB.

  3. Atribua buckets aos grupos de recursos.

    1. Faça login no console do OSS.

    2. Clique em Buckets e, em seguida, clique no bucket de destino examplebucket1.

    3. Escolha Bucket Settings > Resource Group.

    4. Na página Resource Group, clique em Settings.

    5. Selecione ResourcegroupA na lista suspensa Resource Group e clique em Save.

    6. Repita essas etapas para atribuir os buckets examplebucket2 a examplebucket10 ao ResourcegroupA e os buckets examplebucket11 a examplebucket20 ao ResourcegroupB.

  4. Conceda permissões aos grupos de recursos.

    1. No painel de navegação à esquerda do console do Resource Management, escolha Resource Group > Resource Group.

    2. Localize o grupo de recursos de destino e clique em Manage Permission na coluna Actions.

    3. Na aba Permissions, clique em Grant Permission.

    4. No painel Grant Permission, configure os parâmetros conforme descrito na tabela a seguir.

      Parâmetro

      Descrição

      Authorized Scope

      Selecione Specific Resource Group e, em seguida, selecione ResourcegroupA na lista suspensa.

      Principal

      Insira o grupo de usuários criado: UserGroup1.

      Select Policy

      Selecione System Policy. Em seguida, atribua a política AliyunOSSReadOnlyAccess para conceder acesso somente leitura aos recursos do Object Storage Service (OSS) no ResourcegroupA.

    5. Clique em OK.

    6. Clique em Complete.

    7. Repita essas etapas para conceder a permissão AliyunOSSFullAccess ao ResourcegroupB. Essa política concede acesso total de gerenciamento ao OSS.

Use Alibaba Cloud SDKs

Configure o grupo de recursos para um bucket usando os SDKs para Java, Python ou Go. Para mais informações, consulte Visão geral do 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(&region, "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.

Use ossutil

Use o ossutil para configurar um grupo de recursos. Para obter informações sobre como instalar o ossutil, consulte Instalar ossutil.

O comando a seguir define o ID do grupo de recursos como rg-123 para o bucket examplebucket.

ossutil api put-bucket-resource-group --bucket examplebucket --resource-group-configuration "{\"ResourceGroupId\":\"rg-123\"}"

Para mais informações sobre este comando, consulte put-bucket-resource-group.

Referência da API

As operações neste tópico utilizam a API REST subjacente. Para personalizações avançadas, chame a API REST diretamente, o que exige o cálculo manual da assinatura da solicitação. Para mais informações, consulte PutBucketResourceGroup.