Este tópico descreve como gerenciar as listas de controle de acesso (ACLs) de objetos.
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 as regiões e endpoints do OSS, consulte Regions and endpoints.
Este tópico demonstra como criar uma instância OSSClient com um endpoint do OSS. Para configurações alternativas, como usar um domínio personalizado ou autenticar-se com credenciais do Security Token Service (STS), consulte Initialization (C# SDK V1).
Para configurar a ACL de um objeto, você precisa da permissão
oss:PutObjectAcl. Para consultar a ACL de um objeto, você precisa da permissãooss:GetObjectAcl. Para mais informações, consulte Grant a custom policy.
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 em que o objeto está armazenado. Por exemplo, se a ACL de um objeto em um bucket privado estiver definida como public-read, todos os usuários, incluindo usuários anônimos, poderão ler o objeto.
Tipo de ACL | Descrição | Valor |
Herdada do bucket | A ACL do objeto é igual à do bucket em que está armazenado. Esta é a ACL padrão de um objeto. | CannedAccessControlList.Default |
Privada | Somente o proprietário do objeto pode ler e gravar o objeto. Outros usuários não podem acessá-lo. | CannedAccessControlList.Private |
Leitura pública | Somente o proprietário do objeto pode gravá-lo. Outros usuários, incluindo usuários anônimos, podem apenas ler o objeto. Aviso Isso pode causar acesso não autorizado e custos inesperados. Use essa ACL com cuidado. | CannedAccessControlList.PublicRead |
Leitura e gravação públicas | Todos os usuários, incluindo usuários anônimos, podem ler e gravar o objeto. Aviso Essa ACL permite que todos os usuários acessem e gravem dados no objeto pela Internet, o que pode causar acesso não autorizado, custos inesperados ou envio de conteúdo proibido. Não defina a ACL do objeto como leitura e gravação públicas, a menos que seja necessário. | CannedAccessControlList.PublicReadWrite |
Código de exemplo
O código a seguir mostra 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);
client.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 acessar o código de exemplo completo para gerenciar a ACL de um objeto, visite o GitHub.
Para mais informações sobre a operação da API usada para configurar a ACL de um objeto, consulte PutObjectACL.
Para mais informações sobre a operação da API usada para consultar a ACL de um objeto, consulte GetObjectACL.