본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

S3 API 호환성 (S3 API compatibility)

원문 보기 위키 갱신

R2는 사용자와 애플리케이션이 쉽게 마이그레이션할 수 있도록 S3 API를 구현해요. AWS S3와 비교하면 Cloudflare는 일부 API 작업의 기능을 제거하고 다른 기능을 추가했어요. 아래에 현재 구현 상태와 함께 S3 API 작업을 나열했어요. 기능 구현은 현재 진행 중이에요. 업데이트를 보려면 이 페이지를 다시 확인해 주세요.

이 API는 https://<ACCOUNT_ID>.r2.cloudflarestorage.com 엔드포인트를 통해 사용할 수 있어요. Cloudflare 대시보드에서 계정 ID를 찾아보세요.

출처: 문서

본문

이 페이지 읽는 방법 (How to read this page)

이 페이지에는 버킷 수준 작업(bucket-level operations)과 객체 수준 작업(object-level operations) 두 섹션이 있어요.

각 섹션에는 구현된 API 표와 구현되지 않은 API 표, 두 개의 표가 있어요.

각 표의 기능(Feature) 열을 참고해 어떤 API의 어떤 기능이 구현되었고 어떤 기능이 구현되지 않았는지 확인해요.

✅ 기능 구현됨 (Feature Implemented) 🚧 기능 구현됨 (실험적) (Feature Implemented (Experimental)) ❌ 기능 미구현 (Feature Not Implemented)

버킷 지역 (Bucket region)

S3 API를 사용할 때 R2 버킷의 지역(region)은 auto예요. 지역을 지정할 수 없는 도구와의 호환성을 위해 빈 값과 us-east-1은 auto 지역으로 별칭이 지정돼요.

이것은 CreateBucket API의 LocationConstraint에도 적용돼요.

체크섬 유형 (Checksum Types)

체크섬에는 알고리즘과 유형 ↗︎이 있어요. 아래 표를 참고해요.

| 체크섬 알고리즘 | FULL_OBJECT | COMPOSITE | | CRC-64/NVME (CRC64NVME) | ✅ | ❌ | | CRC-32 (CRC32) | ❌ | ✅ | | CRC-32C (CRC32C) | ❌ | ✅ | | SHA-1 (SHA1) | ❌ | ✅ | | SHA-256 (SHA256) | ❌ | ✅ |

버킷 수준 작업 (Bucket-level operations)

다음 표들은 버킷 수준 작업과 관련이 있어요.

구현된 버킷 수준 작업 (Implemented bucket-level operations)

다음은 구현된 버킷 수준 작업 목록이에요. 기능(Feature) 열을 참고해 어떤 기능이 구현되었는지(✅) 어떤 기능이 구현되지 않았는지(❌) 확인해요.

| API 이름 | 기능 | | ✅ ListBuckets ↗︎ | | | ✅ HeadBucket ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ CreateBucket ↗︎ | ❌ ACL:   ❌ x-amz-acl   ❌ x-amz-grant-full-control   ❌ x-amz-grant-read   ❌ x-amz-grant-read-acp   ❌ x-amz-grant-write   ❌ x-amz-grant-write-acp ❌ Object Locking:   ❌ x-amz-bucket-object-lock-enabled ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ DeleteBucket ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ DeleteBucketCors ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ GetBucketCors ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ GetBucketLifecycleConfiguration ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ GetBucketLocation ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ GetBucketEncryption ↗︎ | ❌ Bucket Owner: ❌ x-amz-expected-bucket-owner | | ✅ PutBucketCors ↗︎ | ❌ Checksums:   ❌ x-amz-sdk-checksum-algorithm   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ PutBucketLifecycleConfiguration ↗︎ | ❌ Checksums:   ❌ x-amz-sdk-checksum-algorithm   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner |

구현되지 않은 버킷 수준 작업 (Unimplemented bucket-level operations)

구현되지 않은 버킷 수준 작업

| API 이름 | 기능 | | ❌ GetBucketAccelerateConfiguration ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketAcl ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketAnalyticsConfiguration ↗︎ | ❌ id ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketIntelligentTieringConfiguration ↗︎ | ❌ id | | ❌ GetBucketInventoryConfiguration ↗︎ | ❌ id ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketLifecycle ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketLogging ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketMetricsConfiguration ↗︎ | ❌ id ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketNotification ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketNotificationConfiguration ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketOwnershipControls ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketPolicy ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketPolicyStatus ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketReplication ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketRequestPayment ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketTagging ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketVersioning ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetBucketWebsite ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetObjectLockConfiguration ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ GetPublicAccessBlock ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ ListBucketAnalyticsConfigurations ↗︎ | ❌ Query Parameters:   ❌ continuation-token ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ ListBucketIntelligentTieringConfigurations ↗︎ | ❌ Query Parameters:   ❌ continuation-token ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ ListBucketInventoryConfigurations ↗︎ | ❌ Query Parameters:   ❌ continuation-token ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ ListBucketMetricsConfigurations ↗︎ | ❌ Query Parameters:   ❌ continuation-token ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketAccelerateConfiguration ↗︎ | ❌ Checksums:   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketAcl ↗︎ | ❌ Permissions:   ❌ x-amz-grant-full-control   ❌ x-amz-grant-read   ❌ x-amz-grant-read-acp   ❌ x-amz-grant-write   ❌ x-amz-grant-write-acp ❌ Checksums:   ❌ x-amz-sdk-checksum-algorithm   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketAnalyticsConfiguration ↗︎ | ❌ id ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketEncryption ↗︎ | ❌ Checksums:   ❌ x-amz-sdk-checksum-algorithm   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketIntelligentTieringConfiguration ↗︎ | ❌ id ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketInventoryConfiguration ↗︎ | ❌ id ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketLifecycle ↗︎ | ❌ Checksums:   ❌ x-amz-sdk-checksum-algorithm   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketLogging ↗︎ | ❌ Checksums:   ❌ Content-MD5   ❌ x-amz-sdk-checksum-algorithm   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketMetricsConfiguration ↗︎ | ❌ id ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketNotification ↗︎ | ❌ Checksums:   ❌ Content-MD5   ❌ x-amz-sdk-checksum-algorithm   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketNotificationConfiguration ↗︎ | ❌ Validation:   ❌ x-amz-skip-destination-validation ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketOwnershipControls ↗︎ | ❌ Checksums:   ❌ Content-MD5 ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketPolicy ↗︎ | ❌ Validation:   ❌ x-amz-confirm-remove-self-bucket-access ❌ Checksums:   ❌ Content-MD5   ❌ x-amz-sdk-checksum-algorithm   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketReplication ↗︎ | ❌ Object Locking:   ❌ x-amz-bucket-object-lock-token ❌ Checksums:   ❌ Content-MD5   ❌ x-amz-sdk-checksum-algorithm   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketRequestPayment ↗︎ | ❌ Checksums:   ❌ Content-MD5   ❌ x-amz-sdk-checksum-algorithm   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketTagging ↗︎ | ❌ Checksums:   ❌ Content-MD5   ❌ x-amz-sdk-checksum-algorithm   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketVersioning ↗︎ | ❌ Multi-factor authentication:   ❌ x-amz-mfa ❌ Checksums:   ❌ Content-MD5   ❌ x-amz-sdk-checksum-algorithm   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutBucketWebsite ↗︎ | ❌ Checksums:   ❌ Content-MD5 ❌ Bucket Owner: ❌ x-amz-expected-bucket-owner | | ❌ PutObjectLockConfiguration ↗︎ | ❌ Object Locking:   ❌ x-amz-bucket-object-lock-token ❌ Checksums:   ❌ Content-MD5 ❌ Request Payer:   ❌ x-amz-request-payer ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ❌ PutPublicAccessBlock ↗︎ | ❌ Checksums:   ❌ Content-MD5   ❌ x-amz-sdk-checksum-algorithm   ❌ x-amz-checksum-algorithm ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner |

객체 수준 작업 (Object-level operations)

다음 표들은 객체 수준 작업과 관련이 있어요.

구현된 객체 수준 작업 (Implemented object-level operations)

다음은 구현된 객체 수준 작업 목록이에요. 기능(Feature) 열을 참고해 어떤 기능이 구현되었는지(✅) 어떤 기능이 구현되지 않았는지(❌) 확인해요.

동작 및 제한 사항 (Behaviors & Limitations)

UploadPart: 같은 파트 번호에 업로드하면 이전 파트를 대체해요. 같은 파트에 대한 후속 업로드가 실패하면 원래 파트는 손실되고 다시 업로드해야 해요.

| API 이름 | 기능 | | ✅ HeadObject ↗︎ | ✅ Conditional Operations:   ✅ If-Match   ✅ If-Modified-Since   ✅ If-None-Match   ✅ If-Unmodified-Since ✅ Range:   ✅ Range (has no effect in HeadObject)   ✅ partNumber ✅ SSE-C:   ✅ x-amz-server-side-encryption-customer-algorithm   ✅ x-amz-server-side-encryption-customer-key   ✅ x-amz-server-side-encryption-customer-key-MD5 ❌ Request Payer:   ❌ x-amz-request-payer ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ ListObjects ↗︎ | Query Parameters:   ✅ delimiter   ✅ encoding-type   ✅ marker   ✅ max-keys   ✅ prefix ❌ Request Payer:   ❌ x-amz-request-payer ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ ListObjectsV2 ↗︎ | Query Parameters:   ✅ list-type   ✅ continuation-token   ✅ delimiter   ✅ encoding-type   ✅ fetch-owner   ✅ max-keys   ✅ prefix   ✅ start-after ❌ Request Payer:   ❌ x-amz-request-payer ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ GetObject ↗︎ | ✅ Conditional Operations:   ✅ If-Match   ✅ If-Modified-Since   ✅ If-None-Match   ✅ If-Unmodified-Since ✅ Range:   ✅ Range   ✅ PartNumber ✅ SSE-C:   ✅ x-amz-server-side-encryption-customer-algorithm   ✅ x-amz-server-side-encryption-customer-key   ✅ x-amz-server-side-encryption-customer-key-MD5 ❌ Request Payer:   ❌ x-amz-request-payer ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ PutObject ↗︎ | ✅ Conditional Operations:   ✅ If-Match   ✅ If-Modified-Since   ✅ If-None-Match   ✅ If-Unmodified-Since ✅ System Metadata:   ✅ Content-Type   ✅ Cache-Control   ✅ Content-Disposition   ✅ Content-Encoding   ✅ Content-Language   ✅ Expires   ✅ Content-MD5 ✅ Storage Class:   ✅ x-amz-storage-class     ✅ STANDARD     ✅ STANDARD_IA ❌ Object Lifecycle ❌ Website:   ❌ x-amz-website-redirect-location ❌ SSE:   ❌ x-amz-server-side-encryption-aws-kms-key-id   ❌ x-amz-server-side-encryption   ❌ x-amz-server-side-encryption-context   ❌ x-amz-server-side-encryption-bucket-key-enabled ✅ SSE-C:   ✅ x-amz-server-side-encryption-customer-algorithm   ✅ x-amz-server-side-encryption-customer-key   ✅ x-amz-server-side-encryption-customer-key-MD5 ❌ Request Payer:   ❌ x-amz-request-payer ❌ Tagging:   ❌ x-amz-tagging ❌ Object Locking:   ❌ x-amz-object-lock-mode   ❌ x-amz-object-lock-retain-until-date   ❌ x-amz-object-lock-legal-hold ❌ ACL:   ❌ x-amz-acl   ❌ x-amz-grant-full-control   ❌ x-amz-grant-read   ❌ x-amz-grant-read-acp   ❌ x-amz-grant-write-acp ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ DeleteObject ↗︎ | ❌ Multi-factor authentication:   ❌ x-amz-mfa ❌ Object Locking:   ❌ x-amz-bypass-governance-retention ❌ Request Payer:   ❌ x-amz-request-payer ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ DeleteObjects ↗︎ | ❌ Multi-factor authentication:   ❌ x-amz-mfa ❌ Object Locking:   ❌ x-amz-bypass-governance-retention ❌ Request Payer:   ❌ x-amz-request-payer ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ ListMultipartUploads ↗︎ | ✅ Query Parameters:   ✅ delimiter   ✅ encoding-type   ✅ key-marker   ✅️ max-uploads   ✅ prefix   ✅ upload-id-marker | | ✅ CreateMultipartUpload ↗︎ | ✅ System Metadata:   ✅ Content-Type   ✅ Cache-Control   ✅ Content-Disposition   ✅ Content-Encoding   ✅ Content-Language   ✅ Expires   ✅ Content-MD5 ✅ Storage Class:   ✅ x-amz-storage-class     ✅ STANDARD     ✅ STANDARD_IA ❌ Website:   ❌ x-amz-website-redirect-location ❌ SSE:   ❌ x-amz-server-side-encryption-aws-kms-key-id   ❌ x-amz-server-side-encryption   ❌ x-amz-server-side-encryption-context   ❌ x-amz-server-side-encryption-bucket-key-enabled ✅ SSE-C:   ✅ x-amz-server-side-encryption-customer-algorithm   ✅ x-amz-server-side-encryption-customer-key   ✅ x-amz-server-side-encryption-customer-key-MD5 ❌ Request Payer:   ❌ x-amz-request-payer ❌ Tagging:   ❌ x-amz-tagging ❌ Object Locking:   ❌ x-amz-object-lock-mode   ❌ x-amz-object-lock-retain-until-date   ❌ x-amz-object-lock-legal-hold ❌ ACL:   ❌ x-amz-acl   ❌ x-amz-grant-full-control   ❌ x-amz-grant-read   ❌ x-amz-grant-read-acp   ❌ x-amz-grant-write-acp ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ CompleteMultipartUpload ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner ❌ Request Payer:   ❌ x-amz-request-payer | | ✅ AbortMultipartUpload ↗︎ | ❌ Request Payer:   ❌ x-amz-request-payer | | ✅ CopyObject ↗︎ | ✅ Operation Metadata:   ✅ x-amz-metadata-directive ✅ System Metadata:   ✅ Content-Type   ✅ Cache-Control   ✅ Content-Disposition   ✅ Content-Encoding   ✅ Content-Language   ✅ Expires ✅ Conditional Operations:   ✅ x-amz-copy-source   ✅ x-amz-copy-source-if-match   ✅ x-amz-copy-source-if-modified-since   ✅ x-amz-copy-source-if-none-match   ✅ x-amz-copy-source-if-unmodified-since ✅ Storage Class:   ✅ x-amz-storage-class     ✅ STANDARD     ✅ STANDARD_IA ❌ ACL:   ❌ x-amz-acl   ❌ x-amz-grant-full-control   ❌ x-amz-grant-read   ❌ x-amz-grant-read-acp   ❌ x-amz-grant-write-acp ❌ Website:   ❌ x-amz-website-redirect-location ❌ SSE:   ❌ x-amz-server-side-encryption   ❌ x-amz-server-side-encryption-aws-kms-key-id   ❌ x-amz-server-side-encryption-context   ❌ x-amz-server-side-encryption-bucket-key-enabled ✅ SSE-C:   ✅ x-amz-server-side-encryption-customer-algorithm   ✅ x-amz-server-side-encryption-customer-key   ✅ x-amz-server-side-encryption-customer-key-MD5   ✅ x-amz-copy-source-server-side-encryption-customer-algorithm   ✅ x-amz-copy-source-server-side-encryption-customer-key   ✅ x-amz-copy-source-server-side-encryption-customer-key-MD5 ❌ Request Payer:   ❌ x-amz-request-payer ❌ Tagging:   ❌ x-amz-tagging   ❌ x-amz-tagging-directive ❌ Object Locking:   ❌ x-amz-object-lock-mode   ❌ x-amz-object-lock-retain-until-date   ❌ x-amz-object-lock-legal-hold ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner   ❌ x-amz-source-expected-bucket-owner ❌ Checksums:   ❌ x-amz-checksum-algorithm | | ✅ UploadPart ↗︎ | ✅ System Metadata:   ✅ Content-MD5 ❌ SSE:   ❌ x-amz-server-side-encryption ✅ SSE-C:   ✅ x-amz-server-side-encryption-customer-algorithm   ✅ x-amz-server-side-encryption-customer-key   ✅ x-amz-server-side-encryption-customer-key-MD5 ❌ Request Payer:   ❌ x-amz-request-payer ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner | | ✅ UploadPartCopy ↗︎ | ✅ Copy Source:   ✅ x-amz-copy-source (required) ❌ Conditional Operations:   ❌ x-amz-copy-source-if-match   ❌ x-amz-copy-source-if-modified-since   ❌ x-amz-copy-source-if-none-match   ❌ x-amz-copy-source-if-unmodified-since ✅ Range:   ✅ x-amz-copy-source-range ✅ SSE-C:   ✅ x-amz-server-side-encryption-customer-algorithm   ✅ x-amz-server-side-encryption-customer-key   ✅ x-amz-server-side-encryption-customer-key-MD5   ✅ x-amz-copy-source-server-side-encryption-customer-algorithm   ✅ x-amz-copy-source-server-side-encryption-customer-key   ✅ x-amz-copy-source-server-side-encryption-customer-key-MD5 ❌ Request Payer:   ❌ x-amz-request-payer ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner   ❌ x-amz-source-expected-bucket-owner | | ✅ ListParts ↗︎ | Query Parameters:   ✅ max-parts   ✅ part-number-marker ❌ Request Payer:   ❌ x-amz-request-payer ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner |

구현되지 않은 객체 수준 작업 (Unimplemented object-level operations)

구현되지 않은 객체 수준 작업

| API 이름 | 기능 | | ❌ GetObjectTagging ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner ❌ Request Payer:   ❌ x-amz-request-payer | | ❌ PutObjectTagging ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner ❌ Request Payer:   ❌ x-amz-request-payer ❌ Checksums:   ❌ x-amz-sdk-checksum-algorithm | | ❌ DeleteObjectTagging ↗︎ | ❌ Bucket Owner:   ❌ x-amz-expected-bucket-owner |

더 알아보기 (Learn more)