バケットはオブジェクトを格納するコンテナーです。このトピックでは、C# SDK V2 を使用してバケットのアクセス制御リスト (ACL) を設定および取得する方法について説明します。
注意事項
このトピックのサンプルコードでは、中国 (杭州) リージョン (
cn-hangzhou) を例として使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud プロダクトから OSS にアクセスする場合は、内部エンドポイントを使用できます。各リージョンのエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。バケット ACL を設定するには、
oss:PutBucketAcl権限が必要です。バケット ACL を取得するには、oss:GetBucketAcl権限が必要です。詳細については、「RAM ユーザーにカスタム権限を付与する」をご参照ください。
バケット ACL のタイプ
バケット ACL には、次の 3 つのタイプがあります。
ACL | 説明 | 権限値 |
private | バケットのオーナーと承認されたユーザーは、バケット内のオブジェクトに対する読み取りおよび書き込み権限を持ちます。他のユーザーはオブジェクトに対する操作を実行できません。 | private |
public-read | バケットのオーナーと承認されたユーザーは、バケット内のオブジェクトに対する読み取りおよび書き込み権限を持ちます。他のユーザーは読み取り権限のみを持ちます。この権限は注意して使用してください。 | public-read |
public-read-write | すべてのユーザーがバケット内のオブジェクトに対する読み取りおよび書き込み権限を持ちます。この権限は注意して使用してください。 | public-read-write |
サンプルコード
次のサンプルコードは、バケット ACL を設定および取得する方法を示しています。
using OSS = AlibabaCloud.OSS.V2; // Alibaba Cloud OSS SDK のエイリアスを作成して、後続の使用を簡素化します。
var region = "cn-hangzhou"; // 必須。バケットが配置されているリージョン。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
var endpoint = null as string; // オプション。OSS へのアクセスに使用されるエンドポイント。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var bucket = "your bucket name"; // 必須。バケット名。
var acl = "your bucket Acl"; // 必須。宛先バケットの ACL。有効な値: 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);
// PutBucketAclAsync メソッドを呼び出して、宛先バケットの ACL を設定します。
var result1 = await client.PutBucketAclAsync(new OSS.Models.PutBucketAclRequest()
{
Bucket = bucket,
Acl = acl
});
// GetBucketAclAsync メソッドを呼び出して、宛先バケットの ACL を取得します。
var result2 = await client.GetBucketAclAsync(new OSS.Models.GetBucketAclRequest()
{
Bucket = bucket
});
// 結果情報を出力します。
Console.WriteLine("PutBucketAcl done"); // 操作が完了したことを示すメッセージ。
Console.WriteLine($"StatusCode: {result.StatusCode}"); // HTTP ステータスコード。
Console.WriteLine($"RequestId: {result.RequestId}"); // リクエスト ID。Alibaba Cloud でのトラブルシューティングに使用されます。
Console.WriteLine("Response Headers:"); // 応答ヘッダー情報。
result.Headers.ToList().ForEach(x => Console.WriteLine(x.Key + " : " + x.Value)); // すべての応答ヘッダーを走査して出力します。
Console.WriteLine($"Acl: {result2.AccessControlPolicy!.AccessControlList!.Grant}"); // 宛先バケットの ACL を出力します。リファレンス
バケット ACL を設定するための完全なサンプルコードについては、「PutBucketAcl.cs」をご参照ください。
バケット ACL を取得するための完全なサンプルコードについては、「GetBucketAcl.cs」をご参照ください。