3464 ๋‹จ์–ด
17 ๋ถ„
๐Ÿ” AWS S3 Security

๐Ÿ” AWS S3 Security#

S3 ๋ณด์•ˆ์˜ ๋ชจ๋“  ๊ฒƒ โ€” Encryption, Access Control, Data Protection

AWS SAA ์‹œํ—˜์—์„œ S3 ๊ด€๋ จ ๋ฌธ์ œ์˜ ์ ˆ๋ฐ˜ ์ด์ƒ์ด ์ด ํŒŒ์ผ์˜ ๋‚ด์šฉ์—์„œ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค.


๋ชฉ์ฐจ#

  1. S3 Encryption Overview
  2. SSE-S3 (S3-Managed Keys)
  3. SSE-KMS (KMS-Managed Keys)
  4. SSE-C (Customer-Provided Keys)
  5. DSSE-KMS (Dual-Layer SSE)
  6. Client-Side Encryption (CSE)
  7. Encryption in Transit
  8. Default Encryption vs. Bucket Policy ์šฐ์„ ์ˆœ์œ„
  9. S3 Bucket Key
  10. S3 Access Logs
  11. Pre-signed URLs
  12. MFA Delete
  13. S3 Object Lock & Glacier Vault Lock
  14. CORS (Cross-Origin Resource Sharing)
  15. S3 Access Points
  16. S3 Object Lambda
  17. VPC Endpoint for S3
  18. ํ•ต์‹ฌ ์š”์•ฝ & ์‹œํ—˜ ํฌ์ธํŠธ
  19. ์ฐธ๊ณ  ์ž๋ฃŒ

1. S3 Encryption Overview#

์•”ํ˜ธํ™” ์œ ํ˜• ํ•œ๋ˆˆ์— ๋น„๊ต#

์œ ํ˜•ํ‚ค ๊ด€๋ฆฌ ์ฃผ์ฒดํ‚ค ์ €์žฅ์š”์ฒญ HeaderํŠน์ง•
SSE-S3AWSAWS ๋‚ด๋ถ€x-amz-server-side-encryption: AES256๊ธฐ๋ณธ๊ฐ’, ๋ฌด๋ฃŒ
SSE-KMSAWS KMSKMSx-amz-server-side-encryption: aws:kmsCloudTrail ๊ฐ์‚ฌ, ์ถ”๊ฐ€ ๋น„์šฉ
DSSE-KMSAWS KMSKMSx-amz-server-side-encryption: aws:kms:dsse์ด์ค‘ ์•”ํ˜ธํ™”, ๊ทœ์ • ์ค€์ˆ˜
SSE-CCustomerCustomer (AWS์— ์ €์žฅ ์•ˆ ํ•จ)HTTPS ํ•„์ˆ˜, ๋งค ์š”์ฒญ๋งˆ๋‹ค ํ‚ค ์ „๋‹ฌ๊ณ ๊ฐ ์™„์ „ ํ†ต์ œ
CSECustomerCustomer-์—…๋กœ๋“œ ์ „ ํด๋ผ์ด์–ธํŠธ ์ธก ์•”ํ˜ธํ™”

์„ ํƒ ๊ฐ€์ด๋“œ:

๋ณ„๋„ ์š”๊ตฌ์‚ฌํ•ญ ์—†์Œ โ†’ SSE-S3 (๊ธฐ๋ณธ๊ฐ’)
ํ‚ค ์‚ฌ์šฉ ๊ฐ์‚ฌ ๋กœ๊ทธ ํ•„์š” (๊ทœ์ • ์ค€์ˆ˜) โ†’ SSE-KMS (Customer Managed Key)
์ด์ค‘ ์•”ํ˜ธํ™” ๊ทœ์ • ์ค€์ˆ˜ ํ•„์š” โ†’ DSSE-KMS
ํ‚ค๋ฅผ ์™„์ „ํžˆ ์ง์ ‘ ํ†ต์ œ โ†’ SSE-C
AWS๊ฐ€ ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ์ ˆ๋Œ€ ๋ณด๋ฉด ์•ˆ ๋จ โ†’ Client-Side Encryption

2. SSE-S3 (S3-Managed Keys)#

  • AWS๊ฐ€ ํ‚ค๋ฅผ ์™„์ „ํžˆ ์ƒ์„ฑ, ๊ด€๋ฆฌ, ๊ต์ฒด โ€” ์‚ฌ์šฉ์ž ๊ฐœ์ž… ์—†์Œ
  • AES-256 ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ
  • 2023๋…„ 1์›” 5์ผ๋ถ€ํ„ฐ ๋ชจ๋“  ์‹ ๊ทœ Object์— ๊ธฐ๋ณธ ์ž๋™ ์ ์šฉ (์ถ”๊ฐ€ ๋น„์šฉ ์—†์Œ)
  • Cross-Account ๊ณต์œ  ๊ฐ€๋Šฅ

์š”์ฒญ ๋ฐฉ๋ฒ•:

PUT /my-object HTTP/1.1
x-amz-server-side-encryption: AES256

Bucket Policy๋กœ SSE-S3 ๊ฐ•์ œ ์˜ˆ์‹œ:

{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-bucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
}

3. SSE-KMS (KMS-Managed Keys)#

  • AWS KMS(Key Management Service)๋ฅผ ํ†ตํ•ด ํ‚ค ๊ด€๋ฆฌ
  • SSE-S3 ๋Œ€๋น„ ์ถ”๊ฐ€์ ์ธ ์ œ์–ด์™€ ๊ฐ์‚ฌ ๊ธฐ๋Šฅ ์ œ๊ณต

SSE-KMS ์žฅ์ :

  • ํ‚ค ์‚ฌ์šฉ ์ด๋ ฅ โ†’ AWS CloudTrail์— ์ž๋™ ๊ธฐ๋ก (์–ธ์ œ, ๋ˆ„๊ฐ€, ์–ด๋–ค Key๋กœ ์ ‘๊ทผํ–ˆ๋Š”์ง€)
  • Customer Managed Key (CMK) ์ƒ์„ฑ/๊ต์ฒด/๋น„ํ™œ์„ฑํ™” ์ง์ ‘ ์ œ์–ด
  • Cross-Account ์ ‘๊ทผ ์„ธ๋ฐ€ํ•œ ๊ถŒํ•œ ์„ค์ •

SSE-KMS ๋‹จ์  (์‹œํ—˜ ํฌ์ธํŠธ):

  • Upload ์‹œ GenerateDataKey KMS API ํ˜ธ์ถœ
  • Download ์‹œ Decrypt KMS API ํ˜ธ์ถœ
  • KMS ์ฟผํ„ฐ ์ œํ•œ: ๋ฆฌ์ „๋ณ„ 5,500 / 10,000 / 30,000 req/s
  • ๊ณ ์ฒ˜๋ฆฌ๋Ÿ‰ ํ™˜๊ฒฝ์—์„œ KMS ๋ณ‘๋ชฉ ๋ฐœ์ƒ ๊ฐ€๋Šฅ โ†’ Service Quotas Console์—์„œ ์ฆ๊ฐ€ ์š”์ฒญ

์š”์ฒญ ๋ฐฉ๋ฒ•:

PUT /my-object HTTP/1.1
x-amz-server-side-encryption: aws:kms
x-amz-server-side-encryption-aws-kms-key-id: arn:aws:kms:... (์„ ํƒ, ์ƒ๋žต ์‹œ AWS Managed Key ์‚ฌ์šฉ)

Bucket Policy๋กœ SSE-KMS ๊ฐ•์ œ ์˜ˆ์‹œ:

{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-bucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "aws:kms"
}
}
}

Cross-Account ๊ณ ๋ ค์‚ฌํ•ญ:

  • AWS Managed Key (aws/s3): ๊ฐ™์€ ๊ณ„์ •์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋‹ค๋ฅธ ๊ณ„์ •๊ณผ SSE-KMS ๋ฐ์ดํ„ฐ ๊ณต์œ : ๋ฐ˜๋“œ์‹œ Customer Managed Key(CMK) ์‚ฌ์šฉ

4. SSE-C (Customer-Provided Keys)#

  • ๊ณ ๊ฐ์ด ํ‚ค๋ฅผ ์ง์ ‘ ์ƒ์„ฑ/๊ด€๋ฆฌ, AWS๋Š” ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™” ์ž‘์—…๋งŒ ์ˆ˜ํ–‰
  • AWS๋Š” ํ‚ค๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ โ€” ์š”์ฒญ ์ฒ˜๋ฆฌ ํ›„ ์ฆ‰์‹œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œ
  • ๊ณ ๊ฐ์ด ํ‚ค ๋ถ„์‹ค ์‹œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ์™„์ „ ๋ถˆ๊ฐ€

ํ•„์ˆ˜ ์š”๊ฑด:

  • ๋ฐ˜๋“œ์‹œ HTTPS ์‚ฌ์šฉ (HTTP ์š”์ฒญ ์‹œ S3๊ฐ€ ๊ฑฐ๋ถ€)
  • ๋ชจ๋“  Upload/Download ์š”์ฒญ๋งˆ๋‹ค HTTP Header๋กœ ํ‚ค ์ „๋‹ฌ
PUT /my-object HTTP/1.1
x-amz-server-side-encryption-customer-algorithm: AES256
x-amz-server-side-encryption-customer-key: [Base64 ์ธ์ฝ”๋”ฉ๋œ ํ‚ค]
x-amz-server-side-encryption-customer-key-MD5: [ํ‚ค์˜ MD5]
WARNING

โš ๏ธ AWS ์ฝ˜์†”์—์„œ SSE-C ๊ฐ์ฒด ์ ‘๊ทผ ๋ถˆ๊ฐ€ (CLI/SDK๋งŒ ๊ฐ€๋Šฅ โ€” ํ‚ค๋ฅผ ๋งค๋ฒˆ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ)


5. DSSE-KMS (Dual-Layer SSE)#

  • KMS ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ ์ด์ค‘(Dual-Layer) ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์•”ํ˜ธํ™”
  • AES-256์„ ๋‘ ๋ฒˆ ๋…๋ฆฝ์ ์œผ๋กœ ์ ์šฉ:
    1. AWS KMS Data Encryption Key๋กœ 1์ฐจ ์•”ํ˜ธํ™”
    2. ๋ณ„๋„ S3 ๊ด€๋ฆฌ ์•”ํ˜ธํ™” ํ‚ค๋กœ 2์ฐจ ์•”ํ˜ธํ™”
  • ์—„๊ฒฉํ•œ ๊ทœ์ • ์ค€์ˆ˜(Compliance) ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ๋Š” ํ™˜๊ฒฝ์šฉ
  • SSE-KMS๋ณด๋‹ค ๋†’์€ ๋น„์šฉ ๋ฐ ์ง€์—ฐ ์‹œ๊ฐ„ ์ฆ๊ฐ€

6. Client-Side Encryption (CSE)#

  • ๋ฐ์ดํ„ฐ๋ฅผ S3์— Uploadํ•˜๊ธฐ ์ „ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์ง์ ‘ ์•”ํ˜ธํ™”
  • AWS SDK์˜ Amazon S3 Client-Side Encryption Library ํ™œ์šฉ
  • AWS๋Š” ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ˆ˜์‹  โ€” ์›๋ณธ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ ๋ถˆ๊ฐ€
  • ๊ณ ๊ฐ์ด ํ‚ค์™€ ์•”ํ˜ธํ™” ๋ผ์ดํ”„์‚ฌ์ดํด ์™„์ „ ๊ด€๋ฆฌ
[ํด๋ผ์ด์–ธํŠธ] [S3]
์›๋ณธ ๋ฐ์ดํ„ฐ
โ”‚ ํด๋ผ์ด์–ธํŠธ ์ธก ์•”ํ˜ธํ™”
โ–ผ
์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ โ”€โ”€HTTPSโ”€โ”€โ†’ ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ ์ €์žฅ
(S3๋Š” ๋‚ด์šฉ ๋ชจ๋ฆ„)

7. Encryption in Transit#

  • S3๋Š” ๋‘ ๊ฐ€์ง€ Endpoint ์ œ๊ณต:
    • HTTP Endpoint: ์•”ํ˜ธํ™” ์—†์Œ
    • HTTPS Endpoint: In-flight Encryption (SSL/TLS)
  • HTTPS ๊ถŒ์žฅ, SSE-C์—์„œ๋Š” HTTPS ํ•„์ˆ˜
  • ๋Œ€๋ถ€๋ถ„์˜ ํด๋ผ์ด์–ธํŠธ/SDK๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ HTTPS ์‚ฌ์šฉ

HTTPS ๊ฐ•์ œ (aws)#

{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}]
}
TIP

aws:SecureTransport: false๋ฅผ Denyํ•˜๋ฉด HTTP ์š”์ฒญ ์ฐจ๋‹จ. Bucket๊ณผ Object ๋ชจ๋‘ Resource์— ํฌํ•จํ•ด์•ผ ํ•จ.


8. Default Encryption vs. Bucket Policy ์šฐ์„ ์ˆœ์œ„#

TIP

Bucket Policy๊ฐ€ Default Encryption๋ณด๋‹ค ๋จผ์ € ํ‰๊ฐ€๋จ

Object Upload ์š”์ฒญ
โ”‚
โ–ผ
1๏ธโƒฃ Bucket Policy ํ‰๊ฐ€
(Deny ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋ฉด ์š”์ฒญ ๊ฑฐ๋ถ€)
โ”‚ Policy ํ†ต๊ณผ
โ–ผ
2๏ธโƒฃ Default Encryption ์ ์šฉ
(Header ์—†์œผ๋ฉด ๊ธฐ๋ณธ ์•”ํ˜ธํ™” ์„ค์ •์œผ๋กœ ์ฒ˜๋ฆฌ)

์‹ค์ œ ์‹œ๋‚˜๋ฆฌ์˜ค:

  • Default Encryption์„ SSE-KMS๋กœ ์„ค์ •ํ•ด๋„, Bucket Policy์—์„œ aws:kms Header๊ฐ€ ์—†๋Š” ์š”์ฒญ์„ Denyํ•˜๋ฉด ์ •์ฑ…์ด ์šฐ์„  ์ ์šฉ
  • x-amz-server-side-encryption Header ์—†์ด Uploadํ•˜๋ฉด โ†’ Default Encryption ์ ์šฉ (SSE-S3 ๋˜๋Š” SSE-KMS)

9. S3 Bucket Key#

  • SSE-KMS ์‚ฌ์šฉ ์‹œ KMS API ํ˜ธ์ถœ ํšŸ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ
  • Bucket Key๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด:
    • S3๊ฐ€ ๋ฒ„ํ‚ท ๋ ˆ๋ฒจ์—์„œ ๋‹จ๊ธฐ Bucket-level KMS Key๋ฅผ ์ƒ์„ฑ
    • ๊ฐœ๋ณ„ Object๋งˆ๋‹ค KMS ํ˜ธ์ถœ ๋Œ€์‹  Bucket Key๋กœ Data Key ์ƒ์„ฑ
    • KMS ํ˜ธ์ถœ ์ˆ˜ ๋Œ€ํญ ๊ฐ์†Œ โ†’ ๋น„์šฉ ์ ˆ๊ฐ + CloudTrail ๋กœ๊ทธ ๊ฐ์†Œ
Bucket Key ๋น„ํ™œ์„ฑํ™”:
Object 1 โ†’ KMS API Call โ†’ Data Key 1
Object 2 โ†’ KMS API Call โ†’ Data Key 2
Object 3 โ†’ KMS API Call โ†’ Data Key 3 (๋งŽ์€ KMS ๋น„์šฉ)
Bucket Key ํ™œ์„ฑํ™”:
Bucket โ†’ KMS API Call โ†’ Bucket Key
Object 1 โ†’ (Bucket Key๋กœ) โ†’ Data Key 1
Object 2 โ†’ (Bucket Key๋กœ) โ†’ Data Key 2
Object 3 โ†’ (Bucket Key๋กœ) โ†’ Data Key 3 (KMS ๋น„์šฉ ๋Œ€ํญ ๊ฐ์†Œ)

10. S3 Access Logs#

  • ๊ฐ์‚ฌ(Audit) ๋ชฉ์ ์œผ๋กœ S3์— ๋Œ€ํ•œ ๋ชจ๋“  ์š”์ฒญ์„ ๋‹ค๋ฅธ S3 Bucket์— ๋กœ๊ทธ๋กœ ๊ธฐ๋ก
  • ์–ด๋–ค ๊ณ„์ •, ์–ด๋–ค ์š”์ฒญ(์ธ๊ฐ€ ์—ฌ๋ถ€ ํฌํ•จ)์ด๋“  ๋ชจ๋‘ ๊ธฐ๋ก
  • ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ Athena ๋“ฑ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋„๊ตฌ๋กœ ๋ถ„์„ ๊ฐ€๋Šฅ
  • ๋กœ๊น… ๋Œ€์ƒ Bucket๊ณผ ๋กœ๊ทธ ์ €์žฅ Bucket์€ ๊ฐ™์€ AWS Region์— ์žˆ์–ด์•ผ ํ•จ
WARNING

โŒ ์ ˆ๋Œ€ ๊ธˆ์ง€: ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์ƒ Bucket = ๋กœ๊ทธ ์ €์žฅ Bucket โ†’ Logging Loop ๋ฐœ์ƒ โ†’ Bucket ํฌ๊ธฐ ์ง€์ˆ˜์  ์ฆ๊ฐ€

โœ… ์˜ฌ๋ฐ”๋ฅธ ๊ตฌ์„ฑ: [๋ชจ๋‹ˆํ„ฐ๋ง Bucket] โ†’ Access Logs โ†’ [๋ณ„๋„ Logging Bucket]


11. Pre-signed URLs#

  • ์ œํ•œ๋œ ์‹œ๊ฐ„ ๋™์•ˆ๋งŒ ์œ ํšจํ•œ S3 ๊ฐ์ฒด ์ ‘๊ทผ URL
  • S3 Console, AWS CLI, SDK๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • URL์„ ๋ฐ›์€ ์‚ฌ์šฉ์ž๋Š” URL ์ƒ์„ฑ์ž์˜ ๊ถŒํ•œ(Permission)์„ ๊ทธ๋Œ€๋กœ ์ƒ์† (GET/PUT)
  • Bucket์„ Public์œผ๋กœ ์—ด์ง€ ์•Š๊ณ  ์ผ์‹œ์ ์œผ๋กœ ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ์ ‘๊ทผ ํ—ˆ์šฉ

์œ ํšจ ์‹œ๊ฐ„#

์ƒ์„ฑ ๋ฐฉ๋ฒ•์œ ํšจ ์‹œ๊ฐ„
S3 Console์ตœ์†Œ 1๋ถ„, ์ตœ๋Œ€ 12์‹œ๊ฐ„ (720๋ถ„)
AWS CLI๊ธฐ๋ณธ 3,600์ดˆ, ์ตœ๋Œ€ 604,800์ดˆ (7์ผ)

ํ™œ์šฉ ์˜ˆ์‹œ#

[์•ฑ ์„œ๋ฒ„] โ”€ Pre-signed URL ์ƒ์„ฑ โ”€โ†’ [์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €]
โ”‚
โ–ผ
[S3 ๊ฐ์ฒด ์ง์ ‘ ์ ‘๊ทผ]
(Bucket์€ Private ์œ ์ง€,
์œ ํšจ ์‹œ๊ฐ„ ๋‚ด์—๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ)

Use Cases:

  • ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ํ”„๋ฆฌ๋ฏธ์—„ ์˜์ƒ ๋‹ค์šด๋กœ๋“œ ํ—ˆ์šฉ
  • ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์—…๋กœ๋“œ URL (์‚ฌ์šฉ์ž Profile ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ)
  • ์ผ์‹œ์ ์ธ ํŒŒ์ผ ๊ณต์œ 

12. MFA Delete#

  • Versioning์ด ํ™œ์„ฑํ™”๋œ Bucket์—์„œ ์ค‘์š” ์ž‘์—… ์‹œ MFA(Multi-Factor Authentication) ์ฝ”๋“œ ์š”๊ตฌ

MFA๊ฐ€ ํ•„์š”ํ•œ ์ž‘์—…#

โœ… MFA ํ•„์š”:
- Object Version ์˜๊ตฌ ์‚ญ์ œ (Permanently delete an object version)
- Versioning ๋น„ํ™œ์„ฑํ™” ๋˜๋Š” Suspend
โŒ MFA ๋ถˆํ•„์š”:
- Versioning ํ™œ์„ฑํ™”
- Delete Marker ์ถ”๊ฐ€ (= ์ผ๋ฐ˜ Delete ์ž‘์—…)
- Version ๋ชฉ๋ก ์กฐํšŒ

์„ค์ • ๊ทœ์น™#

ํ•ญ๋ชฉ๋‚ด์šฉ
์„ค์ • ๊ฐ€๋Šฅ ์ฃผ์ฒดBucket Owner (Root ๊ณ„์ •)๋งŒ ๊ฐ€๋Šฅ โ€” IAM User ๋ถˆ๊ฐ€
์ „์ œ ์กฐ๊ฑดBucket์— Versioning ํ™œ์„ฑํ™” ํ•„์ˆ˜
์„ค์ • ๋ฐฉ๋ฒ•CLI ๋˜๋Š” SDK๋งŒ ๊ฐ€๋Šฅ (Console ๋ฏธ์ง€์›)

13. S3 Object Lock & Glacier Vault Lock#

S3 Object Lock#

  • WORM (Write Once Read Many) ๋ชจ๋ธ ์ ์šฉ
  • ์ง€์ •๋œ ๊ธฐ๊ฐ„ ๋™์•ˆ Object Version ์‚ญ์ œ/์ˆ˜์ • ๋ถˆ๊ฐ€
  • Versioning ํ™œ์„ฑํ™” ํ•„์ˆ˜

Retention Mode ๋น„๊ต:

Mode์„ค๋ช…Root ํฌํ•จ ์‚ญ์ œ ๊ฐ€๋Šฅ?
Compliance Mode์–ด๋–ค ์‚ฌ์šฉ์ž๋„(Root ํฌํ•จ) ์ˆ˜์ •/์‚ญ์ œ ๋ถˆ๊ฐ€. ๋ณด์กด ๊ธฐ๊ฐ„ ๋‹จ์ถ• ๋ถˆ๊ฐ€โŒ ์ ˆ๋Œ€ ๋ถˆ๊ฐ€
Governance Mode๋Œ€๋ถ€๋ถ„ ์‚ฌ์šฉ์ž๋Š” ๋ถˆ๊ฐ€. s3:BypassGovernanceRetention ๊ถŒํ•œ ๋ณด์œ ์ž๋งŒ ๊ฐ€๋Šฅโœ… ํŠน๋ณ„ ๊ถŒํ•œ์ž๋งŒ

Retention Period:

  • Object๋ฅผ ๊ณ ์ • ๊ธฐ๊ฐ„ ๋™์•ˆ ๋ณดํ˜ธ
  • ๊ธฐ๊ฐ„ ์—ฐ์žฅ(Extend)์€ ๊ฐ€๋Šฅ, ๋‹จ์ถ•(Shorten)์€ Compliance Mode์—์„œ ๋ถˆ๊ฐ€

Legal Hold:

  • ๋ณด์กด ๊ธฐ๊ฐ„๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋ฌด๊ธฐํ•œ ์ž ๊ธˆ
  • s3:PutObjectLegalHold IAM ๊ถŒํ•œ์œผ๋กœ ์ž์œ ๋กญ๊ฒŒ ์ ์šฉ/ํ•ด์ œ ๊ฐ€๋Šฅ
  • ์˜ˆ: ์†Œ์†ก ์ง„ํ–‰ ์ค‘ ์ฆ๊ฑฐ ๋ณด์ „

Glacier Vault Lock#

  • S3 Glacier Vault์— Vault Lock Policy (JSON) ์ ์šฉ
  • WORM ๋ชจ๋ธ๋กœ ์•„์นด์ด๋ธŒ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ
  • ํ•œ ๋ฒˆ Lock๋˜๋ฉด ๋ˆ„๊ตฌ๋„ ์ •์ฑ… ๋ณ€๊ฒฝ/์‚ญ์ œ ๋ถˆ๊ฐ€ โ€” Root ํฌํ•จ
  • ๊ทœ์ • ์ค€์ˆ˜(Compliance) ๋ฐ ๋ฐ์ดํ„ฐ ๋ณด์กด(Data Retention) ์š”๊ตฌ์‚ฌํ•ญ ์ถฉ์กฑ
[Vault Lock Policy ์ž‘์„ฑ]
โ”‚
โ–ผ
[24์‹œ๊ฐ„ ์ด๋‚ด ๊ฒ€์ฆ ๊ธฐ๊ฐ„] โ† ์ด ๊ธฐ๊ฐ„ ์ค‘์—๋งŒ ์ •์ฑ… ์ˆ˜์ • ๊ฐ€๋Šฅ
โ”‚ ๊ฒ€์ฆ ์™„๋ฃŒ ํ›„ Lock ์‹คํ–‰
โ–ผ
[์ •์ฑ… ์˜๊ตฌ ์ž ๊ธˆ] โ† ์ดํ›„ ์ ˆ๋Œ€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€

14. CORS (Cross-Origin Resource Sharing)#

๊ธฐ๋ณธ ๊ฐœ๋…#

  • Origin = Scheme (Protocol) + Host (Domain) + Port
    • ์˜ˆ: https://example.com (scheme=https, host=example.com, port=443)
  • ์›น ๋ธŒ๋ผ์šฐ์ €์˜ Same-Origin Policy: ๋‹ค๋ฅธ Origin์˜ ๋ฆฌ์†Œ์Šค ์š”์ฒญ ๊ธฐ๋ณธ ์ฐจ๋‹จ
  • CORS Headers๋กœ ๋‹ค๋ฅธ Origin์—์„œ์˜ ์š”์ฒญ ํ—ˆ์šฉ ๊ฐ€๋Šฅ

Same Origin vs. Cross Origin#

Same Origin (ํ—ˆ์šฉ): https://example.com/app1 โ†’ https://example.com/app2
Cross Origin (์ฐจ๋‹จ): https://example.com โ†’ https://other.com

S3์—์„œ CORS ์„ค์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ#

  1. S3 ์ •์  ์›น์‚ฌ์ดํŠธ์—์„œ ๋‹ค๋ฅธ S3 Bucket์˜ ๋ฆฌ์†Œ์Šค ์ฐธ์กฐ
  2. ์›น ์•ฑ(๋‹ค๋ฅธ ๋„๋ฉ”์ธ)์ด S3 Bucket์˜ ํŒŒ์ผ์„ ์ง์ ‘ ์š”์ฒญ

CORS ์„ค์ • ์˜ˆ์‹œ (S3 Bucket์— ์ ์šฉ)#

<CORSConfiguration>
<CORSRule>
<AllowedOrigin>https://www.example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
<MaxAgeSeconds>3000</MaxAgeSeconds>
</CORSRule>
</CORSConfiguration>
  • <AllowedOrigin>: ํ—ˆ์šฉํ•  ์ถœ์ฒ˜ (๋กœ ์ „์ฒด ํ—ˆ์šฉ ๊ฐ€๋Šฅ)
  • <AllowedMethod>: ํ—ˆ์šฉํ•  HTTP ๋ฉ”์„œ๋“œ
  • <AllowedHeader>: ํ—ˆ์šฉํ•  Header
  • <MaxAgeSeconds>: Pre-flight ๊ฒฐ๊ณผ ์บ์‹œ ์‹œ๊ฐ„
TIP

CORS ์„ค์ •์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” Bucket (ํŒŒ์ผ์ด ์žˆ๋Š” ์ชฝ)์— ์„ค์ •. ์š”์ฒญํ•˜๋Š” ์ชฝ์ด ์•„๋‹˜.


15. S3 Access Points#

๊ฐœ๋…#

  • S3 Bucket์— ๋Œ€ํ•œ ๋…๋ฆฝ์ ์ธ ์ ‘๊ทผ ํฌ์ธํŠธ ์ƒ์„ฑ
  • ๊ฐ Access Point๋งˆ๋‹ค ๊ณ ์œ ํ•œ DNS ์ด๋ฆ„ + ๋…๋ฆฝ์ ์ธ Access Point Policy ๋ณด์œ 
  • ๋Œ€๊ทœ๋ชจ Bucket์˜ ๋ณด์•ˆ ๊ด€๋ฆฌ ๋‹จ์ˆœํ™” (Bucket Policy ๋ณต์žก์„ฑ ํ•ด์†Œ)
[S3 Bucket]
โ”‚
โ”œโ”€โ”€ [Access Point: /finance/*]
โ”‚ Access Point Policy: Finance ํŒ€๋งŒ ์ฝ๊ธฐ/์“ฐ๊ธฐ
โ”‚
โ”œโ”€โ”€ [Access Point: /analytics/*]
โ”‚ Access Point Policy: Analytics ํŒ€๋งŒ ์ฝ๊ธฐ
โ”‚
โ””โ”€โ”€ [Access Point: /logs/*]
Access Point Policy: Logging ์„œ๋น„์Šค๋งŒ ์“ฐ๊ธฐ

Access Point Policy#

  • Bucket Policy์™€ ์œ ์‚ฌํ•œ JSON ํ˜•์‹
  • Access Point Policy + Bucket Policy ๋ชจ๋‘ ํ—ˆ์šฉํ•ด์•ผ ์ ‘๊ทผ ๊ฐ€๋Šฅ

VPC Origin (VPC ์ „์šฉ Access Point)#

[EC2 - Private VPC]
โ”‚
โ–ผ
[VPC Endpoint (Gateway or Interface)]
โ”‚
โ–ผ
[S3 Access Point (VPC Origin)]
โ”‚
โ–ผ
[S3 Bucket]
  • VPC ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ Access Point ์ •์˜
  • VPC Endpoint ์ƒ์„ฑ ํ•„์ˆ˜
  • VPC Endpoint Policy์—์„œ ๋Œ€์ƒ Bucket๊ณผ Access Point์— ๋Œ€ํ•œ ์ ‘๊ทผ ํ—ˆ์šฉ ํ•„์š”

16. S3 Object Lambda#

๊ฐœ๋…#

  • S3์—์„œ Object๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ Lambda Function์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•œ ํ›„ ๋ฐ˜ํ™˜
  • ์›๋ณธ Object๋Š” ๋ณ€๊ฒฝ ์—†์Œ โ€” ์š”์ฒญ์ž์—๊ฒŒ๋งŒ ๋ณ€ํ™˜๋œ ๊ฒฐ๊ณผ ์ œ๊ณต
  • Bucket 1๊ฐœ๋กœ ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ œ๊ณต ๊ฐ€๋Šฅ

์•„ํ‚คํ…์ฒ˜#

[์›๋ณธ S3 Bucket]
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ”‚ โ”‚
[์ผ๋ฐ˜ Access Point] [Object Lambda [Object Lambda
Access Point 1] Access Point 2]
โ”‚ โ”‚
[Lambda: PII [Lambda: XML
Redaction] โ†’ JSON ๋ณ€ํ™˜]
โ”‚ โ”‚
[Analytics App] [Modern App]

์ฃผ์š” Use Cases#

Use Case์„ค๋ช…
PII Redaction (๊ฐœ์ธ์ •๋ณด ๋งˆ์Šคํ‚น)๋ถ„์„์šฉ/๋น„์šด์˜ ํ™˜๊ฒฝ์—์„œ ๊ฐœ์ธ์ •๋ณด ์ œ๊ฑฐ ํ›„ ๋ฐ˜ํ™˜
Format ConversionXML โ†’ JSON, CSV โ†’ Parquet ๋“ฑ ํฌ๋งท ๋ณ€ํ™˜
Image Processing์š”์ฒญ์ž์— ๋งž๊ฒŒ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•, ์›Œํ„ฐ๋งˆํฌ ์‚ฝ์ž…

17. VPC Endpoint for S3#

  • S3๋ฅผ ์ธํ„ฐ๋„ท ๊ฒฝ์œ  ์—†์ด VPC ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผ
  • Gateway Endpoint ํƒ€์ž… ์‚ฌ์šฉ โ€” ๋ฌด๋ฃŒ
  • Private Subnet์˜ EC2๊ฐ€ NAT Gateway ์—†์ด S3 ์ ‘๊ทผ ๊ฐ€๋Šฅ
โŒ ์ธํ„ฐ๋„ท ๊ฒฝ์œ  ๋ฐฉ์‹:
[EC2 - Private Subnet] โ†’ [NAT Gateway] โ†’ [Internet] โ†’ [S3]
(NAT Gateway ๋น„์šฉ + ๋ฐ์ดํ„ฐ ์ „์†ก ๋น„์šฉ ๋ฐœ์ƒ)
โœ… VPC Gateway Endpoint ๋ฐฉ์‹:
[EC2 - Private Subnet] โ†’ [VPC Gateway Endpoint] โ†’ [S3]
(๋น„์šฉ ์—†์Œ, ์ธํ„ฐ๋„ท ๊ฒฝ์œ  ์—†์Œ)

์„ค์ • ๊ตฌ์„ฑ์š”์†Œ:

  • Route Table์— S3์šฉ Prefix List ๊ฒฝ๋กœ ์ถ”๊ฐ€ (์ž๋™)
  • VPC Endpoint Policy๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ Bucket/Action ์ œํ•œ ๊ฐ€๋Šฅ
TIP

S3์™€ DynamoDB๋Š” Gateway Endpoint (๋ฌด๋ฃŒ). ๋‹ค๋ฅธ ์„œ๋น„์Šค๋Š” Interface Endpoint (๋น„์šฉ ๋ฐœ์ƒ).


18. ํ•ต์‹ฌ ์š”์•ฝ & ์‹œํ—˜ ํฌ์ธํŠธ#

์•”ํ˜ธํ™” ๊ฒฐ์ • ํŠธ๋ฆฌ#

์•”ํ˜ธํ™” ํ•„์š”?
โ”œโ”€โ”€ ์•„๋‹ˆ์š” โ†’ ๊ทธ๋ž˜๋„ SSE-S3 ๊ธฐ๋ณธ ์ ์šฉ๋จ (2023๋…„~)
โ””โ”€โ”€ ์˜ˆ
โ”œโ”€โ”€ ํ‚ค ๊ฐ์‚ฌ ๋กœ๊ทธ ํ•„์š”? (CloudTrail)
โ”‚ โ”œโ”€โ”€ ์˜ˆ โ†’ SSE-KMS (CMK)
โ”‚ โ”‚ KMS ์ฟผํ„ฐ ๊ณ ๋ ค, S3 Bucket Key๋กœ ๋น„์šฉ ์ ˆ๊ฐ
โ”‚ โ””โ”€โ”€ ์•„๋‹ˆ์š” โ†’ SSE-S3 (๋ฌด๋ฃŒ, ๊ฐ„๋‹จ)
โ”œโ”€โ”€ ์ด์ค‘ ์•”ํ˜ธํ™” ๊ทœ์ • ์ค€์ˆ˜? โ†’ DSSE-KMS
โ”œโ”€โ”€ ํ‚ค๋ฅผ ์ง์ ‘ ํ†ต์ œ/๊ด€๋ฆฌ? โ†’ SSE-C (HTTPS ํ•„์ˆ˜)
โ””โ”€โ”€ AWS๊ฐ€ ์›๋ณธ ๋ชป ๋ด์•ผ ํ•จ? โ†’ Client-Side Encryption

๋ณด์•ˆ ๋ ˆ์ด์–ด ํ‰๊ฐ€ ์ˆœ์„œ#

Object Upload ์š”์ฒญ
โ”‚
1๏ธโƒฃ Bucket Policy ํ‰๊ฐ€ (Deny ์กฐ๊ฑด ํ™•์ธ)
โ”‚
2๏ธโƒฃ Default Encryption ์ ์šฉ (Header ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’)
โ”‚
3๏ธโƒฃ IAM Policy ํ™•์ธ (User/Role ๊ถŒํ•œ)

๐Ÿ“Œ ์‹œํ—˜ ์ž์ฃผ ์ถœ์ œ ํฌ์ธํŠธ ์ด์ •๋ฆฌ#

ํฌ์ธํŠธ๋‚ด์šฉ
S3 ๊ธฐ๋ณธ ์•”ํ˜ธํ™” (2023~)SSE-S3 ์ž๋™ ์ ์šฉ, ์ถ”๊ฐ€ ๋น„์šฉ ์—†์Œ
SSE-S3 Headerx-amz-server-side-encryption: AES256
SSE-KMS Headerx-amz-server-side-encryption: aws:kms
SSE-C ํ•„์ˆ˜ ์š”๊ฑดHTTPS (HTTP ์š”์ฒญ ์‹œ S3๊ฐ€ ๊ฑฐ๋ถ€)
SSE-C ํ‚ค ์ €์žฅAWS๋Š” ํ‚ค ์ €์žฅ ์•ˆ ํ•จ, ๋งค ์š”์ฒญ ์‹œ Header๋กœ ์ „๋‹ฌ
SSE-KMS Cross-AccountCustomer Managed Key(CMK) ํ•„์ˆ˜
SSE-KMS ๋ณ‘๋ชฉKMS ์ฟผํ„ฐ ์ดˆ๊ณผ ๊ฐ€๋Šฅ, S3 Bucket Key๋กœ KMS ํ˜ธ์ถœ ๊ฐ์†Œ
Bucket Policy ํ‰๊ฐ€Default Encryption๋ณด๋‹ค ๋จผ์ € ํ‰๊ฐ€
HTTPS ๊ฐ•์ œ ์ •์ฑ…aws:SecureTransport: false โ†’ Deny
Access Logs Loop ๋ฐฉ์ง€๋ชจ๋‹ˆํ„ฐ๋ง Bucket โ‰  ๋กœ๊ทธ ์ €์žฅ Bucket (์ ˆ๋Œ€ ๊ฐ™์•„์„  ์•ˆ ๋จ)
Pre-signed URL ์œ ํšจ ๊ธฐ๊ฐ„Console 12h / CLI ์ตœ๋Œ€ 7์ผ (604,800์ดˆ)
Pre-signed URL ๊ถŒํ•œ์ƒ์„ฑ์ž์˜ ๊ถŒํ•œ ์ƒ์†
MFA Delete ์„ค์ • ์ฃผ์ฒดRoot ๊ณ„์ •(Bucket Owner)๋งŒ ๊ฐ€๋Šฅ
MFA Delete ์ „์ œVersioning ํ™œ์„ฑํ™” ํ•„์ˆ˜
MFA Delete ํ•„์š” ์ž‘์—…์˜๊ตฌ ๋ฒ„์ „ ์‚ญ์ œ, Versioning Suspend
MFA Delete ๋ถˆํ•„์š” ์ž‘์—…Versioning ํ™œ์„ฑํ™”, Delete Marker ์ถ”๊ฐ€
Object Lock ์ „์ œVersioning ํ™œ์„ฑํ™” ํ•„์ˆ˜
Compliance ModeRoot ํฌํ•จ ๋ˆ„๊ตฌ๋„ ์ˆ˜์ •/์‚ญ์ œ ๋ถˆ๊ฐ€
Governance Modes3:BypassGovernanceRetention ๊ถŒํ•œ์ž๋งŒ ์ˆ˜์ • ๊ฐ€๋Šฅ
Legal Hold๋ณด์กด ๊ธฐ๊ฐ„๊ณผ ๋ฌด๊ด€, ๋ฌด๊ธฐํ•œ ์ž ๊ธˆ
Glacier Vault Lockํ•œ ๋ฒˆ Lock ํ›„ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ (Root ํฌํ•จ)
CORS ์„ค์ • ์œ„์น˜๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” Bucket์— ์„ค์ • (์š”์ฒญํ•˜๋Š” ์ชฝ ์•„๋‹˜)
Access Points๊ฐ์ž ๋…๋ฆฝ DNS + ๋…๋ฆฝ Policy
VPC Access PointVPC Endpoint + Endpoint Policy ๋ชจ๋‘ ์„ค์ • ํ•„์š”
S3 Object Lambda์›๋ณธ ๋ณ€๊ฒฝ ์—†์Œ, Lambda๊ฐ€ ๋ณ€ํ™˜ ํ›„ ๋ฐ˜ํ™˜
VPC Endpoint ํƒ€์ž…S3, DynamoDB โ†’ Gateway Endpoint (๋ฌด๋ฃŒ)

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ#