メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

AWS SDK for .NET を使用した Cross-Origin Resource Sharing(CORS)の有効化

AWS SDK for .NET を使用して、バケットの Cross-Origin Resource Sharing(CORS)を管理できます。CORS の詳細については、「Cross-Origin Resource Sharing (CORS)」を参照してください。

このセクションでは、次の表でタスクのサンプルコードの一部を示します(完全なサンプルプログラムは後述)。

Cross-Origin Resource Sharing の管理

1

AmazonS3Client クラスのインスタンスを作成します。

2

新しい CORS 設定を作成します。

3

既存の CORS 設定を取得して変更します。

4

設定をバケットに追加します。

Cross-Origin Resource Sharing のメソッド

AmazonS3Client()

App.config ファイルで定義されている証明書で AmazonS3Client を作成します。

PutCORSConfiguration()

バケットに適用する CORS 設定を設定します。指定されたバケットに設定が既に存在する場合、既存の設定は新しい設定で置き換えられます。

GetCORSConfiguration()

指定されたバケットの CORS 設定を取得します。バケットに設定がない場合、レスポンスの Configuration ヘッダーは null になります。

DeleteCORSConfiguration()

指定されたバケットの CORS 設定を削除します。

AWS SDK for .NET API の詳細については、「AWS SDK for .NET の使用」を参照してください。

Amazon S3 クラスのインスタンスの作成

以下の例では、AmazonS3Client クラスのインスタンスを作成します。

Copy
static IAmazonS3 client; using (client = new AmazonS3Client(Amazon.RegionEndpoint.USWest2))

バケットへの CORS 設定の追加

CORS 設定をバケットに追加するには。

  1. ルールを記述する CORSConfiguration オブジェクトを作成します。

  2. バケット名と CORS 設定を指定する PutCORSConfigurationRequest オブジェクトを作成します。

  3. client.PutCORSConfiguration を呼び出して、CORS 設定をバケットに追加します。

次のコード例では、CORSRule1CORSRule2 の 2 つのルールを作成し、各ルールを rules 配列に追加しています。rules 配列を使用して、ルールをバケット bucketName に追加します。

Copy
// Add a sample configuration CORSConfiguration configuration = new CORSConfiguration { Rules = new System.Collections.Generic.List<CORSRule> { new CORSRule { Id = "CORSRule1", AllowedMethods = new List<string> {"PUT", "POST", "DELETE"}, AllowedOrigins = new List<string> {"http://*.example.com"} }, new CORSRule { Id = "CORSRule2", AllowedMethods = new List<string> {"GET"}, AllowedOrigins = new List<string> {"*"}, MaxAgeSeconds = 3000, ExposeHeaders = new List<string> {"x-amz-server-side-encryption"} } } }; // Save the configuration PutCORSConfiguration(configuration); static void PutCORSConfiguration(CORSConfiguration configuration) { PutCORSConfigurationRequest request = new PutCORSConfigurationRequest { BucketName = bucketName, Configuration = configuration }; var response = client.PutCORSConfiguration(request); }

既存の CORS 設定の更新

既存の CORS 設定を更新するには

  1. client.GetCORSConfiguration メソッドを呼び出して、CORS 設定を取得します。

  2. ルールを追加または削除して設定情報を更新します。

  3. client.PutCORSConfiguration メソッドを呼び出して、設定をバケットに追加します。

次のコードは、既存の設定を取得して、ID NewRule の新しいルールを追加する例です。

Copy
// Get configuration. configuration = GetCORSConfiguration(); // Add new rule. configuration.Rules.Add(new CORSRule { Id = "NewRule", AllowedMethods = new List<string> { "HEAD" }, AllowedOrigins = new List<string> { "http://www.example.com" } }); // Save configuration. PutCORSConfiguration(configuration);

例 プログラムリスト

次の C# プログラムには、前述のタスクが組み込まれています。

作業サンプルの作成およびテストについては、「Amazon S3 .NET コード例の実行」を参照してください。

Copy
using System; using System.Configuration; using System.Collections.Specialized; using System.Net; using Amazon.S3; using Amazon.S3.Model; using Amazon.S3.Util; using System.Diagnostics; using System.Collections.Generic; namespace s3.amazon.com.docsamples { class CORS { static string bucketName = "*** Provide bucket name ***"; static IAmazonS3 client; public static void Main(string[] args) { try { using (client = new AmazonS3Client(Amazon.RegionEndpoint.USWest2)) { // Create a new configuration request and add two rules CORSConfiguration configuration = new CORSConfiguration { Rules = new System.Collections.Generic.List<CORSRule> { new CORSRule { Id = "CORSRule1", AllowedMethods = new List<string> {"PUT", "POST", "DELETE"}, AllowedOrigins = new List<string> {"http://*.example.com"} }, new CORSRule { Id = "CORSRule2", AllowedMethods = new List<string> {"GET"}, AllowedOrigins = new List<string> {"*"}, MaxAgeSeconds = 3000, ExposeHeaders = new List<string> {"x-amz-server-side-encryption"} } } }; // Add the configuration to the bucket PutCORSConfiguration(configuration); // Retrieve an existing configuration configuration = GetCORSConfiguration(); // Add a new rule. configuration.Rules.Add(new CORSRule { Id = "CORSRule3", AllowedMethods = new List<string> { "HEAD" }, AllowedOrigins = new List<string> { "http://www.example.com" } }); // Add the configuration to the bucket PutCORSConfiguration(configuration); // Verify that there are now three rules configuration = GetCORSConfiguration(); Console.WriteLine(); Console.WriteLine("Expected # of rulest=3; found:{0}", configuration.Rules.Count); Console.WriteLine(); Console.WriteLine("Pause before configuration delete. To continue, click Enter..."); Console.ReadKey(); // Delete the configuration DeleteCORSConfiguration(); // Retrieve a nonexistent configuration configuration = GetCORSConfiguration(); Debug.Assert(configuration == null); } Console.WriteLine("Example complete."); } catch (AmazonS3Exception amazonS3Exception) { Console.WriteLine("S3 error occurred. Exception: " + amazonS3Exception.ToString()); Console.ReadKey(); } catch (Exception e) { Console.WriteLine("Exception: " + e.ToString()); Console.ReadKey(); } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } static void PutCORSConfiguration(CORSConfiguration configuration) { PutCORSConfigurationRequest request = new PutCORSConfigurationRequest { BucketName = bucketName, Configuration = configuration }; var response = client.PutCORSConfiguration(request); } static CORSConfiguration GetCORSConfiguration() { GetCORSConfigurationRequest request = new GetCORSConfigurationRequest { BucketName = bucketName }; var response = client.GetCORSConfiguration(request); var configuration = response.Configuration; PrintCORSRules(configuration); return configuration; } static void DeleteCORSConfiguration() { DeleteCORSConfigurationRequest request = new DeleteCORSConfigurationRequest { BucketName = bucketName }; client.DeleteCORSConfiguration(request); } static void PrintCORSRules(CORSConfiguration configuration) { Console.WriteLine(); if (configuration == null) { Console.WriteLine("\nConfiguration is null"); return; } Console.WriteLine("Configuration has {0} rules:", configuration.Rules.Count); foreach (CORSRule rule in configuration.Rules) { Console.WriteLine("Rule ID: {0}", rule.Id); Console.WriteLine("MaxAgeSeconds: {0}", rule.MaxAgeSeconds); Console.WriteLine("AllowedMethod: {0}", string.Join(", ", rule.AllowedMethods.ToArray())); Console.WriteLine("AllowedOrigins: {0}", string.Join(", ", rule.AllowedOrigins.ToArray())); Console.WriteLine("AllowedHeaders: {0}", string.Join(", ", rule.AllowedHeaders.ToArray())); Console.WriteLine("ExposeHeader: {0}", string.Join(", ", rule.ExposeHeaders.ToArray())); } } } }