AWS S3 νΌλΈλ¦ λ²ν· μμ±νκΈ°
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 리μμ€μ λν μ κ·Όμ μ μ΄νλ κ·μΉμ μ μνλ€.
- Version: μ΄ λΆλΆμ μ μ± μΈμ΄μ λ²μ μ λνλΈλ€. μ¬κΈ°μ μ¬μ©λ "2012-10-17"μ νμ¬ μ¬μ©λλ μ μ± μΈμ΄μ λ²μ μ΄λ€.
- Statement: μ΄ λΆλΆμμλ μ€μ μ κ·Ό κ·μΉμ μ μνλ€. μ΄ μ μ± μλ νλμ statement (Statement1)κ° ν¬ν¨λμ΄ μλ€.
- Sid (Statement ID): "Statement1"μ μ΄ κ·μΉμ λν μλ³μλ‘, μ μ± λ΄μμ κ° statementλ₯Ό ꡬλ³νλ λ° μ¬μ©λλ€.
- Effect: μ΄ λΆλΆμ κ·μΉμ ν¨κ³Όλ₯Ό λνλΈλ€. "Allow"λ νΉμ 쑰건 νμ νμ©νλ€λ κ²μ μλ―Ένλ€.
- Principal: μ΄ λΆλΆμ μ μ± μ΄ μ μ©λλ λμμ λνλΈλ€. "*"λ λͺ¨λ μ¬μ©μ λλ μν°ν°μ μ μ©λ¨μ μλ―Ένλ€.
- Action: μ΄ λΆλΆμ νμ©λκ±°λ κ±°λΆλ μ μλ νΉμ μμ μ λνλΈλ€. "s3:GetObject"λ μ¬μ©μκ° S3 λ²ν·μμ κ°μ²΄λ₯Ό κ²μν μ μλλ‘ νμ©νλ€.
- 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) μ€μ μ μ μνκ³ μλ€. κ° μμμ μλ―Έλ₯Ό μλμ κ°μ΄ μ€λͺ ν μ μλ€:
- AllowedHeaders: μ΄ μ€μ μ μΉ λΈλΌμ°μ κ° λ€λ₯Έ λλ©μΈμ μλ²λ‘λΆν° λ°μλ€μΌ μ μλ HTTP ν€λλ₯Ό μ μνλ€. μ¬κΈ°μ ["*"]λ λͺ¨λ μ’ λ₯μ ν€λλ₯Ό νμ©νλ€λ μλ―Έλ€.
- AllowedMethods: μ΄ μ€μ μ λ€λ₯Έ λλ©μΈμ μλ²λ‘λΆν° νμ©λλ HTTP μμ² λ©μλλ₯Ό μ§μ νλ€. μ¬κΈ°μλ ["HEAD", "GET", "PUT", "POST", "DELETE"]κ° ν¬ν¨λμ΄ μμ΄, μ΄λ€ λ©μλμ λν μμ²μ΄ νμ©λ¨μ λνλΈλ€.
- AllowedOrigins: μ΄ μ€μ μ μ΄λ€ μΆμ²(λλ©μΈ, μ€ν€λ§, ν¬νΈ)μ μμ²μ΄ μλ²μ μν΄ νμ©λ μ§ μ μνλ€. ["*"]λ λͺ¨λ μΆμ²λ‘λΆν°μ μμ²μ νμ©νλ€λ κ²μ μλ―Ένλ€.
- ExposeHeaders: μ΄ μ€μ μ λΈλΌμ°μ κ° ν΄λΌμ΄μΈνΈμ λ ΈμΆν μ μλ ν€λλ₯Ό μ μνλ€. μ¬κΈ°μλ λΉ λ°°μ΄ []λ‘ μ€μ λμ΄ μμ΄, μΆκ°λ‘ λ ΈμΆν ν€λκ° μμμ λνλΈλ€.
μμ½νμλ©΄, μ΄ CORS μ€μ μ λͺ¨λ μΆμ²μμ μ€λ μμ²μ νμ©νκ³ , λͺ¨λ ν€λλ₯Ό λ°μλ€μ΄λ©°, HEAD, GET, PUT, POST, DELETE λ©μλλ₯Ό μ¬μ©ν μ μκ² νλ€. νμ§λ§, μΆκ°λ‘ λ ΈμΆν νΉμ ν€λλ μ§μ νμ§ μμλ€. μ΄ μ€μ μ μΉ μ ν리μΌμ΄μ μμ λ€μν μΆμ²μ 리μμ€λ₯Ό μμ λ‘κ² μ¬μ©ν μ μλλ‘ ν΄μ£Όμ§λ§, 보μμ μ£Όμκ° νμνλ€.
λͺ¨λ μ€μ μ΄ λλ¬λ€.
μ΄λ―Έμ§ λΆλ¬μ€κΈ° ν μ€νΈ
μ΄μ μ΄λ―Έμ§λ₯Ό μ λ‘λ νκ³ URLμ ν΅ν΄μ μ΄λ―Έμ§λ₯Ό κ°μ Έμ 보λλ‘νκ² λ€.
μ λ‘λλ₯Ό λλ¬μ€λ€.
νμΌμΆκ°λ₯Ό λλ¬μ λ‘컬μμ μΆκ°ν μ΄λ―Έμ§λ₯Ό λ£κ³ μ λ‘λν μ΄λ―Έμ§λ₯Ό 체ν¬νκ³ , μ λ‘λλ₯Ό λλ₯Έλ€.
κ·Έλ¬λ©΄ μ΄λ κ² μ¬λΌκ°μ§ νμΌμ λ³Ό μ μλ€.
κ·ΈλΌ μ΄νμΌμ λλ¬μ URLμ νμΈνλ€.
μ΄λ κ² λμ¨ κ°μ²΄ URL μ μ°λ©΄ μ΄μ κ°μμ λ²ν·μ μ¬λΌμ¨ μ΄λ―Έμ§λ₯Ό κ°μ Έμ¬ μ μλ€. /μ΄λ―Έμ§λͺ .νμ₯μ λͺ μ μ μΈν μ URL pathλ 곡ν΅μ μΌλ‘ μ¬μ©νλ νκ²½λ³μλ‘ λκ³ μ΄λ―Έμ§λͺ λ§ λΆμ΄μ μ¬μ©νλ©΄ μ½κ² μ΄λ―Έμ§λ₯Ό κ°μ Έ μ¬ μ μλ€.