このトピックでは、C# SDK V2 を使用してオブジェクトのアクセス制御リスト (ACL) を設定および取得する方法について説明します。
注意事項
このトピックのサンプルコードでは、中国 (杭州) リージョン (
cn-hangzhou) を例として使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS がサポートするリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。オブジェクトの ACL を設定するには、
oss:PutObjectAcl権限が必要です。オブジェクトの ACL を取得するには、oss:GetObjectAcl権限が必要です。詳細については、「RAM ユーザーへのカスタム権限の付与」をご参照ください。
ACL のタイプ
オブジェクトには、次の 4 種類の ACL があります。
アクセス権限 | 説明 | ACL 値 |
バケットから継承 | ファイルはバケットからアクセス権限を継承します。 | default |
非公開 | オブジェクト所有者と承認されたユーザーのみがオブジェクトに対する読み取りおよび書き込み権限を持ちます。他のユーザーはオブジェクトにアクセスする権限がありません。 | private |
公開読み取り | オブジェクト所有者と承認されたユーザーのみがオブジェクトに対する読み取りおよび書き込み権限を持ちます。他のユーザーはオブジェクトに対する読み取り権限のみを持ちます。この権限は注意して使用してください。 | public-read |
公開読み書き | すべてのユーザーがオブジェクトに対する読み取りおよび書き込み権限を持ちます。この権限は注意して使用してください。 | public-read-write |
オブジェクトの ACL は、そのオブジェクトを含むバケットの ACL よりも優先度が高くなります。たとえば、バケットの ACL が非公開で、バケット内のオブジェクトの ACL が公開読み書きの場合、すべてのユーザーがそのオブジェクトに対する読み取りおよび書き込み権限を持ちます。オブジェクトに ACL を設定しない場合、オブジェクトはそのバケットの ACL を継承します。
サンプルコード
次のコードを使用して、オブジェクトの ACL を設定および取得できます。
using OSS = AlibabaCloud.OSS.V2; // Alibaba Cloud OSS SDK のエイリアスを作成して、後続の使用を簡素化します。
var region = "cn-hangzhou"; // 必須。バケットが配置されているリージョンを設定します。この例では、リージョンは中国 (杭州) に設定され、リージョン ID は cn-hangzhou に設定されています。
var endpoint = null as string; // オプション。OSS へのアクセスに使用されるエンドポイントを指定します。この例では、エンドポイントは https://oss-cn-hangzhou.aliyuncs.com に設定されています。
var bucket = "your bucket name"; // 必須。宛先バケットの名前。
var key = "your object name"; // 必須。宛先オブジェクトの名前。
var acl = "your object Acl"; // 必須。宛先オブジェクトの ACL。有効な値: default、private、public-read、public-read-write。
// OSS SDK のデフォルト設定をロードします。設定は、環境変数から AccessKey などの認証情報を自動的に読み取ります。
var cfg = OSS.Configuration.LoadDefault();
// 環境変数を使用して ID 検証用の認証情報を取得するように明示的に設定します。フォーマット: OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET。
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// 設定でバケットのリージョンを設定します。
cfg.Region = region;
// エンドポイントが指定されている場合、デフォルトのエンドポイントは上書きされます。
if(endpoint != null)
{
cfg.Endpoint = endpoint;
}
// 設定情報を使用して OSS クライアントインスタンスを作成します。
using var client = new OSS.Client(cfg);
// PutObjectAclAsync メソッドを呼び出して、宛先オブジェクトの ACL を設定します。
var result1 = await client.PutObjectAclAsync(new OSS.Models.PutObjectAclRequest()
{
Bucket = bucket,
Key = key,
Acl = acl,
});
// GetObjectAclAsync メソッドを呼び出して、宛先オブジェクトの ACL 情報を取得します。
var result2 = await client.GetObjectAclAsync(new OSS.Models.GetObjectAclRequest()
{
Bucket = bucket,
Key = key,
});
// 結果情報を出力します。
Console.WriteLine("GetObjectAcl done"); // 操作が完了したことを示すメッセージ。
Console.WriteLine($"StatusCode: {result2.StatusCode}"); // HTTP ステータスコード。
Console.WriteLine($"RequestId: {result2.RequestId}"); // リクエスト ID。Alibaba Cloud でのトラブルシューティングに使用されます。
Console.WriteLine("Response Headers:"); // 応答ヘッダー情報。
result2.Headers.ToList().ForEach(x => Console.WriteLine(x.Key + " : " + x.Value)); // すべての応答ヘッダーを走査して出力します。
Console.WriteLine($"Acl: {result2.Acl}"); // 宛先オブジェクトの ACL 情報。関連ドキュメント
オブジェクトの ACL を設定するための完全なサンプルコードについては、「PutObjectAcl.cs」をご参照ください。
オブジェクトの ACL を取得するための完全なサンプルコードについては、「GetObjectAcl.cs」をご参照ください。