注意事項
本文以華東1(杭州)外網Endpoint為例。如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS地區和訪問網域名稱。
本文以OSS網域名稱建立OSSClient為例。如果您希望通過自訂網域名、STS等方式建立OSSClient,請參見初始化。
要設定Object存取權限,您必須具有oss:PutObjectAcl
許可權;要擷取Object存取權限,您必須具有oss:GetObjectAcl
許可權。具體操作,請參見為RAM使用者授權自訂的權限原則。
讀寫權限類型
Object包含以下4種讀寫權限:
說明
Object的存取權限優先順序高於Bucket的存取權限。例如,Bucket的存取權限為私人,而Object的存取權限是公用讀取,則任何人(包括匿名使用者)都可以對該Object進行讀操作。
權限類別型 | 描述 | 許可權值 |
繼承Bucket(預設許可權) | 當Object未設定存取權限時,該Object遵循Bucket的讀寫權限,即Bucket是什麼許可權,Object就是什麼許可權。 | CannedAccessControlList.Default |
私人 | 只有Object的擁有者可以對該Object進行讀寫操作,其他人無法訪問該Object。 | CannedAccessControlList.Private |
公用讀取 | 只有該Object的擁有者可以對該Object進行寫操作,任何人(包括匿名訪問者)都可以對該Object進行讀操作。 警告 互連網上任何使用者都可以對該Object進行訪問,這有可能造成您資料的外泄以及費用激增,請謹慎操作。 | CannedAccessControlList.PublicRead |
公用讀寫 | 任何人(包括匿名訪問者)都可以對該Object進行讀寫操作。 警告 互連網上任何使用者都可以對該Object進行訪問,並且向該Object寫入資料。這有可能造成您資料的外泄以及費用激增,如果被人惡意寫入違法資訊還可能會侵害您的合法權益。除特殊情境外,不建議您配置公用讀寫許可權。 | CannedAccessControlList.PublicReadWrite |
範例程式碼
以下代碼用於設定並擷取指定Object的存取權限:
using Aliyun.OSS;
using Aliyun.OSS.Common;
var endpoint = "yourEndpoint";
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
var bucketName = "examplebucket";
var objectName = "exampleobject.txt";
const string region = "cn-hangzhou";
var conf = new ClientConfiguration();
conf.SignatureVersion = SignatureVersion.V4;
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
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);
}
try
{
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);
}