Este tópico descreve como gerenciar as listas de controle de acesso (ACLs) de objetos.
Observações
Este tópico utiliza o endpoint público da região China (Hangzhou). Caso precise acessar o OSS a partir de outros serviços da Alibaba Cloud na mesma região, utilize um endpoint interno. Para obter mais informações sobre regiões e endpoints do OSS, consulte Regiões e 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 com credenciais do Security Token Service (STS), consulte Inicialização (C# SDK V1).
Para configurar a ACL de um objeto, você precisa da permissão
oss:PutObjectAcl. Para consultar ACLs de objetos, é necessária a permissãooss:GetObjectAcl. Para mais detalhes, consulte Conceder uma política personalizada.
Tipos de ACL
A tabela a seguir descreve as ACLs configuráveis para um objeto.
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, incluindo anônimos, poderão ler esse objeto.
|
Tipo de ACL |
Descrição |
Valor |
|
Herdada do bucket |
A ACL do objeto é igual à do bucket onde está armazenado. Esta é a ACL padrão de um objeto. |
CannedAccessControlList.Default |
|
Privada |
Somente o proprietário do objeto pode lê-lo e gravá-lo. Outros usuários não têm acesso ao objeto. |
CannedAccessControlList.Private |
|
Leitura pública |
Apenas o proprietário do objeto pode gravar nele. Outros usuários, incluindo anônimos, só podem ler o objeto. Aviso
Isso pode causar acesso não autorizado e custos inesperados. Tenha cautela ao usar esta ACL. |
CannedAccessControlList.PublicRead |
|
Leitura e gravação públicas |
Todos os usuários, incluindo anônimos, podem ler e gravar o objeto. Aviso
Esta ACL permite que qualquer usuário acesse e grave dados no objeto pela internet, o que pode resultar em acesso não autorizado, custos inesperados 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 |
Código de exemplo
O código abaixo exemplifica como configurar e consultar a ACL de um objeto específico:
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// 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.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the name of the bucket. Example: examplebucket.
var bucketName = "examplebucket";
// Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt.
var objectName = "exampleobject.txt";
// 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.
const string region = "cn-hangzhou";
// Create a ClientConfiguration instance and modify the default parameters based on your requirements.
var conf = new ClientConfiguration();
// Use the signature algorithm V4.
conf.SignatureVersion = SignatureVersion.V4;
// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
// Configure the ACL of the object.
try
{
// Call SetObjectAcl to configure the ACL of the object.
client.SetObjectAcl(bucketName, objectName, CannedAccessControlList.PublicRead);
Console.WriteLine("Set Object:{0} ACL succeeded ", objectName);
}
catch (Exception ex)
{
Console.WriteLine("Set Object ACL failed with error info: {0}", ex.Message);
}
// Query the ACL of the object.
try
{
// Call GetObjectAcl to query the ACL of the object.
var result = client.GetObjectAcl(bucketName, objectName);
Console.WriteLine("Get Object ACL succeeded, Id: {0} ACL: {1}",
result.Owner.Id, result.ACL.ToString());
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID: {2}\tHostID: {3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
Referências
Para obter o código de exemplo completo de gerenciamento da ACL de um objeto, visite o GitHub.
Para mais informações sobre a operação de API usada para configurar a ACL de um objeto, consulte PutObjectACL.
Para detalhes sobre a operação de API destinada à consulta da ACL de um objeto, consulte GetObjectACL.