๐ AWS S3 Security
S3 ๋ณด์์ ๋ชจ๋ ๊ฒ โ Encryption, Access Control, Data Protection
AWS SAA ์ํ์์ S3 ๊ด๋ จ ๋ฌธ์ ์ ์ ๋ฐ ์ด์์ด ์ด ํ์ผ์ ๋ด์ฉ์์ ์ถ์ ๋ฉ๋๋ค.
๋ชฉ์ฐจ
- S3 Encryption Overview
- SSE-S3 (S3-Managed Keys)
- SSE-KMS (KMS-Managed Keys)
- SSE-C (Customer-Provided Keys)
- DSSE-KMS (Dual-Layer SSE)
- Client-Side Encryption (CSE)
- Encryption in Transit
- Default Encryption vs. Bucket Policy ์ฐ์ ์์
- S3 Bucket Key
- S3 Access Logs
- Pre-signed URLs
- MFA Delete
- S3 Object Lock & Glacier Vault Lock
- CORS (Cross-Origin Resource Sharing)
- S3 Access Points
- S3 Object Lambda
- VPC Endpoint for S3
- ํต์ฌ ์์ฝ & ์ํ ํฌ์ธํธ
- ์ฐธ๊ณ ์๋ฃ
1. S3 Encryption Overview
์ํธํ ์ ํ ํ๋์ ๋น๊ต
| ์ ํ | ํค ๊ด๋ฆฌ ์ฃผ์ฒด | ํค ์ ์ฅ | ์์ฒญ Header | ํน์ง |
|---|---|---|---|---|
| SSE-S3 | AWS | AWS ๋ด๋ถ | x-amz-server-side-encryption: AES256 | ๊ธฐ๋ณธ๊ฐ, ๋ฌด๋ฃ |
| SSE-KMS | AWS KMS | KMS | x-amz-server-side-encryption: aws:kms | CloudTrail ๊ฐ์ฌ, ์ถ๊ฐ ๋น์ฉ |
| DSSE-KMS | AWS KMS | KMS | x-amz-server-side-encryption: aws:kms:dsse | ์ด์ค ์ํธํ, ๊ท์ ์ค์ |
| SSE-C | Customer | Customer (AWS์ ์ ์ฅ ์ ํจ) | HTTPS ํ์, ๋งค ์์ฒญ๋ง๋ค ํค ์ ๋ฌ | ๊ณ ๊ฐ ์์ ํต์ |
| CSE | Customer | Customer | - | ์ ๋ก๋ ์ ํด๋ผ์ด์ธํธ ์ธก ์ํธํ |
์ ํ ๊ฐ์ด๋:
๋ณ๋ ์๊ตฌ์ฌํญ ์์ โ SSE-S3 (๊ธฐ๋ณธ๊ฐ)ํค ์ฌ์ฉ ๊ฐ์ฌ ๋ก๊ทธ ํ์ (๊ท์ ์ค์) โ SSE-KMS (Customer Managed Key)์ด์ค ์ํธํ ๊ท์ ์ค์ ํ์ โ DSSE-KMSํค๋ฅผ ์์ ํ ์ง์ ํต์ โ SSE-CAWS๊ฐ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ๋ณด๋ฉด ์ ๋จ โ Client-Side Encryption2. SSE-S3 (S3-Managed Keys)
- AWS๊ฐ ํค๋ฅผ ์์ ํ ์์ฑ, ๊ด๋ฆฌ, ๊ต์ฒด โ ์ฌ์ฉ์ ๊ฐ์ ์์
- AES-256 ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ
- 2023๋ 1์ 5์ผ๋ถํฐ ๋ชจ๋ ์ ๊ท Object์ ๊ธฐ๋ณธ ์๋ ์ ์ฉ (์ถ๊ฐ ๋น์ฉ ์์)
- Cross-Account ๊ณต์ ๊ฐ๋ฅ
์์ฒญ ๋ฐฉ๋ฒ:
PUT /my-object HTTP/1.1x-amz-server-side-encryption: AES256Bucket 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 ์
GenerateDataKeyKMS API ํธ์ถ - Download ์
DecryptKMS API ํธ์ถ - KMS ์ฟผํฐ ์ ํ: ๋ฆฌ์ ๋ณ 5,500 / 10,000 / 30,000 req/s
- ๊ณ ์ฒ๋ฆฌ๋ ํ๊ฒฝ์์ KMS ๋ณ๋ชฉ ๋ฐ์ ๊ฐ๋ฅ โ Service Quotas Console์์ ์ฆ๊ฐ ์์ฒญ
์์ฒญ ๋ฐฉ๋ฒ:
PUT /my-object HTTP/1.1x-amz-server-side-encryption: aws:kmsx-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.1x-amz-server-side-encryption-customer-algorithm: AES256x-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์ ๋ ๋ฒ ๋
๋ฆฝ์ ์ผ๋ก ์ ์ฉ:
- AWS KMS Data Encryption Key๋ก 1์ฐจ ์ํธํ
- ๋ณ๋ 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 ์ฐ์ ์์
TIPBucket Policy๊ฐ Default Encryption๋ณด๋ค ๋จผ์ ํ๊ฐ๋จ
Object Upload ์์ฒญ โ โผ1๏ธโฃ Bucket Policy ํ๊ฐ (Deny ์กฐ๊ฑด์ ํด๋นํ๋ฉด ์์ฒญ ๊ฑฐ๋ถ) โ Policy ํต๊ณผ โผ2๏ธโฃ Default Encryption ์ ์ฉ (Header ์์ผ๋ฉด ๊ธฐ๋ณธ ์ํธํ ์ค์ ์ผ๋ก ์ฒ๋ฆฌ)์ค์ ์๋๋ฆฌ์ค:
- Default Encryption์ SSE-KMS๋ก ์ค์ ํด๋, Bucket Policy์์
aws:kmsHeader๊ฐ ์๋ ์์ฒญ์ Denyํ๋ฉด ์ ์ฑ ์ด ์ฐ์ ์ ์ฉ x-amz-server-side-encryptionHeader ์์ด 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:PutObjectLegalHoldIAM ๊ถํ์ผ๋ก ์์ ๋กญ๊ฒ ์ ์ฉ/ํด์ ๊ฐ๋ฅ- ์: ์์ก ์งํ ์ค ์ฆ๊ฑฐ ๋ณด์
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/app2Cross Origin (์ฐจ๋จ): https://example.com โ https://other.comS3์์ CORS ์ค์ ์ด ํ์ํ ๊ฒฝ์ฐ
- S3 ์ ์ ์น์ฌ์ดํธ์์ ๋ค๋ฅธ S3 Bucket์ ๋ฆฌ์์ค ์ฐธ์กฐ
- ์น ์ฑ(๋ค๋ฅธ ๋๋ฉ์ธ)์ด 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 ๊ฒฐ๊ณผ ์บ์ ์๊ฐ
TIPCORS ์ค์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ 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 Conversion | XML โ 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 ์ ํ ๊ฐ๋ฅ
TIPS3์ 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 Header | x-amz-server-side-encryption: AES256 |
| SSE-KMS Header | x-amz-server-side-encryption: aws:kms |
| SSE-C ํ์ ์๊ฑด | HTTPS (HTTP ์์ฒญ ์ S3๊ฐ ๊ฑฐ๋ถ) |
| SSE-C ํค ์ ์ฅ | AWS๋ ํค ์ ์ฅ ์ ํจ, ๋งค ์์ฒญ ์ Header๋ก ์ ๋ฌ |
| SSE-KMS Cross-Account | Customer 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 Mode | Root ํฌํจ ๋๊ตฌ๋ ์์ /์ญ์ ๋ถ๊ฐ |
| Governance Mode | s3:BypassGovernanceRetention ๊ถํ์๋ง ์์ ๊ฐ๋ฅ |
| Legal Hold | ๋ณด์กด ๊ธฐ๊ฐ๊ณผ ๋ฌด๊ด, ๋ฌด๊ธฐํ ์ ๊ธ |
| Glacier Vault Lock | ํ ๋ฒ Lock ํ ๋ณ๊ฒฝ ๋ถ๊ฐ (Root ํฌํจ) |
| CORS ์ค์ ์์น | ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ Bucket์ ์ค์ (์์ฒญํ๋ ์ชฝ ์๋) |
| Access Points | ๊ฐ์ ๋ ๋ฆฝ DNS + ๋ ๋ฆฝ Policy |
| VPC Access Point | VPC Endpoint + Endpoint Policy ๋ชจ๋ ์ค์ ํ์ |
| S3 Object Lambda | ์๋ณธ ๋ณ๊ฒฝ ์์, Lambda๊ฐ ๋ณํ ํ ๋ฐํ |
| VPC Endpoint ํ์ | S3, DynamoDB โ Gateway Endpoint (๋ฌด๋ฃ) |