Todos os produtos
Search
Central de documentação

Object Storage Service:Gerencie permissões de acesso a objetos (C++ SDK)

Última atualização: Oct 09, 2026

Este tópico descreve como gerenciar as permissões de acesso a objetos.

Observações

  • Este tópico utiliza o endpoint público da região China (Hangzhou). Para acessar o OSS a partir de outros serviços da Alibaba Cloud na mesma região, use um endpoint interno. Para obter mais informações sobre regiões e endpoints do OSS, consulte Regions and endpoints.

  • Este tópico demonstra a criação de uma instância OSSClient com um endpoint do OSS. Para configurações alternativas, como uso de domínio personalizado ou autenticação via Security Token Service (STS), consulte Crie uma instância OssClient.

  • Para configurar a ACL de um objeto, você deve ter a permissão oss:PutObjectAcl. Para consultar ACLs de objetos, é necessária a permissão oss:GetObjectAcl. Para mais informações, consulte Conceda uma política personalizada.

Tipos de ACL

A tabela a seguir descreve as ACLs que você pode configurar para um objeto.

Nota

A ACL de um objeto tem precedência sobre a ACL do bucket onde ele está armazenado. Por exemplo, se a ACL de um objeto em um bucket privado estiver definida como public-read, todos os usuários, inclusive anônimos, poderão ler esse objeto.

Tipo de ACL

Descrição

Valor

Herdada do bucket

A ACL do objeto corresponde à do bucket onde está armazenado. Esta é a ACL padrão para objetos.

CannedAccessControlList.Default

Privada

Somente o proprietário do objeto pode ler e gravar no objeto. Outros usuários não podem acessá-lo.

CannedAccessControlList.Private

Leitura pública

Apenas o proprietário pode gravar no objeto. Demais usuários, incluindo anônimos, têm somente permissão de leitura.

Aviso

Essa configuração pode resultar em acesso não autorizado e custos inesperados. Tenha cautela ao utilizar esta ACL.

CannedAccessControlList.PublicRead

Leitura e gravação públicas

Todos os usuários, inclusive anônimos, podem ler e gravar no objeto.

Aviso

Esta ACL permite que qualquer pessoa acesse e grave dados no objeto pela internet, o que pode causar acesso não autorizado, custos imprevistos ou upload de conteúdo proibido. Não defina a ACL do objeto como leitura e gravação públicas, a menos que seja estritamente necessário.

CannedAccessControlList.PublicReadWrite

Defina permissões de acesso a objetos

O código de exemplo a seguir mostra como configurar a ACL de um objeto:

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Initialize OSS account information. */
            
    /* Set yourEndpoint to the Endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Region to cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Specify the bucket name. Example: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Specify the full path of the object. The full path cannot include the bucket name. Example: exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* Initialize network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Set the object access permissions. */
    SetObjectAclRequest request(BucketName, ObjectName);
    request.setAcl(CannedAccessControlList::Private);
    auto outcome = client.SetObjectAcl(request);

    if (!outcome.isSuccess()) {
        /* Handle exceptions. */
        std::cout << "SetObjectAcl fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Release network resources. */
    ShutdownSdk();
    return 0;
}

Obter permissões de acesso a objetos

O código de exemplo a seguir mostra como consultar a ACL de um objeto:

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Initialize OSS account information. */
            
    /* Set yourEndpoint to the Endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Region to cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Specify the bucket name. Example: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Specify the full path of the object. The full path cannot include the bucket name. Example: exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* Initialize network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Get the object access permissions. */
    GetObjectAclRequest request(BucketName, ObjectName);
    auto outcome = client.GetObjectAcl(request);

    if (!outcome.isSuccess()) {
        /* Handle exceptions. */
        std::cout << "GetObjectAcl fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }
    else { 
        std::cout << " GetObjectAcl success, Acl:" << outcome.result().Acl() << std::endl;
    }

    /* Release network resources. */
    ShutdownSdk();
    return 0;
}

Referências

  • Para obter mais informações sobre a operação de API para definir permissões de acesso a objetos, consulte PutObjectACL.

  • Para obter mais informações sobre a operação de API para recuperar permissões de acesso a objetos, consulte GetObjectACL.