Todos os produtos
Search
Central de documentação

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

Última atualização: Jul 03, 2026

Além das listas de controle de acesso (ACLs) no nível do bucket, o OSS oferece ACLs no nível do objeto. Defina uma ACL ao carregar um objeto ou modifique a ACL de um objeto existente a qualquer momento.

Observações

  • Este tópico usa 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 mais informações sobre regiões e endpoints do OSS, consulte Regiões e endpoints.

  • Este tópico demonstra como criar uma instância OSSClient com um endpoint do OSS. Para outras configurações, como uso de domínio personalizado ou autenticação com credenciais do Security Token Service (STS), consulte Inicialização (C SDK).

  • Para configurar a ACL de um objeto, você precisa da permissão oss:PutObjectAcl. Para consultar ACLs de objetos, você precisa da permissão oss:GetObjectAcl. Para mais detalhes, consulte Conceder uma política personalizada.

Tipos de ACL

Os objetos têm os quatro tipos de ACL a seguir:

Nota

As ACLs de objeto têm prioridade maior que as ACLs de bucket. Por exemplo, se um objeto estiver definido como public-read, qualquer pessoa, incluindo usuários anônimos, poderá lê-lo, mesmo que o bucket que contém o objeto seja privado.

Tipo de permissão

Descrição

Valor da permissão

Herdar do bucket (padrão)

Se um objeto não tiver uma ACL, ele herdará a ACL do bucket.

OSS_ACL_DEFAULT

Privado

Somente o proprietário do objeto pode ler e gravar nele. Outros usuários não têm acesso ao objeto.

OSS_ACL_PRIVATE

Leitura pública

Apenas o proprietário do objeto pode gravar nele. Qualquer pessoa, incluindo usuários anônimos, pode ler o objeto.

Aviso

Qualquer usuário na Internet pode acessar o objeto. Isso pode causar vazamento de dados e aumento nas taxas. Use esta permissão com cautela.

OSS_ACL_PUBLIC_READ

Leitura e gravação públicas

Qualquer pessoa, incluindo usuários anônimos, pode ler e gravar no objeto.

Aviso

Qualquer usuário na Internet pode acessar este objeto e gravar dados nele. Essa configuração pode resultar em vazamento de dados e custos elevados. Se usuários mal-intencionados gravarem informações ilegais no objeto, seus direitos legais poderão ser violados. Não configure permissões de leitura e gravação públicas a menos que seja estritamente necessário.

OSS_ACL_PUBLIC_READ_WRITE

Código de exemplo

O código de exemplo a seguir mostra como definir e recuperar a ACL de um objeto específico:

#include "oss_api.h"
#include "aos_http_io.h"
/* 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. */
const char *endpoint = "yourEndpoint";
/* Specify the bucket name. Example: examplebucket. */
const char *bucket_name = "examplebucket";
/* Specify the full path of the object. The full path cannot contain the bucket name. Example: exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* 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. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Initialize an aos_string_t type with a char* string. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* 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 configured. */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // The following two parameters also need to be configured.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Specify whether a CNAME is used. 0 indicates that no CNAME is used. */
    options->config->is_cname = 0;
    /* Set network parameters, such as the timeout period. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* Call the aos_http_io_initialize method at the program entrance to initialize global resources such as the network and memory. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* The memory pool (pool) is used for memory management and is equivalent to apr_pool_t. The implementation code is in the apr library. */
    aos_pool_t *pool;
    /* Create a new memory pool. The second parameter is NULL, which indicates that the new memory pool does not inherit from another memory pool. */
    aos_pool_create(&pool, NULL);
    /* Create and initialize options. This parameter includes global configuration information such as endpoint, access_key_id, access_key_secret, is_cname, and curl. */
    oss_request_options_t *oss_client_options;
    /* Allocate memory to options in the memory pool. */
    oss_client_options = oss_request_options_create(pool);
    /* Initialize the client options oss_client_options. */
    init_options(oss_client_options);
    /* Initialize parameters. */
    aos_string_t bucket;
    aos_string_t object;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    oss_acl_e oss_acl = OSS_ACL_PRIVATE;
    /* Set the object ACL. */
    resp_status = oss_put_object_acl(oss_client_options, &bucket, &object, oss_acl, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("put object acl success!\n"); 
    } else {
        printf("put object acl failed!\n"); 
    }
    /* Get the object ACL. */
    aos_string_t oss_acl_string;
    resp_status = oss_get_object_acl(oss_client_options, &bucket, &object, &oss_acl_string, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("get object acl success!\n");
        printf("acl: %s \n", oss_acl_string.data);
    } else {
        printf("get object acl failed!\n");
    }
    /* Release the memory pool. This releases the memory allocated to resources during the request. */
    aos_pool_destroy(pool);
    /* Release the allocated global resources. */
    aos_http_io_deinitialize();
    return 0;
}

Referências

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

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