메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

.NET용 AWS SDK를 사용하여 Cross-Origin 리소스 공유(CORS) 활성화

.NET용 AWS SDK를 사용하여 버킷에 대한 cross-origin 리소스 공유(CORS)를 관리할 수 있습니다. CORS에 대한 자세한 내용은 CORS(Cross-Origin Resource Sharing) 단원을 참조하십시오.

이 단원에서는 다음 표의 샘플 코드와 전체 예제 프로그램 목록을 제공합니다.

Cross-Origin 리소스 공유 관리

1

AmazonS3Client 클래스의 인스턴스를 만듭니다.

2

새로운 CORS 구성을 만듭니다.

3

기존 CORS 구성을 검색 및 수정합니다.

4

버킷에 구성을 추가합니다.

Cross-Origin 리소스 공유 메서드

AmazonS3Client()

App.config 파일에 정의된 자격 증명으로 AmazonS3Client를 생성합니다.

PutCORSConfiguration()

버킷에 적용되어야 하는 CORS 구성을 설정합니다. 지정된 버킷에 이미 구성이 있으면 새 구성이 기존 구성을 대체합니다.

GetCORSConfiguration()

지정된 버킷에 대한 CORS 구성을 검색합니다. 버킷에 구성이 설정되어 있지 않으면 응답의 Configuration 헤더가 null이 됩니다.

DeleteCORSConfiguration()

지정된 버킷에 대한 CORS 구성을 삭제합니다.

.NET용 AWS SDK API에 대한 자세한 내용은 .NET용 AWS SDK 사용 단원을 참조하십시오.

AmazonS3 클래스의 인스턴스 생성

다음 샘플은 AmazonS3Client 클래스의 인스턴스를 만듭니다.

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

버킷에 CORS 구성 추가

버킷에 CORS 구성을 추가하려면

  1. 규칙을 정의하는 CORSConfiguration 객체를 만듭니다.

  2. 버킷 이름과 CORS 구성을 제공하는 PutCORSConfigurationRequest 객체를 만듭니다.

  3. client.PutCORSConfiguration을 호출하여 버킷에 CORS 구성을 추가합니다.

다음 샘플은 CORSRule1 규칙과 CORSRule2 규칙을 만든 후 각 규칙을 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 메서드를 호출하여 버킷에 구성을 추가합니다.

다음 코드는 기존 구성을 가져온 후 NewRule ID로 새 규칙을 추가합니다.

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())); } } } }