HBOX Wiki

HBox API Spec

2014.02.21 23:48

호스트웨이 조회 수:7382

호스트웨이 웹 스토리지(HBox) 서비스

API Reference

Version:2014-02-21
Copyright:2014 호스트웨이아이디씨(주)

서문

호스트웨이 웹 스토리지 서비스란 웹을 통해 자료를 클라우드에 저장할 수 있게 해줍니다. 클라우드에 저장된 자료는 사용자가 허용하는 대상에게 웹을 통해 다운로드 됩니다. 클라우드에 저장되기 때문에 용량이나 대역폭의 제한이 전용 호스팅을 사용할 때 보다 월등히 높습니다. 데이터는 1개 이상의 복사본으로 저장장비 오류시 데이터가 유실 되지 않게 합니다.

이 문서는 호스트웨이 웹 스토리지 서비스가 제공하는 API(Application Programmable Interface)를 사용해서 데이터를 저장하고 통제하는 명령과 변수및 오류에대해 기술합니다. API는 REST(REpresental State Transfer)형식으로 제공됩니다.

서비스 구성요소

버킷(Bucket)이란?

버킷은 자료를 저장하는 도메인을 의미합니다. WSS는 자료를 저장할 때 hbox.a3c.co.kr 의 서브도메인을 만들수 있게 하는데 자료는 각각의 버킷안에서 고유한 이름을 가집니다.

오브젝트(Object)란?

오브젝트는 버킷 범위에서 각각 고유한 자료를 의미합니다. 오브젝트는 구분되며 HTTP Protocol로 전송되는 리퀘스트 헤더(Request Header)정보와 바디(Body)가 URL중 정해진 일부분을 키(Key)로 저장됩니다.

접근제어(ACL/Policy)이란?

API를 통해 버킷이나 오브젝트를 대상으로 리퀘스트를 보낼때 해당 리퀘스트의 인증값 및 헤더(Header)정보를 보고 AccessDenied 오류를 발생시킬지 여부를 설정 할 수 있습니다.

오브젝트 생애주기(Lifecycle)란?

API를 통해 업로드한 오브젝트에 생애주기를 설정하여 해당 주기가 만료되면 자동삭제되게 합니다.

타 사용자 과금(Request Payment)란?

오브젝트를 업로드/다운로드 할때 발생하는 비용을 버킷 소유자가 부담하는 것이 아닌 서비스 사용자가 부담 할 수 있게 설정할 수 있습니다.

로그(Logging)이란?

API사용 기록을 Web Access Log 형식으로 별도의 오브젝트를 자동 생성할 수 있게 설정 할 수 있습니다.

버젼(Version)이란?

동일한 오브젝트 키에 버젼 번호를 부여하여 각각의 버젼 번호별로 독립적으로 오브젝트를 업/다운로드 할 수 있습니다.

웹싸이트(Website)란?

지정한 버킷에 인덱스와 고유한 오류페이지 기능을 부여하여 가상 호스팅목적으로 사용할 수 있습니다.

버킷 명령들

버킷 목록 가져오기

아래 명령으로 버킷의 목록을 가져 올 수 있습니다.

METHOD/URL GET /
Header Host: hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
<ListAllMyBucketsResult xmlns="http://doc.s3.amazonaws.com/2006-03-01">
    <Owner>
        <ID>소유자 CanonicalId</ID>
        <DisplayName>소유자 이름</DisplayName>
    </Owner>
    <Buckets>
        <Bucket>
            <Name>버킷 이름</Name>
            <CreationDate>버킷 생성일</CreationDate>
        </Bucket>
    </Buckets>
</ListAllMyBucketsResult>

버킷 삭제하기

버킷을 삭제한다. 버킷내의 모든 오브젝트는 버킷이 삭제되기 전에 미리 삭제되어야 한다.
METHOD/URL DELETE / HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음
응답 XML:
응답 XML이 없음
요청 예제:
버킷 'test567856'을 삭제한다.
DELETE http://test567856.hbox.a3c.co.kr / HTTP/1.1
x-amz-date: Fri, 15 Jun 2012 01:48:51 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:380FLNw8GNwdDEtQiDkQtLIQ73Y=
Host: test567856.hbox.a3c.co.kr

응답 예제:

HTTP/1.1 200 OK
Date: Fri, 15 Jun 2012 01:48:50 GMT
x-amz-request-id: 4fda948217416a4614000056
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html; charset=utf-8

버킷 생애주기 삭제하기

버킷 생애주기를 삭제한다. 버킷 소유자 권한 또는 소유자로부터 넘겨 받은 권한이 필요하다. 버킷과 관련된 모든 생애주기가 삭제된다.

METHOD/URL DELETE /?lifecycle HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음
응답 XML:
응답 XML이 없음

요청 예제:

DELETE http://testtest99999.hbox.a3c.co.kr /?lifecycle HTTP/1.1
x-amz-date: Wed, 20 Jun 2012 08:00:32 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:jwIWynZxFjmIXfFuMzWcIdjcLh4=
Host: testtest99999.hbox.a3c.co.kr

응답 예제:

HTTP/1.1 200 OK
Date: Wed, 20 Jun 2012 08:00:30 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fe1831e64f8004c78000119
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html; charset=utf-8

버킷 Policy 삭제하기

버킷의 Policy를 삭제한다. DeletePolicy권한이 필요하고 버킷의 소유자 권한이 필요하다.

다음과 같은 에러가 있다. 403 Access denied error(DeletePolicy권한이 없을 경우) 405 Method Not Allowed error(버킷 소유자가 아닐경우) 204 No Content error(버킷에 Polciy가 없을 경우)

METHOD/URL DELETE /?policy HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음
응답 XML:
응답 XML이 없음

요청 예제:

DELETE http://test99999.hbox.a3c.co.kr /?policy HTTP/1.1
x-amz-date: Wed, 20 Jun 2012 08:05:51 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:YXCEDWTeXFbmVopwiyJCu5R2N+c=
Host: test99999.hbox.a3c.co.kr

응답 예제:

HTTP/1.1 200 OK
Date: Wed, 20 Jun 2012 08:05:48 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fe1845c64f8004c7800011d
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html; charset=utf-8

버킷 웹싸이트 삭제하기

버킷 웹싸이트 설정을 삭제한다. 버킷의 소유자 권한이 필요하거나 또는 소유자로 부터 허용 권한을 넘겨 받아야 한다.

다음과 같은 리턴 값이 있다. 200 OK(성공적으로 웹사이트를 삭제했을 경우) 404 error(버킷이 없을 경우)

METHOD/URL DELETE /?website HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음
응답 XML:
응답 XML이 없음

요청 예제:

DELETE http://test99999.hbox.a3c.co.kr /?website HTTP/1.1
x-amz-date: Wed, 20 Jun 2012 04:33:50 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:pSuRQZmi/q9iLzBgPbyP3yeAexk=
Host: test99999.hbox.a3c.co.kr

응답 예제:

HTTP/1.1 200 OK
Date: Wed, 20 Jun 2012 04:33:48 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fe152ac64f8004c780000e5
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html; charset=utf-8

버킷 목록 가져오기

버킷내의 오브젝트 리스트를 가져온다. 요청 파라미터를 사용해서 오브젝트 리스트의 일부만 가져올 수 있다. 오브젝트는 1000개 까지 가져올 수 있다. READ 권한이 필요하다.

METHOD/URL GET / HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값

파라미터:

delimiter 여러 키들를 특정 그룹으로 만드는 구분자이다. prefix와 delimiter 내의 문자열이 같은 모든 키들은 CommonPrefixes내에서 하나의 결과값으로 그룹지어 진다
marker 버킷내의 키를 지정해서 가져올 리스트의 시작을 나타내도록 한다.
max-keys 결과 body에 엄마만큼의 키값들이 포함될지를 나타낸다. 포함되지 않은 결과가 있을 경우 결과에 <isTruncated>true<isTruncated>가 포함된다. 기본값 1000
prefix 같은 prefix로 시작하는 키값들을 선택할 수 있다. 파일 시스템의 폴더처럼 그룹을 만드는데 사용할 수 있다. prefix와 delimiter를 함께 사용할 수 있다.
요청 XML:
요청 XML이 없음

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Owner>
        <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
        <DisplayName>Test Account</DisplayName>
    </Owner>
    <Buckets>
        <Bucket>
            <Name>testtest343</Name>
            <CreationDate>2012-06-14 09:24:47.464000</CreationDate>
        </Bucket>
        <Bucket>
            <Name>test77777</Name>
            <CreationDate>2012-06-14 09:08:02.291000</CreationDate>
        </Bucket>
        <Bucket>
            <Name>test4544</Name>
            <CreationDate>2012-06-14 09:38:57.317000</CreationDate>
        </Bucket>
        <Bucket>
            <Name>test88888</Name>
            <CreationDate>2012-06-14 08:08:43.563000</CreationDate>
        </Bucket>
        <Bucket>
            <Name>test99999</Name>
            <CreationDate>2012-06-14 07:02:29.931000</CreationDate>
        </Bucket>
        <Bucket>
            <Name>hanstest</Name>
            <CreationDate>2012-06-14 07:10:24.373000</CreationDate>
        </Bucket>
    </Buckets>
</ListAllMyBucketsResult>

요청 예제:

GET http://hbox.a3c.co.kr / HTTP/1.1
x-amz-date: Fri, 15 Jun 2012 05:40:16 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:2UNo9uvVyBAXtikPSS1tRhhE+Sc=
Host: hbox.a3c.co.kr

응답 예제:

HTTP/1.1 200 OK
Date: Fri, 15 Jun 2012 05:40:12 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fdacabc64f80042220000f8
Transfer-Encoding: chunked
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Owner>
        <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
        <DisplayName>Test Account</DisplayName>
    </Owner>
    <Buckets>
        <Bucket>
            <Name>testtest343</Name>
            <CreationDate>2012-06-14 09:24:47.464000</CreationDate>
        </Bucket>
        <Bucket>
            <Name>test77777</Name>
            <CreationDate>2012-06-14 09:08:02.291000</CreationDate>
        </Bucket>
        <Bucket>
            <Name>test4544</Name>
            <CreationDate>2012-06-14 09:38:57.317000</CreationDate>
        </Bucket>
        <Bucket>
            <Name>test88888</Name>
            <CreationDate>2012-06-14 08:08:43.563000</CreationDate>
        </Bucket>
        <Bucket>
            <Name>test99999</Name>
            <CreationDate>2012-06-14 07:02:29.931000</CreationDate>
        </Bucket>
        <Bucket>
            <Name>hanstest</Name>
            <CreationDate>2012-06-14 07:10:24.373000</CreationDate>
        </Bucket>
    </Buckets>
</ListAllMyBucketsResult>

버킷 접근관리 설정 가져오기

버킷의 접근관리 설정을 가져온다.
METHOD/URL GET /?acl HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
    <AccessControlPolicy>
        <Owner>
            <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
            <DisplayName>Test Account</DisplayName>
        </Owner>
        <AccessControlList>
            <Grant>
                <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
                    <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
                    <DisplayName>Test Account</DisplayName>
                </Grantee>
                <Permission>FULL_CONTROL</Permission>
            </Grant>
        </AccessControlList>
    </AccessControlPolicy>

요청 예제:

GET http://test99999.hbox.a3c.co.kr /?acl HTTP/1.1
x-amz-date: Fri, 15 Jun 2012 08:15:12 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:pqeCTcZRVEJ31o1+rAtylHM32bg=
Host: test99999.hbox.a3c.co.kr

음답 예제:

HTTP/1.1 200 OK
Date: Fri, 15 Jun 2012 08:15:08 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fdaef0c64f80042220000fa
Transfer-Encoding: chunked
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy>
    <Owner>
        <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
        <DisplayName>Test Account</DisplayName>
    </Owner>
    <AccessControlList>
    <Grant>
    <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
        <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
        <DisplayName>Test Account</DisplayName>
    </Grantee>
    <Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>

버킷 생애주기 설정 가져오기

버킷의 생애주기 설정을 가져온다. 버킷 소유권한이 필요하다.

METHOD/URL GET /?lifecycle HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
    <LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
      <Rule>
        <ID>4fdecf6564f8004c77000048</ID>
        <Prefix>test</Prefix>
        <Status>Enabled</Status>
        <Expiration>
          <Days>20</Days>
        </Expiration>
      </Rule>
    </LifecycleConfiguration>

요청 예제:

GET http://test88888.hbox.a3c.co.kr /?lifecycle HTTP/1.1
x-amz-date: Mon, 18 Jun 2012 06:50:14 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:OOyV+xiMq4ZdZYLC2sK8zuqQogI=
Host: test88888.hbox.a3c.co.kr

응답 예제:

HTTP/1.1 200 OK
Date: Mon, 18 Jun 2012 06:50:10 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fdecfa264f8004c78000048
Transfer-Encoding: chunked
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Rule>
    <ID>4fdecf6564f8004c77000048</ID>
    <Prefix>test</Prefix>
    <Status>Enabled</Status>
    <Expiration>
      <Days>20</Days>
    </Expiration>
  </Rule>
</LifecycleConfiguration>

버킷 Region 설정 가져오기

버킷의 리젼 설정을 가져온다.

METHOD/URL GET /?location HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
    <LocationConstraint xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
        None
    </LocationConstraint>

요청 예제:

GET http://test99999.hbox.a3c.co.kr /?location HTTP/1.1
x-amz-date: Fri, 15 Jun 2012 08:15:12 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:s6KI0tlMAlHLVdZSfyXLuExgGyY=
Host: test99999.hbox.a3c.co.kr

응답 예제:

HTTP/1.1 200 OK
Date: Fri, 15 Jun 2012 08:15:09 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fdaef0d64f80042230000de
Transfer-Encoding: chunked
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<LocationConstraint xmlns="http://s3.amazonaws.com/doc/2006-03-01/">None</LocationConstraint>

버킷 로깅 설정 가져오기

버킷의 로깅 설정을 가져온다.

METHOD/URL GET /?logging HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
    <BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01/">
        <LoggingEnabled>
            <TargetBucket>test99999</TargetBucket>
            <TargetPrefix>test99999</TargetPrefix>
            <TargetGrants></TargetGrants>
        </LoggingEnabled>
    </BucketLoggingStatus>

요청 예제:

GET http://test99999.hbox.a3c.co.kr /?logging HTTP/1.1
x-amz-date: Fri, 15 Jun 2012 08:46:44 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:9BdFdtcqeCCaIMmb+yzZTy0MHfM=
Host: test99999.hbox.a3c.co.kr

응답 예제:

HTTP/1.1 200 OK
Date: Fri, 15 Jun 2012 08:46:40 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fdaf67064f80042230000eb
Transfer-Encoding: chunked
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01/">
    <LoggingEnabled>
        <TargetBucket>test99999</TargetBucket>
        <TargetPrefix>test99999</TargetPrefix>
        <TargetGrants></TargetGrants>
    </LoggingEnabled>
</BucketLoggingStatus>

버킷 버젼 목록 가져오기

버킷 내 오브젝트들의 모든 버전 목록을 가져온다.

METHOD/URL GET /?versions HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값

파라미터:

delimiter 여러 키들를 특정 그룹으로 만드는 구분자이다. prefix와 delimiter 내의 문자열이 같은 모든 키들은 CommonPrefixes내에서 하나의 결과값으로 그룹지어 진다
key-marker 버킷내의 키를 지정해서 가져올 리스트의 시작을 나타내도록 한다.
max-keys 결과 body에 얼마만큼의 키값들이 포함될지를 나타낸다. 포함되지 않은 결과가 남아 있을 경우 결과에 <isTruncated>true<isTruncated>가 포함된다.
prefix 같은 prefix로 시작하는 키값들을 선택할 수 있다. 파일 시스템의 폴더처럼 그룹을 만드는데 사용할 수 있다. prefix와 delimiter를 함께 사용할 수 있다.
version-id-marker 오브젝트 버전을 지정해서 가져올 리스트의 시작을 나타낸다.
요청 XML:
요청 XML 없음

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
<ListVersionsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
        <Name>test99999</Name>
        <Prefix />
        <KeyMarker />
        <MaxKeys>1000</MaxKeys>
        <IsTruncated>False</IsTruncated>
    <Version>
        <Key>artifacts.xml</Key>
        <VersionId>null</VersionId>
        <IsLatest>True</IsLatest>
        <LastModified>2012-06-14T09:46:56.758Z</LastModified>
        <ETag>ed1fc19e3afdb3d4ed2d13d5bac1a8ef</ETag>
        <Size>182508</Size>
        <StorageClass>STANDARD</StorageClass>
        <Owner>
            <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
            <DisplayName>Test Account</DisplayName>
        </Owner>
    </Version>
    <Version>
        <Key>eclipse.ini</Key>
        <VersionId>null</VersionId>
        <IsLatest>True</IsLatest>
        <LastModified>2012-06-14T07:03:49.440Z</LastModified>
        <ETag>5dd520bd0132bd1f2054ccf161dcf468</ETag>
        <Size>442</Size>
        <StorageClass>STANDARD</StorageClass>
        <Owner>
            <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
            <DisplayName>Test Account</DisplayName>
        </Owner>
    </Version>
    <Version>
        <Key>eclipsec.exe</Key>
        <VersionId>null</VersionId>
        <IsLatest>True</IsLatest>
        <LastModified>2012-06-14T07:03:57.790Z</LastModified>
        <ETag>245835b1482085a0eb6a66df7f52801b</ETag>
        <Size>17920</Size>
        <StorageClass>STANDARD</StorageClass>
        <Owner>
            <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
            <DisplayName>Test Account</DisplayName>
        </Owner>
    </Version>
    <Version>
        <Key>index.html</Key>
        <VersionId>null</VersionId>
        <IsLatest>True</IsLatest>
        <LastModified>2012-06-14T07:08:38.722Z</LastModified>
        <ETag>5d41402abc4b2a76b9719d911017c592</ETag>
        <Size>5</Size>
        <StorageClass>STANDARD</StorageClass>
        <Owner>
            <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
            <DisplayName>Test Account</DisplayName>
        </Owner>
    </Version>
    <Version>
        <Key>notice.html</Key>
        <VersionId>null</VersionId>
        <IsLatest>True</IsLatest>
        <LastModified>2012-06-14T09:02:33.943Z</LastModified>
        <ETag>3a09dda261dd572c85211d03ae12388e</ETag>
        <Size>8951</Size>
        <StorageClass>STANDARD</StorageClass>
        <Owner>
            <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
            <DisplayName>Test Account</DisplayName>
        </Owner>
    </Version>
    <Version>
        <Key>test/</Key>
        <VersionId>null</VersionId>
        <IsLatest>True</IsLatest>
        <LastModified>2012-06-14T07:02:48.177Z</LastModified>
        <ETag>d41d8cd98f00b204e9800998ecf8427e</ETag>
        <Size>0</Size>
        <StorageClass>STANDARD</StorageClass>
        <Owner>
            <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
            <DisplayName>Test Account</DisplayName>
        </Owner>
    </Version>
    <Version>
        <Key>test2/</Key>
        <VersionId>null</VersionId>
        <IsLatest>True</IsLatest>
        <LastModified>2012-06-14T08:58:31.494Z</LastModified>
        <ETag>d41d8cd98f00b204e9800998ecf8427e</ETag>
        <Size>0</Size>
        <StorageClass>STANDARD</StorageClass>
        <Owner>
            <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
            <DisplayName>Test Account</DisplayName>
        </Owner>
    </Version>
    </ListVersionsResult>

요청 예졔:

GET http://test99999.hbox.a3c.co.kr /?versions&prefix=index HTTP/1.1
Host: test99999.hbox.a3c.co.kr
Accept-Encoding: identity
Date: Tue, 19 Jun 2012 04:34:03 GMT
Content-Length: 0
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:gtECehL4rGzTNxni4m6hGdHTYsU=

응답 예제:

HTTP/1.1 200 OK
Date: Tue, 19 Jun 2012 04:34:02 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fe0013a64f8004c7800006e
Transfer-Encoding: chunked
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<ListVersionsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Name>test99999</Name>
    <Prefix>index</Prefix>
    <KeyMarker />
    <MaxKeys>1000</MaxKeys>
    <IsTruncated>False</IsTruncated>
    <Version>
        <Key>index.html</Key>
        <VersionId>null</VersionId>
        <IsLatest>True</IsLatest>
        <LastModified>2012-06-14T07:08:38.722Z</LastModified>
        <ETag>5d41402abc4b2a76b9719d911017c592</ETag>
        <Size>5</Size>
        <StorageClass>STANDARD</StorageClass>
        <Owner>
            <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
            <DisplayName>Test Account</DisplayName>
        </Owner>
    </Version>
</ListVersionsResult>

버킷 Policy 설정 가져오기

버킷의 Policy 설정을 가져온다. 해당 버킷의 GetPolicy 권한을 갖고 있거나 버킷의 소유자 권한이 있어야 한다. GetPolicy 권한이 없을 경우 403 Access Denied 에러를 보낸다.

METHOD/URL GET /?policy HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음
응답 XML:
응답 XML이 없음

요청 예제:

GET http://test99999.hbox.a3c.co.kr /?policy HTTP/1.1
x-amz-date: Tue, 19 Jun 2012 09:18:51 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:J9QsoZ+2WlPBo8E61xh/Huni7ng=
Host: test99999.hbox.a3c.co.kr

응답 예졔:

   HTTP/1.1 200 OK
   Date: Tue, 19 Jun 2012 09:18:46 GMT0
   Server: Apache/2.2.16 (Debian)
   x-amz-request-id: 4fe043f664f8004c780000d9
   Transfer-Encoding: chunked
   Content-Type: application/json

.. code-block:: json

   {"Id": "Policy1340095795095",
    "Statement": [{"Resource": "arn:aws:s3:::test99999/*",
                   "Effect": "Deny", "Sid": "Stmt1340093832049",
                   "Action": ["s3:DeleteBucket"],
                   "Condition": {},
                   "Principal": {"CanonicalUser": ["*"]}}]}

버킷 Request Payment설정 가져오기

Request payment 설정을 가져온다.

METHOD/URL GET ?requestPayment HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
<RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Payer>Requester</Payer>
</RequestPaymentConfiguration>

요청 예제:

GET http://test99999.hbox.a3c.co.kr /?requestPayment HTTP/1.1
x-amz-date: Fri, 15 Jun 2012 09:31:51 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:YcjSJpuOEHafFTEYp9gfnmF8cKA=
Host: test99999.hbox.a3c.co.kr

응답 예제:

HTTP/1.1 200 OK
Date: Fri, 15 Jun 2012 09:31:48 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fdb010464f80042230000fc
Transfer-Encoding: chunked
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Payer>Requester</Payer>
</RequestPaymentConfiguration>

버킷 버젼 설정 가져오기

버킷의 버전 설정을 가져온다. 버킷 소유자 권한이 필요하다.

METHOD/URL GET /?versioning HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Status>Enabled</Status>
    <MfaDelete>Disabled</MfaDelete>
</VersioningConfiguration>

요청 예제:

GET http://test99999.hbox.a3c.co.kr /?versioning HTTP/1.1
x-amz-date: Mon, 18 Jun 2012 04:40:23 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:KChVFHqyBFaGYOdHENZPKw4uc1E=
Host: test99999.hbox.a3c.co.kr

응답 예제:

HTTP/1.1 200 OK
Date: Mon, 18 Jun 2012 04:40:20 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fdeb13464f8004c78000033
Transfer-Encoding: chunked
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
        <Status>Enabled</Status>
        <MfaDelete>Disabled</MfaDelete>
</VersioningConfiguration>

버킷 웹싸이트 가져오기

웹사이트 설정 값을 가져온다. 버킷의 소유자 권한이 필요하다.

METHOD/URL GET /?website HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
<WebsiteConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <IndexDocument>
        <Suffix>index.html</Suffix>
    </IndexDocument>
    <ErrorDocument>
        <Key>404.html</Key>
    </ErrorDocument>
</WebsiteConfiguration>

요청 예제:

GET http://test99999.hbox.a3c.co.kr /?website HTTP/1.1
x-amz-date: Mon, 18 Jun 2012 02:07:40 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:U75xuINVYq7gQ5ejRFrtQTiovHU=
Host: test99999.hbox.a3c.co.kr
Connection: Keep-Alive

응답 예제:

HTTP/1.1 200 OK
Date: Mon, 18 Jun 2012 02:07:39 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fde8d6b64f8004c7700002c
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<WebsiteConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
        <IndexDocument>
            <Suffix>index.html</Suffix>
        </IndexDocument>
        <ErrorDocument>
            <Key>404.html</Key>
        </ErrorDocument>
</WebsiteConfiguration>

버킷 멀티파트 업로드 목록 가져오기

진행중인 멀티파트 업로드 리스트들을 되돌려준다. 진행중인 멀티마트 업로드는 멀티파트를 시작하고 나서, 끝나지 않거나 중단된 멀티파트 업로드를 의미한다. 디폴트로 1000개를 되돌려 주며, 최대 갯수도 1000개이다. max-uploads 파라미터를 사용해서, 얻고자 하는 갯수만큼 목록을 가져올 수 있다. Key에 의해서 정렬된 업로드를 되돌려 받는다. 같은 오브젝트 키를 사용해서 업로드된 하나이상의 멀티파트들이 있다면, 첫번째 키로 정렬된 업로드를 되돌려 받는다.

METHOD/URL GET /?uploads HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값

파라미터:

이름 설명 타입 필요여부
delimiter 여러 키들를 특정 그룹으로 만드는 구분자이다. prefix와 delimiter내의 문자열이 같은 모든 키들은 CommonPrefixes내에서 하나의 결과값으로 그룹지어 진다. String No
max-uploads 되돌려 받고 싶은 멀티파트 업로드의 수를 성정할 수 있다. 디폴트는 1,000. Integer No
key-marker upload-id-marker와 같이 사용한며, 리스트 시작시점의 멀티파트 업로드를 나타낸다. upload-id-marker가 명시되지 않았다면, 명시된 key-marker보다 큰 키들이 리스트에 포함될 것이다. upload-id-marker가 명시되었다면, 명시된 key-marker보다 큰 키들이 포한된 리스트에서 upload-id-marker보다 큰 키들만 리스트에 포함될 것이다. String No
prefix 같은 prefix로 시작하는 키값들을 선택할 수 있다. 파일 시스템의 폴더처럼 그룹을 만드는데 사용할 수 있고, prefix와 delimiter 를 함께 사용할 수 있다. String No
upload-id-maker key-marker와 같이 사용되며, 리스트 시작시점의 멀티파트 업로드를 나타낸다. key-marker가 명시되지 않았다면, upload-id-marker 파라미터는 무시한다. 반면에 명시되었다면, 명시된 key-marker보다 큰 키들이 포한된 리스트에서 upload-id-marker보다 큰 키들만 리스트에 포함될 것이다. String No
요청 XML:
요청 XML이 없음.

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
<ListMultipartUploadsResult>
        <Bucket>multipart</Bucket>
        <Prefix/>
        <KeyMarker/>
        <MaxUploads/>
        <IsTruncated>False</IsTruncated>
        <Upload>
                <Key>multipart_02</Key>
                <UploadId>500500600cd20b0e1c000003</UploadId>
                <Initiator>
                        <ID>65a011a29cdf8ec533ec3d1ccaae921c</ID>
                        <DisplayName>None</DisplayName>
                </Initiator>
                <Owner>
                        <ID>65a011a29cdf8ec533ec3d1ccaae921c</ID>
                        <DisplayName>None</DisplayName>
                </Owner>
                <StorageClass>STANDARD</StorageClass>
                <Initiated>2012-07-17T06:04:16.000Z</Initiated>
        </Upload>
        <Upload>
                <Key>multipart_10</Key>
                <UploadId>4fffc7230cd20b25fc000089</UploadId>
                <Initiator>
                        <ID>65a011a29cdf8ec533ec3d1ccaae921c</ID>
                        <DisplayName>None</DisplayName>
                </Initiator>
                <Owner>
                        <ID>65a011a29cdf8ec533ec3d1ccaae921c</ID>
                        <DisplayName>None</DisplayName>
                </Owner>
                <StorageClass>STANDARD</StorageClass>
                <Initiated>2012-07-13T06:58:43.000Z</Initiated>
        </Upload>
</ListMultipartUploadsResult>

응답 elements:

이름 설명 타입
ListPartsResult Bucket, KeyMarker, UploadIdMarker, NextKeyMarker, NextUploadIdMarker, MaxUploads, Delimiter, Prefix, CommonPrefixes, IsTruncated 을 감싸는 노드 Container
Bucket 멀티파트 업로드가 시작된 버킷의 이름 String
KeyMarker 리스트의 시작시점을 설정하는 키 String
UploadIdMarker 리스트의 시작시점을 설정하는 UploadId String
NextKeyMarker 리스트가 중단됐을때, 다음 요청에서 key-marker 요청 파라미터를 위해 사용될 값임을 나타낸다. String
NextUploadIdMarker 리스트가 중단됐을때, 다음 요청에서 upload-id-marker 요청 파라미터를 위해 사용될 값임을 나타낸다. String
MaxUploads 응답 리스트에 포함 될 수 있는 멀티파트 업로드의 최대 갯수 Integer
IsTruncated 되돌려 받은 멀티파트 업로드 리스트의 수보다 더 많은 파트들의 존재유무. True 이면 더 많이 존재. False 이면 되돌려 받은 리스트의 수가 전체 갯수임 Boolean
Upload 특정 멀티파트 업로드와 연관된 요소들을 포함. Key, UploadId, InitiatorOwner, StorageClass, Initiated 을 감싸는 노드. Container
Key 멀티파트 업로드가 시작된 오브젝트 키 Integer
UploadId 멀티파트 업로드를 식별하는 Upload ID Integer
Initiator 멀티파트 업로드를 시작한 사용자의 정보를 포함하고, Owner 요소와 같은 정보를 포함한다. ID와 DisplayName을 감싸는 노드. Container
ID CanonicalUserID Container
DisplayName 주체자 이름 String
Owner 멀티파트 업로드를 완료해서 만들어진 오브젝트의 소유자. Container
StorageClass 업로드된 오브젝트가 저장된 저장소 종류 (STANDARD 혹은 REDUCED_REDUNDANCY) String
Initiated 멀티파트 업로드를 시작한 날짜와 시간. Date
ListMultipartUploadsResult.Prefix 요청 파라미터에 Prefix가 제공되었을 때, 명시된 Prefix를 포함한다. String
Delimiter 요청 파라미터에 명시된 delimiter가 있으면 포함하고, 없다면 노드 자체가 포함 안됨. String
CommonPrefixes 사용자가 delimiter 파라미터를 명시한다면, delimiter를 포함하는 각각의 구별되는 키인 prefix를 되돌려 받는다. Container
CommonPrefixes.Prefix 요청 파라미터에 Prefix가 포함되지 않는다면, 이 요소는 delimiter 성격의 첫번째 존재를 예견하는 키의 부분 문자열을 나타낸다. 요청 파라미터에 Prefix가 포함되어 있다면, 이 요소는 prefix 이후에 delimiter의 첫번째 존재를 시작하는 키의 부분 문자열을 나타낸다. String

특정 에러 코드:

에러코드 설명 HTTP 상태코드
NoSuchUpload 명시된 멀티파트 업로드가 존재 하지 않거나, 업로드된 아이디가 불분명하거나, 또는 삭제되었거나 완료된 멀티파트 오브젝트일 경우에 이 에러코드를 러턴한다. 404 Not Found

버킷 만들기

PUT 명령으로 새로운 버킷을 만든다.

METHOD/URL PUT / HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음
응답 XML:
응답 XML이 없음
요청 예제:
'test567856'이라는 버킷을 만든다.
PUT http://test567856.hbox.a3c.co.kr / HTTP/1.1
x-amz-date: Thu, 14 Jun 2012 09:58:10 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:GYObTXdb7sda/rvcvXBZ21hhSB4=
Host: test567856.hbox.a3c.co.kr
Content-Length: 0

응답 예제:

HTTP/1.1 200 OK
Date: Thu, 14 Jun 2012 09:58:06 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fd9b5ae64f80042220000bf
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html; charset=utf-8

버킷 접근권한 설정

이 동작은 access control lists(ACL) 을 사용하여 기존에 존재하는 버킷에 권한 설정을 할 수 있게 해준다. 버킷 acl 설정을 위해서는 WRITE_ACP 권한을 필요로 한다. 버킷 ACL 설정은 두가지 방법을 사용해서 버킷의 권한을 설정할 수 있다. 1. request body 에 명시. 2. request header 에 권한 명시.

METHOD/URL PUT /?acl HTTP/1.1
Header Host: bucketname.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터를 사용하지 않는다.
요청 header 상세:

일반 적인 request 헤더에 다음을 추가 적으로 사용할 수 있다. 1. canned ACL 명시 하거나 권한을 수여할 대상자에 대한 권한 설정 명시.

canned ACL 은 미리 정의를 해놓은 ACL 설정이다. 각 canned ACL 는 권한 수여자와 권한에 대해 미리 정의되어 있다. 헤더에 canned ACL 을 사용하는 경우 다른 ACL 에 대해서 헤더에 명시 할 수 없다.

Name Description
x-amz-acl canned ACL 을 사용하여 버킷 ACL 명시 사용가능 값: (private | public-read| public-read-write | authenicated-read) 기본값: private

================start ghchoi: 이거는 아직 구현 되지 않은 사항입니다. ==================================================

  1. 버킷에 개별 적인 접근 권한을 부여 하기를 원한다면 x-amz-grant-permission 을 헤더에 추가 하여 사용 할 수 있다. 이 부분을 헤더에 추가 하게 되면 x-amz-acl 은 사용할 수 없다.
Name Description
x-amz-grant-read 설정한 수령자에 대한 read 권한 부여
x-amz-grant-write 설정한 수령자에 대한 write 권한 (오브젝트 생성,덮어쓰기,삭제)
x-amz-grant-read-acp 설정한 수령자에 대한 버킷 ACL read 권한 부여
x-amz-grant-write-acp 설정한 수령자에 대한 버킷 ACL write 권한 부여
x-amz-grant-full-control 설정한 수령자에 대해 위 4가지 권한 전부 부여

위 각 헤더는 콤마 구분자로 수령자를 추가 할 수 있다. - emailAddress : hs2 account 에 대한 이메일 값 - id: hs2 account 에 대한 canonical user id - uri: hs2 에 미리 정의된 그룹에 대해 권한을 부여하는 경우

예) x-amz-grant-read: uri="http://acs.amazonaws.com/groups/s3/LogDelivery", emailAddress="ghchoi@hostway.com", emailAddress="thkim@hostway.com"

================end ghchoi: 이거는 아직 구현 되지 않은 사항입니다. ==================================================

요청 XML:

<?xml version="1.0" encoding="utf-8"?>
<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
        <Owner>
                <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
                <DisplayName>Test Account</DisplayName>
        </Owner>
        <AccessControlList>
                <Grant>
                        <Grantee xsi:type="CanonicalUser" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                                <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
                        </Grantee>
                        <Permission>FULL_CONTROL</Permission>
                </Grant>
                <Grant>
                        <Grantee xsi:type="CanonicalUser" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                                <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
                        </Grantee>
                        <Permission>WRITE</Permission></Grant>
                <Grant>
                        <Grantee xsi:type="CanonicalUser" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                                <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
                        </Grantee>
                        <Permission>READ</Permission>
                </Grant>
        </AccessControlList>
</AccessControlPolicy>

요청 elements:

Name Description
AccessControlList AccessControlPolicy Grant,Grantee,Permission 을 감싸는 노드 전체 노드를 감싸는 노드
DisplayName 버킷 주인의 네임
Grant Grantee 와 Permission 을 감싸는 노드
Grantee 수령자에 대한 type 정의 (위의 x-amz-grant-permission 쪽 참고)
ID 버킷 주인의 아이디 거나 수령자의 아이디
Owner 버킷 주인의 id 와 name 을 감싸는 노드
Permission 설정한 수령자에 대한 권한 부여 (FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP)
Grantee 값은 세가지로 정의 된다.
  • CanonicalUser Id
  • Customer email
  • hs2 에서 정의한 그룹 (예: LogDelivery)

예) CanonicalUser Id

<Grantee xsi:type="CanonicalUser" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ID>ID</ID>
  <DisplayName>ghchoi@hostway.com</DisplayName>
</Grantee>

예) Email Address
<Grantee xsi:type="AmazonCustomerByEmail" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <EmailAddress>ghchoi@hostway.com</EmailAddress>
</Grantee>

예) Group
<Grantee xsi:type="Group" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <URI>http://acs.amazonaws.com/groups/s3/LogDelivery<URI>
</Grantee>
응답 XML:
응답 xml 없음.

응답 헤더 :

HTTP/1.1 200 OK
Date: Tue, 19 Jun 2012 07:15:39 GMT
Content-Length: 0
Content-Type: text/html; charset=utf-8
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fe0271b64f8004c780000b3

버킷 생애주기 설정

당신의 버킷 의 생애주기 관련 설정을 세팅한다. 만약 이미 동일한 설정이 존재하면 그것을 대체한다. 이 기능은 버킷에 저장된 오브젝트를 일정 주기가 되어 필요 없는 경우 자동 삭제르 원할 때 사용되는 기능이다. 예를 들어 로그의 경우 한달 정도의 로그만 필요한 경우 생애주기를 한달로 설정하게 되면 한달이 지난 로그의 경우 자동 삭제 되게 처리를 할 수 있다. 기본적으로 버킷 주인은 이 설정에 대한 권한을 기본 적으로 부여받고,다른 사람에게 권한을 줄수 도 있다. 최대 설정은 100까지 할 수 있다. 버킷에 있는 prefix 설정에 맞는 오브젝트를 만료일에 삭제를 시킨다. 버킷의 생애주기는 버킷내의 오브젝트 생성일을 기준으로 expiration day 를 더한 다음날 (시간은 정책에 따라 결정됨) 에 적용된다. 예) 생성일 2012.4.2 일 경우 Expiration day가 3일 이면 2012.4.6 일 에 적용됨. * 만약 당신이 버킷에 버전닝을 해놓은 상태라면 (활성화 or 중단) 생애주기 설정을 할 수 없다.

METHOD/URL PUT /?lifecycle HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음

요청 헤더:

이름 설명 필요 여부
Content-MD5 데이터에 대한 128비트 다이제스트 값으로 base64인코딩 되어 있다. 메세지 무결성 확인을 위해 반드시 사용되야 한다. No
Content-Length body 길이. No
요청 XML:
Create 인 경우:
    <?xml version="1.0"?>
    <LifecycleConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Rule>
        <Prefix>log/</Prefix>
        <Status>Enabled</Status>
        <Expiration>
          <Days>20</Days>
        </Expiration>
      </Rule>
    </LifecycleConfiguration>

Update 인 경우:
<?xml version="1.0"?>
    <LifecycleConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Rule>
        <ID>4fe0356964f8004c780000cf</ID>
        <Prefix>test/log</Prefix>
        <Status>Enabled</Status>
        <Expiration>
          <Days>20</Days>
        </Expiration>
      </Rule>
    </LifecycleConfiguration>

요청 Elements:

Name Description
LifecycleConfiguration 최대 100개의 생애주기 규칙을 감싸는 노드
Rule 생이주기 룰에 대한 속성을 감싸는 노드
ID 생애주기 룰을 생성하면 얻는 값이고, 업데이트와 삭제시 사용된다.
Prefix 생애주기 룰을 적용하고 싶은 오브젝트의 접두사. Prefix 지정안하면 모든 오브젝트를 룰에 적용 시킴
Status 룰 적용 여부 (Enabled | Disabled)
Expiration 오브젝트를 만료할 날짜 속성을 감싸는 노드
Days 만료일 단위는 day 이고 0 이 아닌 올바른 int 값 이여야 함
응답 XML:
응답 xml 없음

응답 헤더:

HTTP/1.1 200 OK
Date: Tue, 19 Jun 2012 08:10:19 GMT
Content-Length: 0
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fe033eb64f8004c780000bc
** 주의 사항:
  1. 만약 당신이 버킷에 버전닝을 해놓은 상태라면 (활성화 or 중단) 생애주기 설정을 할 수 없다.
  2. Prefix 를 비워서 보내는 경우 버킷안의 모든 오브젝트에 대해서 생애주기 설정이 적용된다.

버킷 로그 설정

이 API 는 버킨에 로깅 관련 정보를 세팅하고 다른 사람에게 읽고 수정할 수 있는 권한을 설정 할 수 있는 PUT 동작이다. 버킷 주인은 기본적으로 모든 로그에 대한 전체 권한이 주어지고 다른 사람에게 Grantee 요청을 사용해서 권한을 줄 수 있다. 이 설정을 하면 이 버킷의 오브젝트에 해당하는 서버 관련 로그를 지정한 타켓 버킷의 해당 prefix 에 저장이 된다.

METHOD/URL PUT /?logging HTTP/1.1
Header Host: bucketname.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터를 없음.

요청 XML:

<?xml version="1.0" encoding="utf-8"?>
<BucketLoggingStatus xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
        <LoggingEnabled>
                <TargetBucket>ghchoitest</TargetBucket>
                <TargetPrefix>log</TargetPrefix>
        </LoggingEnabled>
</BucketLoggingStatus>

요청 elements:

Name Description
BucketLoggingStatus 로깅 상태 정보를 감싸는 노드
EmailAddress 로그 권한을 수령할 사람의 이메일 주소
Grant Grantee 와 Permission 을 감싸는 노드
Grantee 수령자에 대한 type 정의 (위의 아래 Grantee Value 쪽 참고)
LoggingEnabled 로깅 정보를 감싸는 노드
Permission 설정한 수령자에 대한 권한 부여 (FULL_CONTROL, WRITE, READ)
TargetBucket hs2 서버 로그가 저장되기를 원하는 버킷 이름
TargetGrants Grant 정보를 감싸는 노드
TargetPrefix 로그파일이 저장될 키의 prefix

Grantee 값은 세가지로 정의 된다. - CanonicalUser Id - Customer email - hs2 에서 정의한 그룹 (예: LogDelivery)

예) CanonicalUser Id

<Grantee xsi:type="CanonicalUser" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ID>ID</ID>
  <DisplayName>ghchoi@hostway.com</DisplayName>
</Grantee>

예) Email Address
<Grantee xsi:type="AmazonCustomerByEmail" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <EmailAddress>ghchoi@hostway.com</EmailAddress>
</Grantee>

예) Group
<Grantee xsi:type="Group" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <URI>http://acs.amazonaws.com/groups/s3/LogDelivery<URI>
</Grantee>
응답 XML:
응답 xml 없음.

응답 Header:

HTTP/1.1 200 OK
Date: Thu, 21 Jun 2012 04:39:21 GMT
Content-Length: 0
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fe2a57964f8004c78000173

버킷 Policy 설정

이 API는 버킷 Policy 를 세팅하는 Put 동작이다. 버킷 Policy는 해당 버킷에 특정 사용자 또는 모든 사용자에 대해서 특정 동작을 허락하거나 막는 역할을 할 수 있다. 버킷 Policy 는 Access policy language를 사용하여 설정을 한다. 이 API 를 사용하기 위해서는 버킷 주인 이거나 버킷 주인으로 부터 PutPolicy 에 대한 권한을 부여 받아 야만 사용가능 하다. 권한이 없는 경우는 403 에러를 리턴 받는다.

METHOD/URL PUT /?policy HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음

요청 XML:

{
  "Id": "Policy1340255710151",
  "Statement": [
    {
      "Sid": "Stmt1340255707364",
      "Action": [
        "s3:DeleteObject"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::ghchoitest/*",
      "Principal": {
         "CanonicalUser": [
          "*"
        ]
      }
    }
  ]
}
응답 XML:
응답 xml 없음.

응답 Header:

HTTP/1.1 200 OK
Date: Fri, 22 Jun 2012 01:17:12 GMT
Content-Length: 0
x-amz-request-id: 4fe3c79864f8004c7800017f

버킷 리퀘스트 페이먼트 설정

이 API 는 리퀘스트 페이먼트 의 리소스를 세팅하는 put 동작을 수행한다. 기본적으로 버킷 주인이 버킷의 다운로드에 대한 과금을 지불하지만 이 설정을 통해서 다운로드한 사람에게 다운로드에 대한 과금을 지불 하게 설정 할 수 있다.이 설정은 버킷 주인만이 설정 가능하다.

METHOD/URL PUT /?requestPayment HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음

요청 XML:

<RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
        <Payer>Requester</Payer>
</RequestPaymentConfiguration>

요청 elements:

Name Description
RequestPaymentConfiguration Payer 를 감싸는 노드
Payer 과금에 대한 지불할 대상. (Requester | BucketOwner)
응답 XML:
응답 xml 없음.

응답 Header:

HTTP/1.1 200 OK
Content-Length: 0
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fe1607764f8004c770000e8

버킷 버젼 설정

이 API 는 기존 사용되는 버킷에 버전을 설정하는 put 동작이다. 이 설정을 세팅하기 위해서는 버킷 주인만이 설정 가능하다. 버저닝은 오브젝트의 내용을 버전별로 관리를 해주기 때문에 실수로 인해 오브젝트 내용이 변경된 경우 손쉽게 복구 할 수 있게 해주는 기능이다.

버킷에 버전 정보 세팅은 두가지 상태 값을 세팅 할 수 있다.

Enabled (활성화) : 버킷 안에 존재하는 오브젝트에 대한 버전닝을 활성화 시키고 각 오브젝트에 유니크한 버전 id를 할당 한다. Suspended(중지) : 버전닝을 중단 시키고 버킷안에 오브젝들의 버전 id를 null로 세팅한다.

METHOD/URL PUT /?versioning HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값

#TODO: place a table

파라미터:
요청 파라미터 없음

요청 XML:

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
        <Status>Enabled</Status>
        <MfaDelete>Disabled</MfaDelete>
</VersioningConfiguration>
VersioningConfiguration 버전 상태를 감싸는 노드
Status 버킷 버전닝 상태를 세팅하는 값 (Suspended | Enabled)
응답 XML:
응답 xml 없음.

응답 Header:

HTTP/1.1 200 OK
Date: Wed, 20 Jun 2012 04:39:02 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fe153e664f8004c780000e7

버킷 웹싸이트 설정하기

이 API는 웝 사이트 설정에 설정값을 세팅하기 위한 put 동작이다. 이 설정을 통해 버킷 이름과 hs2 의 dns 정보의 결합을 통해 설정한 웹 페이지를 제공을 한다. 이 API는 PutBucketWebsite 권한을 필요로 한다. 기본적으로 버켓 주인은 이 설정을 할 수 있고, 다른 사용자에게 버킷 정책을 통해 세팅 권한을 부여 할수 있다.

세팅은 index 페이지 파일과 error 페이지에 대한 html 파일 정보를 세팅한다.

METHOD/URL PUT /?website HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음

요청 XML:

<?xml version="1.0"?>
<WebsiteConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <IndexDocument>
    <Suffix>index.html</Suffix>
  </IndexDocument>
  <ErrorDocument>
    <Key>error.html</Key>
  </ErrorDocument>
</WebsiteConfiguration>

요청 elements:

WebsiteConfiguration 전체 요청을 감싸는 노드
IndexDocument Suffix 를 감싸는 노드
Suffix 이 접두사는 웹사이트 엔드 포이트 디렉토리뒤에 붙게 된다. 예를 들어 bucketname/test/ 요청인 경우 키 이름은 test/index.html 인 값으로 전달된다.
ErrorDocument Key 속성을 감싸는 노드
Key 4XX 에러 발생시 보여지는 에러 도큐먼트 페이지이다.
응답 XML:
응답 xml 없음.

응답 header:

HTTP/1.1 200 OK
Date: Wed, 20 Jun 2012 04:39:02 GMT
Content-Length: 0
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fe153e664f8004c780000e7

오브젝트 명령들

오브젝트 멀티파트 업로드 중단

멀티파트 업로드를 중단한다. 업로드가 중단되고 난 후에는 중단할 때 사용한 업로드 아이디로 파트를 추가할 수 없다. 만약 파트를 업로드 하는 중에, 중단 API를 호출하였을 경우에 업로드 중단이 완전히 되었는지 확인하기 위해서 이 API 를 여러분 호출할 필요가 있다. 멀티파트 업로드가 성공적으로 중단되었으면, 업로드된 파트들의 저장공간은 없어질 것이다.

METHOD/URL DELETE /objectName?uploadId=UploadId HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML이 없음.
응답 헤더(Header):
응답 헤더가 없음
응답 XML:
응답 XML이 없음

오브젝트 멀티파트 업로드 완료

이전에 업로드된 파트들을 가지고 멀티파트 업로드를 완료한다. 먼저, 멀티파트 업로드를 시작하고, 업로드 파트 API를 사용해서 파트들을 성공적으롱 업로드 한다. 그 후, 이 API를 호출한다. 이 API를 호출 할때 파트리스트의 각 파트에 ParNumber와 ETag를 추가해서 호출해야만 업로드가 성돌한다. 이때, PartNumber를 오름차순으로 정렬해서 이 API를 사용해서 파트들을 PartNumber의 오름차순으로 정렬해서 새로운 오브젝트를 생성하고 업로드를 완료한다.

METHOD/URL POST /objectName?uploadId=UploadId HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터 없음

요청 XML:

<CompleteMultipartUpload>
        <Part>
                <PartNumber>PartNumber</PartNumber>
                <ETag>ETag</ETag>
        </Part>
        ...
</CompleteMultipartUpload>

요청 elements:

이름 설명 타입 필요여부
CompleteMultipartUpload 요청을 위한 컨테이너. Part 자식 요소 포함. Container Yes
Part 이전의 특정 업로드 파트와 연관된 요소를 위한 컨테이너. PartNumber, ETag 자식요소 포함. Container Yes
PartNumber 파트를 식별하는 Part Number Integer Yes
ETag 파트가 업로드 되었을 때 되돌려 받는 요청을 위한 노드 Entity tag String Yes
요청 예제:

POST http://test9.hbox.a3c.co.kr /multipart_005?uploadId=db4d76d3adbbd38dbad38dbaef4d34 HTTP/ 1.1

BODY :

<CompleteMultipartUpload>
        <Part>
                <PartNumber>1</PartNumber>
                <ETag>"bc00541d80512bc0179f9f048674fc02"</ETag>
        </Part>
        <Part>
                <PartNumber>2</PartNumber>
                <ETag>"d022eb6d05e0fa6edb57eda8ada5af0c"</ETag>
        </Part>
        <Part>
                <PartNumber>3</PartNumber>
                <ETag>"a479f6dcc969210bc3fe02512ccd00f0"</ETag>
        </Part>
</CompleteMultipartUpload>
응답 헤더(Header):
HTTP/1.1 200 OK x-amz-request-id: 4fe9558d0cd20b18e4000171 Content-Type: application/xml Transfer-Encoding: chunked Date: Tue, 26 Jun 2012 06:24:15 GMT Server: WEbSimpleStorage

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
    <CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
      <Location></Location>
      <Bucket>multipart</Bucket>
      <Key>multipart_01</Key>
      <ETag>"b2be81691d4a29532fd42a8f8fd5626c"</ETag>
    </CompleteMultipartUploadResult>

응답 elements:

이름 설명 타입
CompleteMultipartUploadResult Location, Bucket, Key, ETag 을 감싸는 노드 Container
Location 새로 만들어진 오브젝트를 식별하는 URI URI
Bucket 새로 만들어진 오브젝트를 포함하는 Bucket의 이름 String
Key 새로 만들어진 오브젝트 키 String
ETag 새로 만들어진 오브젝트 데이터를 식별하는 Entity tag. 다른 오브젝트 데이터를 가지는 오브젝트들은 다른 entity tag들을 가질 것이다. entity tag는 불투명한 문자열이다. String

특정 에러 코드:

에러코드 설명 HTTP 상태코드
InvalidPart 명시된 파트를 찾을 수 없거나, 득다 존재 하지 않거나, 업로드된 아이디가 불분명하거나, 또는 삭제되었거나 완료된 멀티파트 오브젝트일 경우에 이 에러코드를 러턴한다. 400 Bad Request
InvalidPartOrder 파트리스트가 PartNumber의 크기 순서대로 나열되지 않았을 때 이 에러코드를 리턴한다. 404 Bad Request
NoSuchUpload 명시된 멀티파트 업로드가 존재 하지 않거나, 업로드된 아이디가 불분명하거나, 또는 삭제되었거나 완료된 멀티파트 오브젝트일 경우에 이 에러코드를 러턴한다. 404 Not Found

오브젝트 한꺼번에 삭제

한 번의 HTTP 요청으로 여러 오브젝트를 한꺼번에 삭제하도록 한다. 여러 오브젝트를 한꺼번에 지우기 위해 오브젝트 키값을 사용한다. XML에 지우고자 하는 오브젝트 키 이름을 1000개 까지 포함시킬 수 있다. 버킷에 버전 기능을 설정했다면 오브젝트 키 이름과 함께 오브젝트의 특정 버전 id를 리스트에 포함시킬 수 있다. 각각의 삭제 결과를 성공과 실패로 리턴한다. 존재하지 않는 오브젝트에 대해서도 삭제 성공을 리턴한다.

verbose 모드와 quiet 모드 두 가지를 사용할 수 있다. verbose 모드를 기본으로 동작하며, verbose의 경우 응답의 결과에 모든 키에 대한 작업 결과를 포함한다. quiet 모드의 경우 응답의 결과가 에러인 키 만을 결과에 포함한다.

요청 body가 변경 되지 않았음을 확인하기 위해 헤더에는 Content-Md5를 포함해야 한다.

METHOD/URL POST /?delete
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값

요청 헤더(Header):

이름 설명 필요 여부
Content-MD5 데이터에 대한 128비트 다이제스트 값으로 base64인코딩 되어 있다. 메세지 무결성 확인을 위해 반드시 사용되야 한다. No
Content-Length body 길이. No
파라미터:
요청 파리미터가 없음

요청 XML:

이름 설명 필요 여부
Delete 요청 컨테이너 Yes
Quiet quiet 모드를 나타낸다. quiet모드를 사용할 경우 반드시 true값을 가져야 한다. No
Key 삭제할 오브젝트 키 Yes
VersionId 삭제할 오브젝트의 특정 버전 id No
응답 헤더(Header):
공통 응답 헤더만을 사용한다.

응답 XML:

이름 설명
DeleteResult 응답 컨테이너
Deleted 삭제 성공 컨테이너, 오브젝트가 성공적으로 삭제 됐음을 확인할 수 있다.
Key 삭제 시도한 오브젝트 키 이름
VersionId 오브젝트 버전 id
DeleteMarker true일 경우 삭제 표시자를 액세스 했음을 나타낸다. delete 작업으로 삭제 표시자가 만들어지거나 지워졌을때 응답에 표함된다.
DeleteMarkerVersionId 삭제표시자의 버전 id
Error 실패한 결과를 나타내는 컨테이너
Code 실패한 삭제 결과 상태 코드
Message 에러 설명

요청 예제:

POST http://test99999.hbox.a3c.co.kr /?delete HTTP/1.1
Content-Type: multipart/form-data
Content-MD5: zC1yl+zbx/lBxPCin98ltA==
x-amz-date: Thu, 28 Jun 2012 06:23:05 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:5hDqGEeqScWurmmC5V5afcqAf+8=
Host: test99999.hbox.a3c.co.kr
Content-Length: 149
Expect: 100-continue
<?xml version="1.0" encoding="utf-8"?>
    <Delete>
        <Quiet>true</Quiet>
        <Object><Key>sample.txt</Key></Object>
        <Object><Key>test2.txt</Key></Object>
    </Delete>

응답 예제:

HTTP/1.1 200 OK
Date: Thu, 28 Jun 2012 06:23:03 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4febf84764f80036470003fe
Transfer-Encoding: chunked
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<DeleteResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
</DeleteResult>

오브젝트 삭제

오보젝트의 null 버전을 삭제하고 삭제 표시를 넣는다. null 버전이 없으면 아무것도 오브젝트를 지우지 않는다. 특정 버전을 지우기 위해서는 버킷 소유자 권한이 필요하다.

METHOD/URL DELETE /objectName HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값

요청 헤더(Header):

이름 설명 필요 여부
x-amz-mfa Not yet implemented  
파라미터:
요청 파라미터가 없음
요청 XML:
요청 XML이 없음

응답 헤더(Header):

이름 설명
x-amz-delete-marker 버전을 사용하는 오브젝트의 경우, 지워진 오브젝트가 삭제 표시인지 아닌지를 나타낸다. 보통의 경우, 삭제 표시가 생겼는지 여부를 나타낸다.
x-amz-version-id DELETE결과로 만들어진 삭제 표시의 버전 id를 리턴한다. 특정 오브젝트 버전을 지울 경우, 삭제된 오버젝트 버전의 버전 id를 리턴한다.
응답 XML:
응답 XML이 없음

요청 예제:

DELETE http://test99999.hbox.a3c.co.kr /test.txt HTTP/1.1
x-amz-date: Tue, 26 Jun 2012 08:57:52 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:4Y4509QrKFkKKqtei/GlRq0fRMc=
Host: test99999.hbox.a3c.co.kr

응답 예제:

HTTP/1.1 204 NO CONTENT
Date: Tue, 26 Jun 2012 08:57:50 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4fe9798e17416a3ab2000001
Content-Length: 0
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8

오브젝트 다운로드

버킷내에 있는 오브젝트를 다운로드 한다. 다운로드 하기 위해서는 READ 권한이 필요하다. 오브젝트의 다른 버전을 다운로드 하기 위해서는, versionId를 사용해서 다운로드 하려는 버전을 지정해야 한다. x-amz-delete-marker의 값이 true일 경우에는 오브젝트가 지워진 것으로 간주한다.

METHOD/URL GET /objectName HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값

요청 헤더(Header):

이름 설명 필요 여부
Range 오브젝트의 특정 범위를 다운로드하도록 한다. No
If-Modified-Since 특정 시간 이후로 오브젝트가 변경됐을 경우에만 리턴한다. 변경 되지 않았을 경우 304(not modified)를 리턴한다. No
If-UnModified-Since 특정 시간 이후로 오브젝트가 변경돼지 않았을 경우에만 리턴한다. 변경 됐을 경우 412(precondition failed)을 리턴한다. No
If-Match Etag값이 일치 할 때만 오브젝트를 리턴한다. 일치하지 않을 경우 412(변경 없음)을 리턴한다. No
If-None-Match Etag값이 다를 경우에만 오브젝트를 리턴한다. 일치할 경우 304(변경 없음)를 리턴한다. No

파라미터:

파라미터 설명 필요 여부
response-content-type 응답의 content-type 헤더 값을 설정한다. No
response-content-language 응답의 content-language 헤더 값을 설정한다. No
response-expires 응답의 expires 헤더 값을 설정한다. No
response-cache-control 응답의 cache-control 헤더 값을 설정한다. No
response-content-disposition 응답의 content-disposition 헤더 값을 설정한다. No
response-content-encoding 응답의 content-encoding 헤더 값을 설정한다. No
요청 XML:
요청 XML이 없음

응답 헤더(Header):

헤더 설명
x-amz-delete-marker 오브젝트가 삭제 표시인지 아닌지를 지정한다.
x-amz-expiration 오브젝트 만료 설정이 돼있을 경우를 나타낸다. expire-date와 rule-id 키값을 포함한다.
x-amz-server-side-encryption 오브젝트가 서버 암호화를 사용하고 있을 경우를 나타내며, 암호화에 사용중인 알고리즘 값을 담는다.
x-amz-version-id 오브텍트가 버전 id를 가질경우 버전 id를 리턴한다.
응답 XML:
응답 XML이 없음

요청 예제:

GET http://hans.hbox.a3c.co.kr /CentOS%2D5.6%2Dx86%5F64%2DLiveCD.iso HTTP/1.1
x-amz-date: Mon, 25 Jun 2012 05:24:48 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:EnhDZZEOd8xgchkN5vCPJGsqLQY=
Host: hans.hbox.a3c.co.kr
Connection: Keep-Alive

응답 예제:

HTTP/1.1 200 OK
Date: Mon, 25 Jun 2012 05:24:44 GMT
Server: Apache/2.2.16 (Debian)
x_amz_meta_cb_modifiedtime: Mon, 25 Apr 2011 09:06:35 GMT
Etag: "7449589dc0769d4e027832bfe3f6bfba"
x-amz-request-id: 4fe7f61c64f80038f5000020
Content-Length: 733669376
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: application/octet-stream

오브젝트 접근제어 조회

오브젝트의 접근제어 정보를 리턴한다. 정보를 조회하기 위해서는 READ_ACP 권한이 있어야 한다. 리턴한 접근제어 정보는 오브젝트의 최신 버전에 대한 것이다. 특정 버전에 대한 접근 제어 정보를 조회하려면 versionId를 사용해야 한다.

METHOD/URL /objectName?acl HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
요청 헤더(Header):
공통 헤더만을 사용한다.
파라미터:
요청 파라미터가 없음
요청 XML:
요청 XML이 없음
응답 헤더(Header):
공통 응답 헤더만을 사용

응답 XML:

이름 설명
AccessControlList Grant, Grantee, Permission을 포함하는 컨테이너
AccessControlPolicy 오브젝트 ACL 권한 요소들을 Grantee별로 갖는 컨테이너
DisplayName 버킷 소유주 디스플레이 이름
Grant Grantee와 Grantee에 대한 권한들을 포함하는 컨테이너
Grantee 권한 설정 대상
ID 버킷 소유자 또는 Grantee의 ID
Owner 버킷 소유자의 디스플레이 이름과 ID를 포함하는 컨테이너
Permission Grantee에대한 권한을 지정

요청 예제:

GET http://test99999.hbox.a3c.co.kr /test.txt?acl HTTP/1.1
x-amz-date: Wed, 27 Jun 2012 06:17:44 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:IySKTNMH8QVppsiKDKASvb2cQtk=
Host: test99999.hbox.a3c.co.kr y

응답 예제:

HTTP/1.1 200 OK
Date: Wed, 27 Jun 2012 06:17:43 GMT
Server: Apache/2.2.16 (Debian)
x-amz-request-id: 4feaa58717416a3ab0000078
Transfer-Encoding: chunked
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy>
    <Owner>
        <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
        <DisplayName>Test Account</DisplayName>
    </Owner>
    <AccessControlList>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
                <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
                <DisplayName>None</DisplayName>
            </Grantee>
            <Permission>READ</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
                <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
                <DisplayName>None</DisplayName>
            </Grantee>
            <Permission>WRITE</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
                <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
                <DisplayName>None</DisplayName>
            </Grantee>
            <Permission>READ_ACP</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
                <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
                <DisplayName>None</DisplayName>
            </Grantee>
            <Permission>WRITE_ACP</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
                <ID>q07Z8HJyxJOlcdGn//4GJLrYKnI=</ID>
                <DisplayName>None</DisplayName>
            </Grantee>
            <Permission>FULL_CONTROL</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI>
            </Grantee>
            <Permission>READ</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI>
            </Grantee>
            <Permission>WRITE</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI>
            </Grantee>
            <Permission>READ_ACP</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI>
            </Grantee>
            <Permission>WRITE_ACP</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI>
            </Grantee>
            <Permission>FULL_CONTROL</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
            </Grantee>
            <Permission>READ</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
            </Grantee>
            <Permission>WRITE</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
            </Grantee>
            <Permission>READ_ACP</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
            </Grantee>
            <Permission>WRITE_ACP</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
            </Grantee>
            <Permission>FULL_CONTROL</Permission>
        </Grant>
    </AccessControlList>
</AccessControlPolicy>

오브젝트 메타정보 조회

오브젝트 자체가 아닌 오브젝트의 메타정보를 리턴한다. 응답에 body가 없다는 점을 제외하면 GET 동작과 동일한 응답을 가진다. READ 권한이 필요하다.

METHOD/URL HEAD /objectName HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값

요청 헤더(Header):

이름 설명 필요 여부
Range 오브젝트의 특정 범위를 다운로드하도록 한다. No
If-Modified-Since 특정 시간 이후로 오브젝트가 변경됐을 경우에만 리턴한다. 변경 되지 않았을 경우 304(not modified)를 리턴한다. No
If-UnModified-Since 특정 시간 이후로 오브젝트가 변경돼지 않았을 경우에만 리턴한다. 변경 됐을 경우 412(precondition failed)을 리턴한다. No
If-Match Etag값이 일치 할 때만 오브젝트를 리턴한다. 일치하지 않을 경우 412(변경 없음)을 리턴한다. No
If-None-Match Etag값이 다를 경우에만 오브젝트를 리턴한다. 일치할 경우 304(변경 없음)를 리턴한다. No
파라미터:
요청 파라미터가 없음
요청 XML:
요청 XML이 없음

응답 헤더(Header):

헤더 설명
x-amz-expiration 오브젝트 만료 설정이 돼있을 경우를 나타낸다. expire-date와 rule-id 키값을 포함한다.
x-amz-meta-* 오브젝터 생성시 입력했던 메타 정보를 x-amz-meta 접두어를 붙여서 리턴한다.
x-amz-missing-meta x-amz-meta 헤더로 받지 못한 메타 정보 엔트리 수를 나타낸다. 일부 메타 정보는 HTTP 헤더가 허용하지 않는 이유로 주고 받지 못할 수 있다
x-amz-server-side-encryption 오브젝트가 서버 암호화를 사용하고 있을 경우를 나타내며, 암호화에 사용중인 알고리즘 값을 담는다.
x-amz-version-id 오브텍트가 버전 id를 가질경우 버전 id를 리턴한다.
응답 XML:
응답 XML이 없음

요청 예제:

HEAD http://test99999.hbox.a3c.co.kr /NUnit%2D2.5.10.11092.msi HTTP/1.1
x-amz-date: Wed, 27 Jun 2012 08:36:48 GMT
Authorization: AWS AKIAJT5ISXOUG5KVB2NW:vZUE+KPU4zgFgdSse/kW7ubbTX0=
Host: test99999.hbox.a3c.co.kr

응답 예제:

HTTP/1.1 200 UNKNOWN STATUS CODE
Date: Wed, 27 Jun 2012 08:36:44 GMT
Server: Apache/2.2.16 (Debian)
ETag: "1fb891ffd60b5abe03ce668ae0566a75"
x-amz-request-id: 4feac61c64f80036480000fa
Content-Type: application/octet-stream

오브젝트 멀티파트 업로드 시작

오브젝트 멀티마트 업로드를 시작하고, 멀티파트 업로드 시 필요한 업로드 아이디를 되돌려 준다. 또한, 되돌려 받은 업로드 아이디는 멀티파트 업로드를 끝낼 때와 멀티파트를 중단할 때도 사용한다.

METHOD/URL POST /objectName?uploads HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
파라미터:
요청 파라미터를 사용하지 않는다.
요청 XML:
요청 XML이 없음.

응답 헤더(Header):

HTTP/1.1 200 OK
x-amz-request-id: 4fe922420cd20b18e4000155
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Tue, 26 Jun 2012 02:45:23 GMT
Server: WEbSimpleStorage

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
    <InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
      <Bucket>multipart</Bucket>
      <Key>multipart_01</Key>
      <UploadId>db4d76d3adbad36e39db6f7ceb4d34</UploadId>
    </InitiateMultipartUploadResult>
** 주의 사항:
멀티파트 업로드 API를 사용해서 만들어진 오브젝트는 같은 Region 내에서는 그 오브젝트를 복사할 수 없습니다.

오브젝트 파트 조회

멀티파트 오브젝트 리스트를 조회한다. 멀티파트 시작시 부여받은 업로드아이드를 표함해야한다. 이 API는 기본적으로 1,000개의 업로드된 파트들을 되돌려주며, 또한 이 값이 최대값이다. 1,000개 내에서 max-parts 파라미터로 원하는 수만큼 갯수를 제한할 수 있다. 만약 업로드된 파트들 수가 1,000개를 넘어간다면, IsTruncated 필드는 true 값이 되고, NextPartNumberMarker 필드는 이전 응당 값과 part-number-marker 파라미터로 값을 추정할 수 있다.

METHOD/URL GET /objectName?uploadId=UploadId HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값

파라미터:

이름 설명 타입 필요여부
uploadId 오브젝트 멀티 파트 시작시 되돌려 받은 Id 값. String Yes
max-parts 되돌려 받고 싶은 파트의 수를 성정할 수 있다. 디폴트는 1,000. String No
part-number-maker 되돌려 받고 싶은 첫번째 파트의 수를 설정한다. 설정한 수의 다음 수부터 시작한다. String No
요청 XML:
요청 XML이 없음.

응답 헤더(Header):

HTTP/1.1 200 OK
x-amz-request-id: 4fea8bba0cd20b22a8000046
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Wed, 27 Jun 2012 04:27:40 GMT
Server: WEbSimpleStorage

응답 XML:

<?xml version="1.0" encoding="UTF-8"?>
<ListPartsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
        <Bucket>test9</Bucket>
        <Key>multipart_005</Key>
        <UploadId>db4d76d3adbbd38dbad38dbaef4d34</UploadId>
        <Initiator>
                <ID>65a011a29cdf8ec533ec3d1ccaae921c</ID>
                <DisplayName>None</DisplayName>
        </Initiator>
        <Owner>
                <ID>65a011a29cdf8ec533ec3d1ccaae921c</ID>
                <DisplayName></DisplayName>
        </Owner>
        <StorageClass>STANDARD</StorageClass>
        <NextPartNumberMarker>700</NextPartNumberMarker>
        <MaxParts>3</MaxParts>
        <IsTruncated>false</IsTruncated>
        <Part>
                <PartNumber>100</PartNumber>
                <LastModified>2012-06-27T04:26:53.344Z</LastModified>
                <ETag>"d022eb6d05e0fa6edb57eda8ada5af0c"</ETag>
                <Size>67</Size>
        </Part>
        <Part>
                <PartNumber>300</PartNumber>
                <LastModified>2012-06-27T04:26:27.975Z</LastModified>
                <ETag>"bc00541d80512bc0179f9f048674fc02"</ETag>
                <Size>42</Size>
        </Part>
        <Part>
                <PartNumber>700</PartNumber>
                <LastModified>2012-06-27T04:27:15.214Z</LastModified>
                <ETag>"a479f6dcc969210bc3fe02512ccd00f0"</ETag>
                <Size>93</Size>
        </Part>
</ListPartsResult>

요청 elements:

이름 설명 타입
ListPartsResult Bucket, Key, UploadId, Initiator, Owner, StorageClass, PartNumberMarker, NextPartNumberMarker, MaxParts, IsTruncated, Part 을 감싸는 노드 Container
Bucket 멀티파트 업로드가 시작된 버킷의 이름 String
Key 멀티파트 업로드를 시작한 오브젝트 키 String
UploadId 멀티파트 업로드의 고유한 아이디 값 String
Initiator 멀티파트 업로드를 시작한 사용자의 정보를 보여주는 노드. ID와 DisplayName을 감싸는 노드. Container
ID CanonicalUserID String
DisplayName 주체자 이름 String
Owner 멀티파트 업로드를 완료해서 만들어진 오브젝트의 소유자. Container
StorageClass 업로드된 오브젝트가 저장된 저장소 종류 (STANDARD 혹은 REDUCED_REDUNDANCY) String
PartNumberMarker 요청 파라미터에 part-number-maker 에 세팅되어 있는 값 Integer
NextPartNumberMarker part-number-maker와 max-parts 파라미터로 NextPartNumberMarker값 계산. Integer
MaxParts 업로드된 파트의 최대값 Integer
IsTruncated 되돌려 받은 파트 리스트의 수보다 더 많은 파트들의 존재유무. True 이면 더 많이 존재. False 이면 되돌려 받은 리스트의 수가 전체 갯수임 Boolean
Part 각각의 파트를 감싸는 노드 String
PartNumber 파트의 고유 숫자 Integer
LastModified 파트가 업로드 됐을때 날짜와 시간 Date
ETag 파트가 업로드 됐을때 되돌려 받은 ETag String
Size 업로드된 파트의 크기 Integer

특정 에러 코드:

에러코드 설명 HTTP 상태코드
NoSuchUpload 명시된 멀티파트 업로드가 존재 하지 않거나, 업로드된 아이디가 불분명하거나, 또는 삭제되었거나 완료된 멀티파트 오브젝트일 경우에 이 에러코드를 러턴한다. 404 Not Found

오브젝트 POST 업로드

HTML 폼을 이용해서 특정 Bucket에 하나의 Object를 추가한다. POST는 object를 버킷에 추가하는 방법중 하나로 브라우저 기반의 업로드를 가능하게 한다. HTTP 헤더을 통해서 PUT에서 전달되는 파라미터들은 multpart/form-data 폼 필드로 인코딩되어 POST 메시지 바디로 전달된다. Object를 Bucket에 추가하기기 위해서는 해당 Bucket에 대한 WRITE 권한이 있어야 한다.

METHOD/URL POST /keyName HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값
요청 헤더(Header):
없음

폼 필드:

이름 설명 필요여부
AWSAccessKeyId

해당 버킷 소유자의 AccessKey Id

  • 타입 : String, 기본값: 없음
  • 제약사항: 요청에 Policy 헤더가 포함된 경우 필수값
조건부
Cache-Control, Content-Type, Content-Disposition, Content-Encoding

REST용 헤더

  • 타입 : String
  • 기본값: 없음
 
expires

만료기간 1/1000 초

  • 타입 : Int
  • 기본값: 없음
 
file

파일 혹은 텍스트 내용으로 폼에서 마지막 필드여야 하며 한번에 하나의 파일만 올릴 수 있다.

  • 타입: 파일 또는 텍스트 내용
  • 기본값: 없음
 
key

업로드하는 object의 키 사용자가 업로드하는 파일이름을 키로 사용하고 싶은 경운 ${filename} 변수를 사용하면 된다.

  • 타입: String
  • 기본값: 없음
 
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음
응답 XML:
응답 XML 없음

오브젝트 업로드

아래 명령으로 오브젝트 및 오브젝트의 새 버젼을 생성할 수 있습니다.

METHOD/URL PUT /objectName HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값

요청 헤더(Header):

Cache-Control:
HTTP 프로토콜의 Cache-Control 기능을 구현한다. 선택가능
Content-Disposition:
HTTP 프로토콜의Content-Disposition 기능을 구현한다. 선택가능
Content-Encoding:
HTTP 프로토콜의Content-Disposition 기능을 구현한다. 선택가능
Content-Length:
HTTP 프로토콜의Content-Length 기능을 구현한다. 필수
Content-MD5:
TBD
Content-Type:
TBD
Expires:
TBD
x-amz-acl:
TBD
x-amz-meta-:
TBD
x-amz-server-side-encryption:
TBD
파라미터:
요청 파라미터 없음
요청 XML:
요청 XML 없음
응답 헤더(Header):
x-amz-expiration:
해당 버킷에 라이프싸이클(Lifecycle) 설정이 되어 있고 주어진 오브젝트와 부합하는 rule이 있을 경우 expiry-date, rule-id 로 설정됩니다.
x-amz-server-side-encryption:
오브젝트 업로드시 서버 암호화 설정(x-amz-server-side-encryption)을 했을 경우 응답에 서버 암호화 알고리즘이 포함됩니다.
x-amz-version-id:
주어진 오브젝트의 버젼
응답 XML:
정해진 응답 XML이 없습니다.

오브젝트 접근제어 설정

오브젝트 접근제어 설정을 한다. 접근 제어 설정을 위해서 WRITE_ACP 권한을 가져야 한다. 요청 body에 접근제어 설정을 지정하거나, 요청 헤더에 권한을 지정하는 두 방식 중 하나를 선택해 사용할 수 있다.

오브젝트의 가장 최신 버전에 접근 제어 설정이 되며, 특정한 오브젝트 버전에 접근 제어 설정을 하기 위해서는 versionId를 사용해야 한다.

METHOD/URL PUT /ObjectName?acl HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값

요청 헤더(Header):

이름 설명 필요 여부
x-amz-acl 오브젝트에 적용할 미리 정의된 ACL 유효 값: private, public-read, public-read-write, authenticated-read bucket-owner-read, bucket-owner-full-control No

미리 정의된 ACL은 다음과 같다.

ACL 적용 대상 ACL 권한
private 버킷, 오브젝트 소유자가 FULL_CONTROL을 갖고 다른 소유자는 접근 권한이 없음
public-read 버킷, 오브젝트 소유자가 FULL_CONTROL을 갖는다. AllUsers 그룹은 READ 권한을 갖는다.
public-read-write 버킷, 오브젝트 소유자가 FULL_CONTROL을 갖는다. AllUsers 그룹은 READ, WRITE 권한을 갖는다.
authenticated-read 버킷, 오브젝트 소유자가 FULL_CONTROL을 갖는다. AuthenticatedUsers 그룹은 READ 권한을 갖는다.
bucket-owner-read 오브젝트 오브젝트 소유자가 FULL_CONTROL을 갖는다. 버킷 소유자는 READ 권한을 갖는다. 버킷 생성시에 사용될 경우에는 무시된다
bucket-owner-full-control 오브젝트 오브젝트 소유자와 버킷 소유자 모두 FULL_CONTROL을 갖는다. 버킷 생성시에 사용될 경우에는 무시된다.
log-delivery-write 버킷 LogDelivery 그룹이 버킷에 대해 WRITE, READ_ACP 권한을 갖는다
미리정의된 ACL이 아닌 개별적인 접근 권한을 오브젝트에 설정하려면, 다음 헤더를 사용한다. 개별적인 ACL을 사용할 경우, x-amz-acl 헤더를 사용할 수 없다.
이름 설명 필요 여부
x-amz-grant-read 버킷내의 오브젝트들의 리스트를 볼 수 있는 권한 No
x-amz-grant-write 버킷에 접근 권한을 준다. 오브젝트에 적용할 수 없다. No
x-amz-grant-read-acp 버킷 ACL에 대한 읽기 권한을 준다. No
x-amz-grant-write-acp 버킷에 쓰기 권한을 준다. No
x-amz-grant-full-control 버킷에 대한 READ, WRITE, READ_ACP, WRITE_ACP 권한을 준다. No
파라미터:
요청 파라미터가 없음
요청 XML:
요청 XML을 사용해서 ACL을 지정할 경우, 요청 헤더에 ACL을 지정할 수 없다
이름 설명
AccessControlList ACL 정보를 담는 컨테이너
AccessControlPolicy Grantee별로 오베브젝트 ACL 설정 엘리먼트들을 담는 컨테이너
DisplayName 버킷 소유자를 나타내는 스크린 이름
Grant Grantee의 권한을 담는 컨테이너
Grantee 권한 설정 대상 유효값: DisplayName, EmailAddress, AuthenticatedUser
ID 버킷 소유자 또는 Grantee의 ID
Owner 버킷 소유자 디스플레이 이름과 ID를 담는 컨테이너
Permission Grantee에 대한 권한 지정

응답 헤더(Header):

이름 설명 필요 여부
x-amz-version-id ACL을 적용할 오브젝트에 적용할 미리 정의된 ACL. No
응답 XML:
응답 XML 없음

오브젝트 복사

저장되어 있는 오브젝트의 복사본을 만든다. GET을 한 다음 PUT을 하는 것과 같다. x-amz-copy-source 헤더를 사용해서 소스 오브젝트의 복사본을 만든다. 5기가 바이트 크기 까지의 오브젝트만 복사할 수 있고, 이 보다 큰 경우에는 multipart upload API를 사용한다.

원본과 동일 한 메타데이터 정보를 복사하거나 새 메타 데이터를 복사본에 지정할 수 있다. ACL은 복사되지 않고 private으로 지정된다. 원본에 대해 READ 권한이 필요하고, 복사본을 쓸 버킷에 WRITE권한이 있어야 한다.

다음 헤더를 사용해서 조건에 따라 오브젝트를 복사할 수 있다. Etag 일치 조건에 따라 x-amz-copy-source-if-match, x-amz-copy-source-if-none-match 특정 날짜이후 또는 이전에 수정 됐는지에 따라 x-amz-copy-source-if-unmodified-since, x-amz-copy-source-if-modified-since

기본적으로로 x-amz-copy-source는 오브젝트의 마지막 버전을 가리킨다. 오브젝트의 특정 버전을 복사하려면 versionId 면를 사용해야 한다.

METHOD/URL PUT /destinationObject
Header Host: hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값

요청 헤더(Header):

이름 설명 필요 여부
x-amz-copy-source 소스 버킷과 오브젝트의 키 이름, 슬래시(/)로 구분 문자열은 URL 인코딩되어야 한다. 유효한 버킷을 사용해아 하며 소스 오브젝트에 READ 권한이 필요하다 YES
x-amz-metadata-directive 메타데이터를 소스 오브젝트로 부터 가져올지 여부를지정한다. 소스 오브젝트로 부터 복사할 경우 버전 id를 제외한 정보가 복사된다. COPY와 REPLACE이외 값은 400 에러를 받는다. 오브젝트를 복사하려면 MetadataDirective헤더를 지정하고 그 값으로 REPLACE를 사용해야 한다. No
x-amz-copy-source-if-match
Etag가 일치할 경우 오브젝트를 복사한다. 그렇지 않을 경우 412 HTTP
status code 에러를 받는다.
No
x-amz-copy-source-if- none-match
Etag가 일치하지 않을 경우 오브젝트를 복사한다. 그렇지 않을 경우 412
status code에러를 받는다.
No
x-amz-copy-source-if- unmodifed-since 특정 시간 이후로 수정되지 않았을 경우 오브젝트를 복사한다. 그렇지 않을 경우 412 HTTP status code 에러를 받는다. No
x-amz-copy-source-if modified-since 특정 시간 이후로 수정됐을 경우 오브젝트를 복사한다. 그러힞 않을 경우 412 HTTP status code 에러를 받는다. No
x-amz-server- side-encryption 오브젝트를 복사할 때 사용할 서버 사이드 알고리즘을 지정한다. No

파라미터:

요청 파라미터 없음

요청 XML:

요청 XML 없음

응답 헤더(Header):

이름 설명
x-amz-expiration 오브젝트 만료 기한이 설정됐을 경우 포함된다. expire-date와 rule-id 값의 쌍을 리턴한다. rule-id는 URL인코딩된 값이다.
x-amz-copy-source-version-id 복사된 소스 오브젝트의 버전 아이디
x-amz-server-side-encription 서버 사이드 알고리즘을 사용했을 경우 확인용으로 포함된다.
x-amz-version-id 대상 버킷 내에서의 오브젝트 버전

응답 XML:

이름 설명
CopyObjectResult 모든 응답 요소를 담는 컨테이너
Etag 새 오브젝트의 Etag를 리턴한다. Etag는 메터데이터를 제외한 오브젝트의 내용만을 반영한다.
LastModifed 오브젝트가 마지막으로 변경된 날짜를 리턴한다.

오브젝트 멀티파트 업로드 - 복사

데이터 소스로써 존재하는 오브젝트를 복사함으로써 파트를 업로드 한다.x-amz-copy-source와 x-amz-copy-source-range를 요청 헤더에 추가해서 데이터 소스를 추가할 수 있고, 바이트 범위를 설정할 수 있다. 어떤 파트라도 업로드하기 전에 멀티파트 업로드를 시작해야만 한다. 첫번째 요청에 대한 응답으로, Hostway Storage Service(HS2)는 유일한 식별자인 Upload ID를 되돌려주는데, 업로드 파트 요청에 꼭 포함해야만 한다.

METHOD/URL PUT /objectName?partNumber=PartNumber&uploadId=UploadId HTTP/1.1
Header Host: bukcetName.hbox.a3c.co.kr
x-amz-copy-source: /source_bucket/sourceObject
x-amz-copy-source-range:bytes=first-last
x-amz-copy-source-if-match: etag
x-amz-copy-source-if-none-match: etag
x-amz-copy-source-if-unmodified-since: time_stamp
x-amz-copy-source-if-modified-since: time_stamp
Date: 날짜
Authorization: 인증값

요청 헤더(Header):

이름 설명 타입 필요여부
x-amz-copy-source 소스 버킷의 이름과 소스 오브젝트 키 이름을 슬래쉬('/')에 의해서 구분짓는다. String Yes
x-amz-copy-source-range 소스 오브젝트로부터 복사하기 위한 바이트의 범위. 범위 값은 bytes=first-last의 폼으로 사용해야만 한다. 예를 들자면, bytes=0-9는 소스 오브젝트의 처음부터 10 바이트만 복사함을 의미한다. 소스 오브젝트가 5GB보다 클 경우에만 바이트의 범위만큼 복사가능하다. 그리고, 전체 소스 오브젝트를 복사하는 경우에는 이 요청 헤더를 요구하지 않는다. Integer No
다음의 조건부 헤더는 x-amz-copy-source헤더가 명시되어 있는 오브젝트 기반이다.
이름 설명 타입 필요여부
x-amz-copy-source-if-match 소스 오브젝트의 ETag가 명시된 값과 일치한다면 복사를 수행하라. 만약 일치하지 않다면, HS2는 HTTP 상태코드가 412인 필수전제 조건 실패 에러를 되돌려 준다. String No
x-amz-copy-source-if-match-none 소스 오브젝트의 ETag가 명시된 값과 다르다면 복사를 수행하라. 만약 일치한다면, HS2는 HTTP 상태코드가 412인 필수전제 조건 실패 에러를 되돌려 준다. String No
x-amz-copy-source-if-unmodified-since 헤더에 명시된 시간 이후로 소스 오브젝트가 수정되지 않았다면, 복사를 수행하라. 만약 일치하지 않다면, HS2는 HTTP 상태코드가 412인 필수전제 조건 실패 에러를 되돌려 준다. String No
x-amz-copy-source-if-modified-since 헤더에 명시된 시간 이후로 소스 오브젝트가 수정되었다면, 복사를 수행하라. 만약 일치하지 않다면, HS2는 HTTP 상태코드가 412인 필수전제 조건 실패 에러를 되돌려 준다. String No
파라미터:
요청 파라미터를 사용하지 않는다.
Versioning
버컷이 versioning이 활성화 상태라면, 같은 오브젝트에 여러개의 버젼들을 가질 수 있다. 기본적으로 x-amz-copy-source는 복사할 오브젝트의 마지막 버젼에 명시한다. 만약 마지막 버젼이 삭제표시가 되어있고, x-amz-copy-source에 버젼 아이디를 명시하지 않았다면, 오브젝트가 존재하지 않기 때문에 HS2는 404 에러를 되돌려 준다 만약 x-amz-copy-source에 버젼 아이디를 명시하고 버젼 아이디가 삭제표시를 가지고 있다면, HS2는 400 에러를 되돌려 준다. 왜냐하면 x-amz-copy-source를 위한 버젼으로써 삭제표시를 명시하는게 허락되지 않기 때문이다.
Header x-amz-copy-source: /bucket/object?versionId=VersionId
요청 XML:
요청 XML이 없음.

응답 헤더(Header):

이름 설명 타입
x-amz-copy-source-version-id 만약 소스 오브젝트의 버져닝이 활성화가 되어 있었다면, 복사된 소스 오브젝트의 버젼응 나타냄. String
x-amz-server-side-encryption 최초의 멀티파트 업로드 요청에서 server-side encryption 를 명시하였다면, 이 헤더가 응답에 포함된다. 이것은 HS2가 업로드 한 파트를 암호화하기위해 사용한 암호 알고리즘을 승인한다. String

요청 elements:

이름 설명 타입
CopyPartResult 오든 응답 요소를 포함. Container
ETag 새 파트의 ETag. String
LastModified 마지막으로 수정한 파트의 날짜. String

응답 XML:

<CopyObjectResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
        <LastModified>Z</LastModified>
        <ETag>"d41d8cd98f00b204e9800998ecf8427e"</ETag>
</CopyObjectResult>

특정 에러 코드:

에러코드 설명 HTTP 상태코드
NoSuchUpload 명시된 멀티파트 업로드가 존재 하지 않거나, 업로드된 아이디가 불분명하거나, 또는 삭제되었거나 완료된 멀티파트 오브젝트일 경우에 이 에러코드를 러턴한다. 404 Not Found
InvalidRequest 명시된 소스 복사가 바이트 범위 소스 복사로써 제공되지 않는다. 400 Bad Request

오브젝트 멀티파트 업로드

멀티파트 업로드 시, 파트를 업로드 한다. 이 API를 요청하기 전에, 먼저 InitiateMultipartUpload API를 호출해서 UploadId 값을 얻어야 한다. 그 후에 되돌려받은 UploadId를 가지고 파트를 업로드한다. 파트를 업로드 할때마다 ETag를 되돌려 받는데, 이 값은 멀티파트 업로드를 끝낼 때 요청 XML에 사용된다. PartNumber는 1~10000사이의 어떤 값이라도 가능하다. PartNumber는 멀티파트 업로드 오브젝트 내에서 유일한 값이어야 하고, 순서를 나타낸다. 예를 들면, ParNumber가 400, 200, 600 순으로 업로드를 하고 CompleteMultipart를 한다면, 200, 400, 600 순서대로 MultipartUpload를 완료한다. 그리고, 새로운 파트를 업로드 할때, 이전 파트업로드에 사용했던 ParNumber라면 기존의 업로든된 파트를 재작성한다. 각각의 파트는 적어도 5MB 이상이어야 하지만, 마지막 파트는 사이즈의 제한이 없다.

METHOD/URL PUT /objectName?uploadId=UploadId&partNumber=PartNumber HTTP/1.1
Header Host: bucketName.hbox.a3c.co.kr
Date: 날짜
Authorization: 인증값

요청 헤더(Header):

이름 설명 타입 필요여부
Content-Length 업로드하는 파트의 크기. Integer Yes
Content-MD5 데이터의 base64 인코딩된 128비트 MD5 값. 이 헤더는 요청 본문이 전송중에 손상되지 않았음을 확인 하는 확인 메시지로 사용됩니다. String No
Expect 100-Continue. Integer No
파라미터:
요청 파라미터 없음.
요청 XML:
요청 XML이 없음.

응답 헤더(Header):

이름 설명 타입
x-amz-server-side-encryption 최초의 멀티파트 업로드 요청에서 server-side encryption 를 명시하였다면, 이 헤더가 응답에 포함된다. 이것은 HS2가 업로드 한 파트를 암호화하기위해 사용한 암호 알고리즘을 승인한다. String
HTTP/1.1 200 UNKNOWN STATUS CODE
Content-Length: 0
ETag: "bc00541d80512bc0179f9f048674fc02"
Content-Type: text/html; charset=utf-8
x-amz-request-id: 4fe93ea20cd20b18e4000160
Date: Tue, 26 Jun 2012 04:46:28 GMT
Server: WEbSimpleStorage
응답 XML:
응답 XML이 없음.

특정 에러 코드:

에러코드 설명 HTTP 상태코드
NoSuchUpload 명시된 멀티파트 업로드가 존재 하지 않거나, 업로드된 아이디가 불분명하거나, 또는 삭제되었거나 완료된 멀티파트 오브젝트일 경우에 이 에러코드를 러턴한다. 404 Not Found

** 주의 사항:

공통사항

인증값 생성

WSS API에서 사용자 인증을 아래와 같이 할 수 있다. TBD

오류 코드

오류코드:

AccessDenied:
HTTP 403 Access Denied
AccessDenied:
HTTP 400 Anonymous users cannot copy objects. Please authenticate.
BadDigest:
HTTP 400
BucketAlreadyExist:
HTTP 409 The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.
BucketNotEmpty:
HTTP 409 The bucket you tried to delete is not empty.
NoSuchWebsiteConfiguration:
HTTP 404 The specified bucket does not have a website configuration
InvalidAccessKeyId:
HTTP 403 The Access Key Id you provided does not exist in our records.
InvalidArgument:
HTTP 400
InvalidBucketName:
HTTP 400
InvalidBucketState:
HTTP 409 The request is not valid with the current state of the bucket.
InvalidEncryptionAlgorithm:
HTTP 400 The Encryption request you specified is not valid. Supported value: AES256.
InvalidMultipartUploadError:
HTTP 400
InvalidPart:
HTTP 400
InvalidPartOrder:
HTTP 400
InvalidPayer:
HTTP 403 All access to this object has been disabled.
InvalidPolicyDocument:
HTTP 400
InvalidRange:
HTTP 416
InvalidRequest:
HTTP 400
InvalidTargetBucket:
HTTP 406
KeyNotFound:
HTTP 404
MalformedACL:
HTTP 400
MalformedPolicy:
HTTP 400
MalformedXML:
HTTP 400 The XML you provided was not well-formed or did not validate against our published schema.
MethodNotAllowed:
HTTP 405 The specified method is not allowed against this resource.
NoSuchKey:
HTTP 404 The resource you requested does not exist
NoSuchLifecycleConfiguration:
HTTP 404
NoSuchUpload:
HTTP 404
NotModified:
HTTP 304
NotSuchBucketPolicy:
HTTP 404
InvalidBucketState:
HTTP 409 Lifecycle configuration is currently not supported on a versioned bucket.
InvalidBucketState:
HTTP 409 Versioning is currently not supported on a bucket with lifecycle configuration. Delete lifecycle configuration before setting versioning for a bucket.
PreconditionFailed:
HTTP 412
PurgedAccount:
HTTP 403 The Account's status you provided is purged.
RequestTimeTooSkewed:
HTTP 403
SignatureDoesNotMatch:
HTTP 403