EC2 μΈμ€ν΄μ€μμ S3 λ²ν· μ‘μΈμ€νκΈ°
μλ νμΈμ Mambo μ λλ€.
μ€λμ EC2 μΈμ€ν΄μ€μμ S3 λ²ν·μ μ‘μΈμ€ν μ μλλ‘ κ΅¬μ±νλ λ°©λ²μ λν΄ μμλ΄ λλ€.
μ΅κ·Ό νμ¬μμ μ§ννκ³ μλ νλ‘μ νΈ μ€μλ 보μ μ μ± μ μν΄ κ³ κ°μ΄ ꡬμ±ν EC2 μΈμ€ν΄μ€μ λν μ κ·Ό μ 보λ§μ μ 곡λ°μ μ ν리μΌμ΄μ μ€νν΄μΌνλ μꡬμ¬νμ΄ μκ²Όμ΅λλ€. νμ¬ μ ν리μΌμ΄μ μμ μ¬μ©μ€μΈ λ°μ΄ν°λ² μ΄μ€ μ€μλ EC2 μΈμ€ν΄μ€μ μ§μ μ€μΉνμ¬ μ¬μ©νκ³ μλ μμ© μκ³μ΄ λ°μ΄ν°λ² μ΄μ€κ° μμ΅λλ€. μ΄ λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν°λ₯Ό μ£ΌκΈ°μ μΌλ‘ λ°±μ νκΈ° μνμ¬ λ§€μΌ 1μμ νμΌλ‘ μ μ₯λ λ°μ΄ν°λ₯Ό μμΆνμ¬ S3λ‘ μ μ₯νλ μ€ν¬λ¦½νΈλ₯Ό μννκ³ μμ΅λλ€. κ³ κ°μ΄ 보μ ν EC2 μΈμ€ν΄μ€μμ μ΄ λ°μ΄ν°λ² μ΄μ€μ λ°±μ νμΌμ μ μ₯νκΈ° μν S3 λ²ν·μ λν κΆνμ μ§μ ν΄μ£Όλλ‘ μ λν μμ μ λλ€.
S3 λ²ν· μ μ±
S3μμ λ²ν·μ λ§λ€λ©΄ κΈ°λ³Έμ μΌλ‘ λͺ¨λ νΌλΈλ¦ μ‘μΈμ€ μ°¨λ¨λ©λλ€.
κ·Έλ¦¬κ³ λ²ν· μ μ± μ ν΅ν΄ λ²ν· λλ λ²ν·μ μ μ₯λ μ€λΈμ νΈμ λν μ‘μΈμ€ κΆνμ λΆμ¬ν μ μμ΅λλ€.
λ²ν· μ μ± μμ±
λ²ν· μ μ± μ μμ±ν λλ μλ§μ‘΄ μΉ μλΉμ€μμ μ 곡νλ AWS Policy Generatorλ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
λ€μμ νΉμ IPμ λν΄μ λ²ν·μ λν μ‘°ν, μ½κΈ°, μ°κΈ° κΆνμ λΆμ¬νλ μ μ± μ μμ±ν μμμ λλ€.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::mambo.kr",
"arn:aws:s3:::mambo.kr/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": "218.156.190.x/32"
}
}
}
]
}
λ²ν· μ μ± μ μ μνλ JSONμ ν¬κΈ°λ 20kBλ‘ μ νλ©λλ€.
λ²ν· μ μ± μ λν λ μμΈν λ΄μ©μ λ²ν· μ μ± μμ λ¬Έμλ₯Ό μ°Έκ³ νμΈμ.
EC2 μΈμ€ν΄μ€
μλ§μ‘΄ 리λ μ€ AMIλ‘ EC2 μΈμ€ν΄μ€λ₯Ό μ€ννλ©΄ AWS CLIκ° κΈ°λ³ΈμΌλ‘ μ€μΉλμ΄μμ΅λλ€. λ°λΌμ, AWS CLIλ₯Ό μ¬μ©ν΄μ S3 μλΉμ€μ μμ μ μνν μ μμ΅λλ€.
IAM μν μμ±
S3 λ²ν· κΆν μ€μ μμ λ²ν· μ μ± μ μ€μ ν μ μμΌλ IAM μν μ λ§λ€κ³ μΈλΌμΈ μ μ± μΌλ‘ μ μ©ν μλ μμ΅λλ€. μ°λ¦¬λ EC2 μΈμ€ν΄μ€μμ μ κ·Όν΄μΌνλ―λ‘ EC2 μλΉμ€μ λν IAM μν μ λ§λ€μ΄μ μΈμ€ν΄μ€ νλ‘νμΌλ‘ λ±λ‘νκ² μ΅λλ€.
λ¨Όμ , EC2 μΈμ€ν΄μ€μμ AWS CLIλ‘ λ²ν·μ μ‘°νν΄λ³΄κ² μ΅λλ€.
νμ¬ EC2 μΈμ€ν΄μ€μλ IAM μΈμ€ν΄μ€ νλ‘νμΌμ΄ μ§μ λμ΄μμ§ μκΈ° λλ¬Έμ μ€λ₯κ° λ°μν©λλ€.
IAM λ©λ΄μμ μ κ·λ‘ μν μ μμ±ν©λλ€.
S3 λ²ν·μ λν κΆνμ μΈλΌμΈ μ μ± μΌλ‘ μ μν κ²μ΄λ―λ‘ κ΄λ¦¬ν μ μ± μ μ€μ νμ§μμ΅λλ€.
μμ±ν IAM μν μ EC2 μΈμ€ν΄μ€ νλ‘νμΌλ‘ μ§μ ν©λλ€.
IAM μν μ μ΄λ ν μ μ± μ μ μ©νμ§ μκ³ λ²ν·μ μ‘°νν΄λ³΄κ² μ΅λλ€.
IAM μν μ μ§μ νμκΈ°μ AWS CLIλ₯Ό μ¬μ©ν μ μκ² λμμ§λ§ mambo.kr μ΄λΌλ λ²ν·μ λν ListObjectsV2 μμ μ Access Denied μ€λ₯κ° λ°μνμ΅λλ€.
μΈλΌμΈ μ μ±
μ°λ¦¬κ° μμ±ν IAM μν μλ μ΄λ ν μ μ± λ μ°κ²°νμ§ μμκΈ° λλ¬Έμ μ κ·Ό κΆνμ κ°μ§μ§ μλκ² λΉμ°ν©λλ€. λ€μ IAM λ©λ΄λ‘ λμκ°μ μΈλΌμΈ μ μ± μΆκ°λ₯Ό μ νν©λλ€.
λ²ν· μ μ± μμ λ₯Ό μ°Έκ³ ν΄μ λ€μκ³Ό κ°μ΄ JSON νμμΌλ‘ λ²ν· μ μ± μ μ μν©λλ€.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Mannual",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::mambo.kr",
"arn:aws:s3:::mambo.kr/*"
]
}
]
}
λ²ν· μ‘°ν
S3 λ²ν·μ λν μ μ± μ΄ IAM μΈλΌμΈ μ μ± μΌλ‘ μ°κ²°λμμΌλ λ²ν·μ λν μ κ·Ό κΆνμ΄ κ°μ§κ² λμλμ§ νμΈν©λλ€.
EC2 μΈμ€ν΄μ€μμ μ¬μ©μ κ³μ μ 보μ ν S3 λ²ν·μ λν λͺ©λ‘μ κΆνμ΄ μμ΄μ μ‘°νν μ μμΌλ μΈλΌμΈ μ μ± μΌλ‘ μ μλ mambo.kr λ²ν·μ λν΄μλ μ‘°νλμμ΅λλ€.
λ§μ½, S3 λ²ν· λͺ©λ‘μ μ‘°ννκ³ μΆλ€λ©΄ λ€μκ³Ό κ°μ΄ Statementλ₯Ό μΆκ°νμλ©΄ λ©λλ€.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Mannual",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::mambo.kr",
"arn:aws:s3:::mambo.kr/*"
]
},
{
"Sid": "Mannual-2",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::*/*"
]
}
]
}
λΉ ν μ€νΈ νμΌμ λ§λ€μ΄μ λ²ν·μ μ λ‘λνκ³ κ°μ Έμ¬ μ μλμ§ νμΈν΄λ³΄κ² μ΅λλ€.
S3μ μ μ₯ν μ μλ ν¬κΈ°μ λν μ νμ μμΌλ PUT μμ²μΌλ‘ μ λ‘λ κ°λ₯ν ν¬κΈ°λ μ΅λ 5GBμ λλ€. AWS CLIμ S3 λͺ λ Ήμ΄λ₯Ό μ¬μ©νλ κ²½μ° μΌμ ν¬κΈ° μ΄μμ΄λΌλ©΄ λ©ν°ννΈ μ λ‘λλ₯Ό μννλ―λ‘ μκ³ κ³μκ³ μ κ²½μ°μ§ μμλ λ©λλ€.
λ§μΉλ©°
νΌλΈλ¦ IPκ° ν λΉλμ§ μλ EC2 μΈμ€ν΄μ€λΌλ©΄ AWS PrivateLinkλ‘ κ΅¬μ±λλ VPC μΈν°νμ΄μ€ μλν¬μΈνΈλ₯Ό μ¬μ©νμ¬ S3 μλΉμ€μ ν΅μ ν μ μλλ‘ μ€μ ν΄μΌν©λλ€. κ·Έλ¦¬κ³ λ€λ₯Έ μ¬μ©μ κ³μ μ ARNμ μ 곡λ°μμ μ κ·Όν μ μκ² κ΅¬μ±ν μλ μμΌλ 곡μ λ¬Έμμμ μ 곡νλ λ€μν μ μ± μμ λ₯Ό μ°Έκ³ ν΄λ΄ μλ€.
κ°μ¬ν©λλ€.