DevOps/AWS

AWS S3 퍼블릭 버킷 μƒμ„±ν•˜κΈ°

ν”„λ‘œκ·Έλž˜λ¨Έ μ˜€μ›” 2024. 1. 2. 20:39
Amazon Simple Storage Service(Amazon S3)λŠ” 업계 졜고의 ν™•μž₯μ„±, 데이터 κ°€μš©μ„±, λ³΄μ•ˆ 및 μ„±λŠ₯을 μ œκ³΅ν•˜λŠ” 객체 μŠ€ν† λ¦¬μ§€ μ„œλΉ„μŠ€μž…λ‹ˆλ‹€. λͺ¨λ“  규λͺ¨μ™€ μ—…μ’…μ˜ 고객은 Amazon S3λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터 레이크, μ›Ή μ‚¬μ΄νŠΈ, λͺ¨λ°”일 μ• ν”Œλ¦¬μΌ€μ΄μ…˜, λ°±μ—… 및 볡원, μ•„μΉ΄μ΄λΈŒ, μ—”ν„°ν”„λΌμ΄μ¦ˆ μ• ν”Œλ¦¬μΌ€μ΄μ…˜, IoT λ””λ°”μ΄μŠ€, λΉ… 데이터 뢄석 λ“± λ‹€μ–‘ν•œ μ‚¬μš© μ‚¬λ‘€μ—μ„œ μ›ν•˜λŠ” μ–‘μ˜ 데이터λ₯Ό μ €μž₯ν•˜κ³  λ³΄ν˜Έν•  수 μžˆμŠ΅λ‹ˆλ‹€. Amazon S3λŠ” νŠΉμ • λΉ„μ¦ˆλ‹ˆμŠ€, 쑰직 및 κ·œμ • μ€€μˆ˜ μš”κ΅¬ 사항에 맞게 데이터에 λŒ€ν•œ μ•‘μ„ΈμŠ€λ₯Ό μ΅œμ ν™”, ꡬ쑰화 및 ꡬ성할 수 μžˆλŠ” 관리 κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

좜처 :  https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/Welcome.html

 

 

 

이미지 μ €μž₯을 ν”„λ‘œμ νŠΈ 내뢀에 ν•˜κΈ΄μ— ν”„λ‘œμ νŠΈ μš©λŸ‰μ΄ λ„ˆλ¬΄ 컀지고 λ²”μš©μ„±μ΄ λ–¨μ–΄μ§€λ‹ˆ κ°€μƒμ˜ μ €μž₯ 곡간에 이미지λ₯Ό λ„£μ–΄ 놓고 μ•‘μ„ΈμŠ€λ₯Ό νΌλΈ”λ¦­ν•˜κ²Œ λ‘μ–΄μ„œ 접근이 κ°€λŠ₯ν•˜κ²Œλ” λ§Œλ“€λ €κ³  ν•œλ‹€. λ°±μ—”λ“œμ—μ„œ μ•‘μ„ΈμŠ€ν‚€λ₯Ό κ°–κ³  이미지λ₯Ό κ°€μ Έλ‹€κ°€ ν”„λ‘ νŠΈμ— 쀄 μˆ˜λ„ μžˆμ§€λ§Œ ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ λ°”λ‘œ κΊΌλ‚΄λ‹€ μ“΄λ‹€ν•˜μ—¬, ν•œλ²ˆ νΌλΈ”λ¦­ν•˜κ²Œ λ§Œλ“€μ–΄ 보렀고 ν•œλ‹€.

 

S3 λ§Œλ“€κΈ°

 

λ¨Όμ € AWS의 S3 μ„œλΉ„μŠ€λ‘œ λ“€μ–΄μ˜¨λ‹€. μ—¬κΈ°μ„œ 주황색 버킷 λ§Œλ“€κΈ°λ₯Ό ν΄λ¦­ν•œλ‹€.

 

 

 

 

λ²„ν‚·μ˜ 이름을 μ •ν•œλ‹€. 객체 μ†Œμœ κΆŒμ€ ꢌμž₯으둜 μ„±μ •ν•œλ‹€.

 

 

 

 

νΌλΈ”λ¦­ν•œ S3λ₯Ό λ§Œλ“€κ²ƒμž„μœΌλ‘œ μ•‘μ„ΈμŠ€ 차단을 ν•΄μ œν•˜κ³  μΈμ§€ν•˜κ³  μžˆμŒμ„ ν΄λ¦­ν•œλ‹€.

퍼블릭 μ•‘μ„ΈμŠ€λ₯Ό ν—ˆμš©ν•˜λ©΄ λ³΄μ•ˆμƒ μ•ˆμ’‹μ„ 수 μžˆμœΌλ‹ˆ S3 ν‚€λ₯Ό κ°€μ§€κ³  ν”„λΌμ΄λΉ—ν•˜κ²Œ ν†΅μ‹ ν•˜λŠ” κ±Έ 더 μΆ”μ²œν•œλ‹€.

 

 

 

 

λ‚˜λ¨Έμ§€λŠ” κΈ°λ³Έμ„€μ •μœΌλ‘œ ν•˜κ³  버킷 λ§Œλ“€κΈ°λ₯Ό ν΄λ¦­ν•œλ‹€.

그리고 λ§Œλ“€μ–΄μ§„ 버킷을 눌러 버킷에 λ“€μ–΄μ˜¨λ‹€.

 

버킷 κΆŒν•œ - μ •μ±… μ„€μ •ν•˜κΈ°

 

 

 

κΆŒν•œ 탭을 눌러 이젠 λ§Œλ“  S3의 κΆŒν•œμ„ μˆ˜μ •ν•΄μ€€λ‹€.

 

 

 

 

이젠 버킷 정책을 μ„€μ •ν•΄μ€˜μ•Όν•œλ‹€.

νŽΈμ§‘ λ²„νŠΌμ„ λˆ„λ₯Έλ‹€.

 

 

 

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::버킷λͺ…/*"
        }
    ]
}

 

 

이 JSON λ¬Έμžμ—΄μ„ νŽΈμ§‘μ„ λˆŒλŸ¬μ„œ μž‘μ„±ν•˜λ„λ‘ ν•œλ‹€. Resource 은 μœ„μ— ARN 에 μžˆλŠ” μžμ‹ μ˜ 버킷λͺ…을 λ„£κ³  κ·Έ λ’€μ—” λͺ¨λ“  νŒ¨μŠ€κ°€ 올수 μžˆλ„λ‘ μ™€μΌλ“œμΉ΄λ“œλ₯Ό λ„£μ–΄μ€€λ‹€. 그리고 변경사항 μ €μž₯을 λˆ„λ₯Έλ‹€!

 

 

이건 JSON ν˜•μ‹μœΌλ‘œ μž‘μ„±λœ IAM 정책이닀. 이 정책은 AWS λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 접근을 μ œμ–΄ν•˜λŠ” κ·œμΉ™μ„ μ •μ˜ν•œλ‹€.

  1. Version: 이 뢀뢄은 μ •μ±… μ–Έμ–΄μ˜ 버전을 λ‚˜νƒ€λ‚Έλ‹€. μ—¬κΈ°μ„œ μ‚¬μš©λœ "2012-10-17"은 ν˜„μž¬ μ‚¬μš©λ˜λŠ” μ •μ±… μ–Έμ–΄μ˜ 버전이닀.
  2. Statement: 이 λΆ€λΆ„μ—μ„œλŠ” μ‹€μ œ μ ‘κ·Ό κ·œμΉ™μ„ μ •μ˜ν•œλ‹€. 이 μ •μ±…μ—λŠ” ν•˜λ‚˜μ˜ statement (Statement1)κ°€ ν¬ν•¨λ˜μ–΄ μžˆλ‹€.
  3. Sid (Statement ID): "Statement1"은 이 κ·œμΉ™μ— λŒ€ν•œ μ‹λ³„μžλ‘œ, μ •μ±… λ‚΄μ—μ„œ 각 statementλ₯Ό κ΅¬λ³„ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.
  4. Effect: 이 뢀뢄은 κ·œμΉ™μ˜ 효과λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. "Allow"λŠ” νŠΉμ • 쑰건 ν•˜μ— ν—ˆμš©ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.
  5. Principal: 이 뢀뢄은 정책이 μ μš©λ˜λŠ” λŒ€μƒμ„ λ‚˜νƒ€λ‚Έλ‹€. "*"λŠ” λͺ¨λ“  μ‚¬μš©μž λ˜λŠ” 엔터티에 μ μš©λ¨μ„ μ˜λ―Έν•œλ‹€.
  6. Action: 이 뢀뢄은 ν—ˆμš©λ˜κ±°λ‚˜ 거뢀될 수 μžˆλŠ” νŠΉμ • μž‘μ—…μ„ λ‚˜νƒ€λ‚Έλ‹€. "s3:GetObject"λŠ” μ‚¬μš©μžκ°€ S3 λ²„ν‚·μ—μ„œ 객체λ₯Ό 검색할 수 μžˆλ„λ‘ ν—ˆμš©ν•œλ‹€.
  7. Resource: 이 뢀뢄은 정책이 μ μš©λ˜λŠ” AWS λ¦¬μ†ŒμŠ€λ₯Ό μ§€μ •ν•œλ‹€. "arn:aws:s3:::버킷λͺ…/*"λŠ” νŠΉμ • S3 버킷(μ—¬κΈ°μ„œ '버킷λͺ…'으둜 ν‘œμ‹œλ¨) λ‚΄μ˜ λͺ¨λ“  객체에 λŒ€ν•œ 접근을 μ œμ–΄ν•œλ‹€.

μš”μ•½ν•˜μžλ©΄, 이 정책은 λͺ¨λ“  μ‚¬μš©μžκ°€ μ§€μ •λœ S3 버킷 λ‚΄μ˜ λͺ¨λ“  객체λ₯Ό 검색할 수 μžˆλ„λ‘ ν—ˆμš©ν•˜λŠ” κ·œμΉ™μ„ μ •μ˜ν•œλ‹€. μ΄λŸ¬ν•œ μœ ν˜•μ˜ μ—΄λ¦° 접근은 곡개적으둜 κ³΅μœ λ˜μ–΄μ•Ό ν•˜λŠ” 데이터에 λŒ€ν•΄ μ‚¬μš©λ  수 μžˆμ§€λ§Œ, λ―Όκ°ν•œ 데이터에 λŒ€ν•΄μ„œλŠ” μ£Όμ˜κ°€ ν•„μš”ν•˜λ‹€.

 

 

 

 

μƒˆλ‘œκ³ μΉ¨μ„ 눌러 보면  μ•‘μ„ΈμŠ€κ°€ νΌλΈ”λ¦­μœΌλ‘œ 바뀐걸 λ³Ό 수 μžˆλ‹€.

 

 

버킷 κΆŒν•œ - CORS μ„€μ •

 

이젠 μ•„λž˜λ‘œ μŠ€ν¬λ‘€μ„ λ‚΄λ € CORS 섀정을 ν•΄μ€˜μ•Όν•œλ‹€.

 

 

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "HEAD",
            "GET",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": []
    }
]

 

νŽΈμ§‘μ„ 눌러 μœ„ JOSN λ¬Έμžμ—΄μ„ κΈ°μž…ν•œλ‹€.

그리고 변경사항을 μ €μž₯ν•œλ‹€.

 

 

 

이 JSON κ΅¬μ‘°λŠ” CORS(Cross-Origin Resource Sharing) 섀정을 μ •μ˜ν•˜κ³  μžˆλ‹€. 각 μš”μ†Œμ˜ 의미λ₯Ό μ•„λž˜μ™€ 같이 μ„€λͺ…ν•  수 μžˆλ‹€:

  1. AllowedHeaders: 이 섀정은 μ›Ή λΈŒλΌμš°μ €κ°€ λ‹€λ₯Έ λ„λ©”μΈμ˜ μ„œλ²„λ‘œλΆ€ν„° 받아듀일 수 μžˆλŠ” HTTP 헀더λ₯Ό μ •μ˜ν•œλ‹€. μ—¬κΈ°μ„œ ["*"]λŠ” λͺ¨λ“  μ’…λ₯˜μ˜ 헀더λ₯Ό ν—ˆμš©ν•œλ‹€λŠ” μ˜λ―Έλ‹€.
  2. AllowedMethods: 이 섀정은 λ‹€λ₯Έ λ„λ©”μΈμ˜ μ„œλ²„λ‘œλΆ€ν„° ν—ˆμš©λ˜λŠ” HTTP μš”μ²­ λ©”μ†Œλ“œλ₯Ό μ§€μ •ν•œλ‹€. μ—¬κΈ°μ—λŠ” ["HEAD", "GET", "PUT", "POST", "DELETE"]κ°€ ν¬ν•¨λ˜μ–΄ μžˆμ–΄, 이듀 λ©”μ†Œλ“œμ— λŒ€ν•œ μš”μ²­μ΄ ν—ˆμš©λ¨μ„ λ‚˜νƒ€λ‚Έλ‹€.
  3. AllowedOrigins: 이 섀정은 μ–΄λ–€ 좜처(도메인, μŠ€ν‚€λ§ˆ, 포트)의 μš”μ²­μ΄ μ„œλ²„μ— μ˜ν•΄ ν—ˆμš©λ μ§€ μ •μ˜ν•œλ‹€. ["*"]λŠ” λͺ¨λ“  μΆœμ²˜λ‘œλΆ€ν„°μ˜ μš”μ²­μ„ ν—ˆμš©ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.
  4. ExposeHeaders: 이 섀정은 λΈŒλΌμš°μ €κ°€ ν΄λΌμ΄μ–ΈνŠΈμ— λ…ΈμΆœν•  수 μžˆλŠ” 헀더λ₯Ό μ •μ˜ν•œλ‹€. μ—¬κΈ°μ„œλŠ” 빈 λ°°μ—΄ []둜 μ„€μ •λ˜μ–΄ μžˆμ–΄, μΆ”κ°€λ‘œ λ…ΈμΆœν•  헀더가 μ—†μŒμ„ λ‚˜νƒ€λ‚Έλ‹€.

μš”μ•½ν•˜μžλ©΄, 이 CORS 섀정은 λͺ¨λ“  μΆœμ²˜μ—μ„œ μ˜€λŠ” μš”μ²­μ„ ν—ˆμš©ν•˜κ³ , λͺ¨λ“  헀더λ₯Ό 받아듀이며, HEAD, GET, PUT, POST, DELETE λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 있게 ν•œλ‹€. ν•˜μ§€λ§Œ, μΆ”κ°€λ‘œ λ…ΈμΆœν•  νŠΉμ • ν—€λ”λŠ” μ§€μ •ν•˜μ§€ μ•Šμ•˜λ‹€. 이 섀정은 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ‹€μ–‘ν•œ 좜처의 λ¦¬μ†ŒμŠ€λ₯Ό 자유둭게 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•΄μ£Όμ§€λ§Œ, λ³΄μ•ˆμƒ μ£Όμ˜κ°€ ν•„μš”ν•˜λ‹€.

 

λͺ¨λ“  섀정이 끝났닀.

 

 

이미지 뢈러였기 ν…ŒμŠ€νŠΈ

 

이젠 이미지λ₯Ό μ—…λ‘œλ“œ ν•˜κ³  URL을 ν†΅ν•΄μ„œ 이미지λ₯Ό 가져와 λ³΄λ„λ‘ν•˜κ² λ‹€.

μ—…λ‘œλ“œλ₯Ό λˆŒλŸ¬μ€€λ‹€.

 

 

 

νŒŒμΌμΆ”κ°€λ₯Ό λˆŒλŸ¬μ„œ λ‘œμ»¬μ—μ„œ μΆ”κ°€ν•  이미지λ₯Ό λ„£κ³  μ—…λ‘œλ“œν•  이미지λ₯Ό μ²΄ν¬ν•˜κ³ , μ—…λ‘œλ“œλ₯Ό λˆ„λ₯Έλ‹€.

 

 

 

 

그러면 μ΄λ ‡κ²Œ μ˜¬λΌκ°€μ§„ νŒŒμΌμ„ λ³Ό 수 μžˆλ‹€.

그럼 μ΄νŒŒμΌμ„ λˆŒλŸ¬μ„œ URL을 ν™•μΈν•œλ‹€.

 

 

 

μ΄λ ‡κ²Œ λ‚˜μ˜¨ 객체 URL 을 μ“°λ©΄ 이젠 κ°€μƒμ˜ 버킷에 올라온 이미지λ₯Ό κ°€μ Έμ˜¬ 수 μžˆλ‹€.  /이미지λͺ….ν™•μž₯자 λͺ…을 μ œμ™Έν•œ μ•ž URL pathλŠ” κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©ν•˜λ‹ˆ ν™˜κ²½λ³€μˆ˜λ‘œ 두고 이미지λͺ…λ§Œ λΆ™μ–΄μ„œ μ‚¬μš©ν•˜λ©΄ μ‰½κ²Œ 이미지λ₯Ό κ°€μ Έ 올 수 μžˆλ‹€.