...

AWS ์๊ฒฉ ์ฆ๋ช
AWS ์ก์ธ์ค ๋ฐฉ์์ ๋ฐ๋ผ ๋ค์ํ ์ ํ์ ๋ณด์ ์๊ฒฉ ์ฆ๋ช ์ ํ์๋ก ํ๋ค.
AWS์ ๋ก๊ทธ์ธ ํ์ฌ ์๋น์ค๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋๋๋ค.
์ฝ์ ์ก์ธ์ค ์๊ฒฉ ์ฆ๋ช
AWS ์ฝ์ ์น ๋งค๋์ ์ ๋ก๊ทธ์ธ์ ํ๊ธฐ ์ํด ํ์ํ ์๊ฒฉ ์ฆ๋ช ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์ด๋๊น์ง AWS ์น์ฌ์ดํธ์์ ์์ด๋/๋น๋ฐ๋ฒํธ๋ฅผ ์ณ์ ๋ก๊ทธ์ธ ํ๋ฏ์ด ์ฌ์ฉํ๋๊ฑธ ๋งํ๋ค.
ํฌ๊ฒ 3๊ฐ์ง๋ก ๋๋๋๋ฐ, ๋ค์๊ณผ ๊ฐ๋ค.
- Root ์ด๋ฉ์ผ / ๋น๋ฐ๋ฒํธ : ๋ฃจํธ ๋ก๊ทธ์ธ์ ์ํด ์ฌ์ฉ
- IAM ์ ์ ๋ช / ๋น๋ฐ๋ฒํธ : IAM ์ ์ ๊ฐ ๋ก๊ทธ์ธ ํ๊ธฐ ์ํด ์ฌ์ฉ
- MFA(Multi-Factor authentication) : ๋ค๋ฅธ ์๊ฒฉ ์ฆ๋ช ์ ๋ณด์์ ๊ฐํํ๊ธฐ ์ํ ์์ ๋น๋ฐ๋ฒํธ

ํ๋ก๊ทธ๋จ ๋ฐฉ์ ์ก์ธ์ค ์๊ฒฉ ์ฆ๋ช
AWS ์น์ฌ์ดํธ์์ ๋ก๊ทธ์ธํด ์ฌ์ฉํ๋ ์ฝ์ ์์ธ์ค ์๊ฒฉ ์ฆ๋ช ๊ณผ๋ ๋ฌ๋ฆฌ,
ํ๋ก๊ทธ๋จ ๋ฐฉ์ ์์ธ์ค ์๊ฒฉ ์ฆ๋ช ์, AWS์ CLI ํน์ AWS SDK๋ฅผ ์ฌ์ฉํ ๋ ํ์ํ ์๊ฒฉ ์ฆ๋ช ์ด๋ค.
ํ๋ก๊ทธ๋จ ๋ฐฉ์ ์์ธ์ค ์๊ฒฉ ์ฆ๋ช ์ ๋ค์ ํฌ๊ฒ ์ฅ๊ธฐ ์๊ฒฉ ์ฆ๋ช (Long-Term Credential)๊ณผ ์์ ์๊ฒฉ ์ฆ๋ช (Temporary Credential)๋ก ๊ตฌ์ฑ๋๋ค.
AWS CLI๋?
์ฝ๊ฒ ๋งํด ๋ฆฌ๋ ์ค์ฒ๋ผ ํฐ๋ฏธ๋์์ aws ์๋น์ค๋ฅผ ๋ค๋ฃฐ์ ์๊ฒํ๋ ์๋น์ค์ด๋ค.
์๋ฅผ ๋ค์ด ๋ฆฌ๋ ์ค์์ ํ์ผ ๋ณต์ฌ, ํด๋ ์์ฑ, ์ด๋, ์ญ์ ๋ฑ์ ์ด์ฉ๋๋ ls, rm, cp ์ ๊ฐ์ ๋ช ๋ น์ AWS S3์ ๊ณ ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
AWS SDK๋?
์ฝ๊ฒ ๋งํด aws ์๋น์ค๋ฅผ ์ฝ๊ฒ ์ด์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ ์ฝ๋ ํจํค์ง๋ผ ๋ณด๋ฉด ๋๋ค.
์๋ฅผ ๋ค๋ฉด ์๋๋ก์ด๋ ์คํ๋์ค๋ ์๋๋ก์ด๋ ์ดํ์ ๊ฐ๋ฐํ๋ SDK๋ผ๊ณ ๋งํ ์ ์๋ค.
์ฆ, AWS SDK๋ AWS ์๋น์ค๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ฐ๋ํด์ ๊ฐ๋ฐํ ์ ์๊ฒ ํ๋ ํด(SDK).


ํ๋ก๊ทธ๋จ ๋ฐฉ์ ์์ธ์ค ์๊ฒฉ ์ฆ๋ช ๊ตฌ์ฑ
ํ๋ก๊ทธ๋จ ๋ฐฉ์ ์์ธ์ค ์๊ฒฉ ์ฆ๋ช ๊ตฌ์ฑ์๋ ๋ค์ 3๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
- Access Key ID : ์ ์ ์ด๋ฆ์ ํด๋นํ๋ ํค. ์ผ๋ฐ์ ์ผ๋ก ๊ณต๊ฐ๋์ด๋ ๋ฌด๋ฐฉ
- Secret Access Key : ํจ์ค์๋์ ํด๋นํ๋ํค. ๊ณต๊ฐ๋๋ฉด ์๋จ
- Token : ์์ ์๊ฒฉ ์ฆ๋ช ์๋ง ์ฌ์ฉ. ์์ ์๊ฒฉ ์ฆ๋ช ์ด ์ ํจํ์ง ๊ฒ์ฆํ๊ธฐ ์ํด ์ฌ์ฉ

์ค๋ฌด๋ฅผ ์์๋ฅผ ๋ ๋ค๋ฉด, ๊ฐ์ธ ์๋ฒ์์ AWS ์๋น์ค์ ์ ์ํด ์๋น์ค๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ ๋น์ฐํ ๋ก๊ทธ์ธ(์๊ฒฉ ์ฆ๋ช )์ด ํ์ํ๋ฐ, ์ด๋ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณด๋ด์ฃผ๋๊ฒ ๋ฐ๋ก Access Key ์ด๋ค.
๊ทธ๋ฌ๋ฉด AWS์์๋ ๋ฐ์ Access Key๋ฅผ ํ์ฑ์ ์ ์ ๊ฐ ๋๊ตฌ์ธ์ง ์ญํ (Role)์ ๋ฌด์์ธ์ง ํ์ ํด S3 ์๋น์ค์ ์์ธ์คํ์ฌ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.

์ฅ๊ธฐ ์๊ฒฉ ์ฆ๋ช
์ฅ๊ธฐ ์๊ฒฉ ์ฆ๋ช ์ IAM ์ ์ ๋ก ๋ถํฐ ์์ฑ๋๋ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ root ๊ณ์ ์ผ๋ก IAM ์ ์ ๋ฅผ ์์ฑํ ๋, ๋ง๋ฐ์ง ๋ถ๋ถ์์ csvํ์ผ์ ๋ค์ด ๋ฐ์์ ์๋๋ฐ, ์ด ์์ Acess Key ID์ Secret Access Key ๋ถ๋ถ์ด ๋ฐ๋ก ์ฅ๊ธฐ ์๊ฒฉ ์ฆ๋ช ์ด๋ค.

์ด ๋ง์, AWS ์น ์ฝ์์ Use name๊ณผ Password๋ฅผ ์ ๋ ฅํด ๋ก๊ทธ์ธํด AWS ์๋น์ค๋ฅผ ์ด์ฉํ๋ฏ์ด, Access Key ID์ Secret Access Key๋ฅผ ํตํด AWS CLI์ ๋ก๊ทธ์ธํด์ AWS ์๋น์ค๋ฅผ ์ด์ฉํ๋ ์๋ฆฌ์ด๋ค.
์ฆ, IAM ๊ณ์ ์ด ์๋ค๋ฉด, ์ด IAM ๊ณ์ ์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ์์ด๋/ํจ์ค์๋ ์ AccessKey/SecretKey ๋๊ฐ์ง๊ฐ ์๋ค๊ณ ๋ณด๋ฉด ๋๋ฉฐ, ์์ด๋/ํจ์ค์๋๋ AWS ์น ์ฝ์์ AccessKey/SecretKey๋ AWS CLI๋ SDK์ ์ ์ํ์ฌ ์ฌ์ฉ ํ๋ ๊ฒ์ผ๋ก ์ดํดํ๋ฉด ๋๋ค.
์ฅ๊ธฐ ์๊ฒฉ ์ฆ๋ช ์ ๋ฐ ์๊ตฌ์ ์ด๋ผ, ์ญ์ ํ์ง ์์ผ๋ฉด ์ ํจ๊ธฐ๊ฐ ์์ด ๊ณ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
์ด ๋ง์, ๋ง์ผ ์ฅ๊ธฐ ์๊ฒฉ ์ฆ๋ช ์ ๋๊ตฐ๊ฐ์๊ฒ ํ์ทจ ๋นํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ์กฐ์นํ ๋ฐฉ๋์์ด ๊ทธ๋๋ก ํดํน๋๋ค๋ ์๋ฆฌ์ด๋ค. (๊ฒ์ ์์ด๋ ๊ฐ์๊ฒฝ์ฐ ํดํน๋นํด๋ ํผํด๊ฐ ์์ ์ง๋ผ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฐ๊ฟ์ ์์ง๋ง, ์ฅ๊ธฐ ์๊ฒฉ ์ฆ๋ช ์ ๋ฐ ์๊ตฌ์ ์ด๊ธฐ ๋๋ฌธ์ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ค)
๊ทธ๋์ ์ฃผ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ํ๋์ฝ๋ฉ๋์ด ์ฌ์ฉ๋๋ค.
์ค์ ์ฌ๋ก๋ก, ๊นํ์๋ค๊ฐ ์ค์๋ก Access Key๋ฅผ ์ ์ถ๋์ ๋๊ฐ ๊ทธ๋๋ก ํ์ทจํด AWS ๊ณ์ ์ ์ ์ํด ๋นํธ์ฝ์ธ์ ์ฑ๊ตดํ์ฌ ์๊ฐ๋น ๋ช๋ฐฑ๋ง์์ด ๊ณผ๊ธ๋๋ ํผํด ์ฌ๋ก๋ ์กด์ฌํ๋ค.
IAM ์ ์ ํ๋๋น 2๊ฐ์ ์๊ฒฉ ์ฆ๋ช ๋ฐ๊ธ ๊ฐ๋ฅํ๋ค.
Access Key ID๋ ๋ค์ ๋ณผ์์์ง๋ง, Secret Acces Key ๊ฐ์ ๊ฒฝ์ฐ ๋ง์ผ ์ ์ค๋๋ฉด ์ ๋ ๋ณต๊ตฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ ๋ค์ ์ฌ๋ฐ๊ธ ํ๋ ๋ฐฉ๋ฒ ๋ฐ์ ์๋ค.
๋ํ ์ฅ๊ธฐ ์๊ฒฉ ์ฆ๋ช ์ ํ์ฑํ/๋นํ์ฑํ ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
๋ง์ผ AWS๋ฅผ ์ฐ์ง ์์๊ฒฝ์ฐ Access key๋ฅผ ๋นํ์ฑํ ํด๋์ ์๋ค. ๋ค๋ง, ๋นํ์ฑํ ํ๋๋ผ๋ 2๊ฐ ์ด๊ณผ์ ์๊ฒฉ ์ฆ๋ช ๋ฐ๊ธ์ ์ญ์ ๋ถ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์ ์ด๋ฌํ ํน์ง ๋๋ฌธ์ ์ฅ๊ธฐ ์๊ฒฉ ์ฆ๋ช ์ ํตํด AWS์ ์์ธ์ค ํ๋๊ฑด ๋น์ถ์ฒ ๋์ด์ง๋ ํธ์ด๋ฉฐ, ์์ ์๊ฒฉ ์ฆ๋ช ์ ํตํด ๊ธฐ๊ฐ์ผ๋ก ์์ธ์ค ํ๋ ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌ๋๋ ๊ฒ์ ๊ถ์ฅ๋์ด์ง๋ ํธ์ด๋ค.
์์ ์๊ฒฉ ์ฆ๋ช
์์ ์๊ฒฉ ์ฆ๋ช ์ ๋จ๊ธฐ๋ก ์ฌ์ฉํ ์ ์๋ ์๊ฒฉ ์ฆ๋ช ์ด๋ค.
๋ช๋ถ์์ ๋ช์๊ฐ ๊น์ง ์ง์์๊ฐ์ด ์ ํด์ ธ ์์ด์ '์์' ๋ผ๋ ๋ง์ด ๋ค์ด๊ฐ๋ค. ์๊ฒฉ ์ฆ๋ช ์ด ๋ง๋ฃ๋ ์ดํ์๋ ์ด๋ค ์ข ๋ฅ์ ์ก์ธ์ค๋ ํ์ฉ๋์ง ์๋๋ค.
ํ์ํ ์์ ์์ ๋ฐ๋ก๋ฐ๋ก ์์ฑํด์ ํ์ฉํ๊ณ ์ดํ ํ์์ ๋ฐ๋ผ ์ฌ ๋ฐ๊ธ๋ ๊ฐ๋ฅํ๋ค.
์์ ์๊ฒฉ ์ฆ๋ช ์ ๋์ ์ผ๋ก ์์ฑ๋์ด ์์ฒญํ ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋๋ค. ๋จ, ํด๋น ์ฌ์ฉ์๋ ์๊ฒฉ ์ฆ๋ช ์ ์์ฒญํ ์ ์๋ ๊ถํ์ด ์์ด์ผ ํ๋ค.
๊ทธ๋์ ์์ ์๊ฒฉ ์ฆ๋ช ์ ๋ณด์์ด ๋งค์ฐ ๋ฐ์ด๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ฅ๊ธฐ AWS ๋ณด์ ์๊ฒฉ ์ฆ๋ช ์ ๋ฐฐํฌ ๋๋ ํฌํจํ ํ์๊ฐ ์์ผ๋ฉฐ, ์ฌ์ฉ์์ ๋ํ AWS ์๊ฒฉ ์ฆ๋ช ์ ์ ์ํ์ง ์๊ณ ๋ AWS ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค ๊ถํ์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ ์ ์๋ค.
๋ํ ์์ ์๊ฒฉ ์ฆ๋ช ์ ๊ด๋ฆฌ๊ฐ ์ฝ๋ค. ๋์ ์ผ๋ก ์์ฑ๋๊ณ ์๋์ผ๋ก ๋กํ ์ด์ ๋๊ธฐ ๋๋ฌธ์ ๊ถํ์ ๋ถ์ฌ ๋ฐ ํ์๊ฐ ์ฝ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ์ต๋ํ ์ฅ๊ธฐ ์๊ฒฉ ์ฆ๋ช ๋ณด๋ค๋ ์์ ์๊ฒฉ ์ฆ๋ช ์ ์ต๋ํ ํ์ฉํ๋๊ฒ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
์๊ฒฉ ์ฆ๋ช ์ฐ๋
์์ ์๊ฒฉ ์ฆ๋ช ์ IAM ์ ์ ์ธ์ ๋ค์ํ Identity์๊ฒ ์๊ฒฉ ์ฆ๋ช ๋ถ์ฌ ๊ฐ๋ฅํ๋ค.
AWS ๋ฐ์ ์ธ๋ถ ์์คํ ์์ ์ฌ์ฉ์ ์๊ฒฉ ์ฆ๋ช ์ ๊ด๋ฆฌํ ์ ์๊ณ ๊ทธ ์์คํ ์ผ๋ก๋ถํฐ ๋ก๊ทธ์ธํ๋ ์ฌ์ฉ์์๊ฒ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ์ฌ AWS ์์ ์ ์ํํ๊ณ AWS ๋ฆฌ์์ค์ ์ก์ธ์คํ๋๋ก ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ํ์ด์ค๋ถ์ด๋ ๊ตฌ๊ธ ๊ฐ์ ์ธ๋ถ์์ ๋ก๊ทธ์ธํ ์ ์ ์๊ฒ๋ ์๊ฒฉ์ ๋ถ์ฌํด ๋ด AWS ์๋น์ค๋ฅผ ์ด์ฉํ๋๋ก ํ๊ฑฐ๋ ์ฌ์ง์ด ์ฌ๋์ด ์๋ EC2์๊ฒ๋ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ค.
์ด ๋ถ๋ถ์ ๋์์ IAM ์ญํ (Role)์ ํน์ง์ด๊ธฐ๋ ํ๋ฉฐ, ์์ ์๊ฒฉ ์ฆ๋ช ์ ์ญํ (Role)์ ์ด์ฉํด์ ์๊ฒฉ์ ๋ถ์ฌํ๋ ๊ฒ์ผ๋ก ์ดํดํ๋ฉด ๋๋ค.
IAM ์์๋ ๋ ๊ฐ์ง ์ ํ์ ์๊ฒฉ ์ฆ๋ช ์ฐ๋์ ์ง์ํ๋ฉฐ, ์๊ฒฉ ์ฆ๋ช ์ ๋ชจ๋ AWS ์ธ๋ถ์ ์ ์ฅ๋๋ค.
- ์ํฐํ๋ผ์ด์ฆ ์๊ฒฉ ์ฆ๋ช
์ฐ๋
์์ ์ก์ธ์ค ๊ถํ์ ๋ํ SSO(Single Sign-On) ์ฐ๋์ ํตํด ์กฐ์ง์ ๋คํธ์ํฌ์์ ์ฌ์ฉ์ ์ธ์ฆ์ ํตํ AWS ์ก์ธ์ค ๊ถํ์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ ์ ์๋ค.
AWS STS ์์๋ SAML 2.0 ๊ธฐ๋ฐ ์ฐ๋ ์ ์ง์ํ๋ค. - ์น ์๊ฒฉ ์ฆ๋ช
์ฐ๋
Login with Amazon, Facebook, Google ๋๋ OpenID Connect(OIDC) 2.0 ํธํ ๊ณต๊ธ์์ ๊ฐ์ ์ ๋ช ํ ํ์ฌ ์๊ฒฉ ์ฆ๋ช ๊ณต๊ธ์๋ฅผ ์ฌ์ฉํด ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ์ ์๋ค.
์์ ์๊ฒฉ ์ฆ๋ช ์์ฑ
์์ ์๊ฒฉ ์ฆ๋ช ์ AWS STS(Security Token Service) ์๋น์ค๋ฅผ ์ฌ์ฉํด์ ์์ฑํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ IAM ์ ์ ๋ Web Identity(Facebook ์ ์ )๊ฐ ํน์ ์ญํ (Role)์ Assume(๋ป: ์ ๊ฒ์ผ๋ก ์ผ๋ค)ํ์ฌ ์๊ฒฉ ์ฆ๋ช ์์ฑํด์ ์ญํ ์ ๋ถ์ฌ๋ ๋ชจ๋ ๊ถํ์ ํ์ฌ ๊ฐ๋ฅํ๋ค
์ ์ ๊ฐ role์ assumeํ๋ค๋ผ๋๊ฒ ๋ฌด์จ๋ง์ด๋๋ฉด,
์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ์ผ๊ฐ IAM ์ ์ ๊ฐ ์ด๋๋ฏผ Role ๋ชจ์๋ฅผ ์ฐ๋ฉด(assume) ๋ง์น ์ ์ ๊ฐ ์ด๋๋ฏผ ์ฒ๋ผ ๋์ ์ด๋๋ฏผ ๊ถํ์ ํ์ ํ๋ ๊ฒ์ ๋ปํ๋ค.
์ด๋ฌํ ๋ชจ์๋ฅผ ์ฐ๋ ํ์๋ฅผ assumeRole ์ด๋ผ๊ณ ํ๋ค.
์ฌ์ง์ ์ฐ์ธก๋ถ๋ถ์ Access Key๋ค์ด ์๋๋ฐ ์ด๊ฒ์ด ์์ ์๊ฒฉ ์ฆ๋ช ์ด๋ฉฐ, IAM ์ ์ ๊ฐ ์ด๋๋ฏผ Role ๋ชจ์๋ฅผ ์ฐ๊ฒ๋๋ฉด์ ์์ ์๊ฒฉ ์ฆ๋ช ์ด ๋ฐ๊ธ๋๋ค ๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.

AWS์ IAM ๊ณ์ ๋ฟ๋ง ์๋๋ผ, ํ์ด์ค๋ถ ๊ฐ์ด ์ ๋ช ํ ํ์ฌ ์๊ฒฉ ์ฆ๋ช ๊ณต๊ธ์๋ฅผ assumeํ์ฌ ์ญ์ ์ด๋๋ฏผ ํ์๋ฅผ ํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ assumeRoleWithWebIdentity ์ด๋ผ๊ณ ํ๋ค.

์์ ์๊ฒฉ ์ฆ๋ช ์ ํ
์์ ์๊ฒฉ ์ฆ๋ช ์ ์ ํ์ ๊ฑธ๊ธฐ ์ํด์๋ Permission Policy ์ค์ ์ด ๊ฐ๋ฅํ๋ค.

์ ์ฌ์ง ๋ณด๋ฏ์ด Effective Permissions๋ผ๊ณ ๋ง์น ๊ต์งํฉ ํํ๋ก ๋์ด์๋๋ฐ, ์ด๋ ๋ ธ๋ Policy์์ ๊ฐ๋ฅํ ๊ถํ๋คํ๊ณ ํ๋ Policy์์ ๊ฐ๋ฅํ ๊ถํ๋ค์ ๊ต์งํฉํด ๊ฒน์น๋ ๋ถ๋ถ ๊ถํ๋ง ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฆฌ๋ก ์ด๋ฅผ ํตํด ์๊ฒฉ ์ ํ์ ๋๋๊ฒ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
์ข๋ ์์ธํ ์ค๋ช ํ์๋ฉด, IAM ์ ์ ์๊ฒ S3์ ๋ชจ๋ ๊ถํ(*)์ ๊ฐ์ง ์ญํ (๋ชจ์)๋ฅผ ์์์คํ ๋ฐ, ์ฌ๊ธฐ์ Permission Policy๋ผ๋ ๊ฒ์ ๊ฐ์ด ๋ถ์ฌํ๋ฉด์ ์ด ๋๊ฐ๊ฐ ๊ต์งํฉ ๋์ด, ๊ฒฐ๊ตญ ๊ฒน์น๋ ๋ถ๋ถ๋ง IAM ์ ์ ๊ฐ ๊ถํ์ ์ป์ด S3๋ฅผ getObject(๊ฐ์ฒด ์กฐํ) ํ๋ ์ก์ ๋ง ํ๋ํ ์ ์๋ค๋ ์๋ฆฌ์ด๋ค.

์์ ์๊ฒฉ ์ฆ๋ช ๋ถ์ฌํ๊ธฐ [์ค์ ๊ตฌ์ถ]
์์ ๋ฐฐ์ ๋ ๊ฒ์ฒ๋ผ, ์๋ฌด ๊ถํ ์๋ IAM ์ ์ ๋ฅผ ํ๋ ์์ฑํ๊ณ , S3์์ธ์คํ๋ ๋ชจ๋ ๊ถํ์ ๊ฐ์ง Role์ ์์, ์์์ ์ผ๋ก S3๋ฅผ ๋ง์๋๋ก ๋ค๋ฃฐ์์๋ IAM ์ ์ ๋ก ๋ณ๋ชจ์ํค๋ ๊ณผ์ ์ ์ค์ ์ผ๋ก ์ธํ ํด๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด์.

1. IAM User ์์ฑํ๊ธฐ






2. AssumeRole ์ธ๋ผ์ธ ์ ์ฑ ๋ถ์ฌํ๊ธฐ
์ธ๋ผ์ธ ์ ์ฑ ์ ์๊ฒฉ ์ฆ๋ช ์ ๋ด์ฅ๋ ํํ๋ก ์กด์ฌํ๋ ๊ฒ์ผ๋ก, ์๊ฒฉ ์ฆ๋ช ์ ํ๋ผ๋ฏธํฐ ์ค ํ๋๋ก์ ์๊ฐํ๋ ๊ฒ์ผ๋ก ์ดํดํ๋ฉด ๋๋ค.
assumrole์ ์๋ฌด๋ ๋ง ํ ์ ์๋๊ฒ ์๋๋ค.
assumrole์ด๋ผ๋ ์ ์ฑ ์ IAM ์ ์ ์๊ฒ ๋ถ์ฌํด์ค์ผ, IAM ์ ์ ๋ ์ญํ ์ ๋ถ์ฌ๋ฐ์์์๊ฒ ๋๋ค.





3. IAM ์ญํ (Role) ์์ฑ





4. S3 ๋ฒํท ๋ง๋ค๊ธฐ





5. EC2 ์ธ์คํด์ค ์์ฑ ๋ฐ CLI ์ฐ๊ฒฐ
ํ ์คํธ๋ฅผ ์ํ ์ธ์คํด์ค ํ๋๋ฅผ ๋ง๋ค์ด์ค๋ค. ์ต์ ์ amazon-linux-ami์ ๋ชจ๋ ๋ํดํธ๋ก ๋๋ค.
EC2๊ฐ ์ค๋น๋์์ผ๋ฉด ์ฐ๊ฒฐ ๋ฒํผ์ ๋๋ฌ ์ธ์คํด์ค CLI ์ฐฝ์ผ๋ก ๋ค์ด๊ฐ๋ค.


6. AWS CLI์์ ์ฅ๊ธฐ ์๊ฒฉ ์ฆ๋ช ์ ๋ ฅํ๊ธฐ
์๊น beggar ๋ผ๋ IAM ์ ์ ๋ฅผ ์์ฑํ์๋ ๋ฏธ๋ฆฌ ๋ค์ด ๋ฐ์๋ csv ํ์ผ์ ์ฐ๋ค.
์ด csv ํ์ผ์ ์ ํ์๋ Access key ID(์์ด๋)์ Secret access key(๋น๋ฐ๋ฒํธ)๋ฅผ AWS CLI ํฐ๋ฏธ๋์ ์ ๋ ฅํ๋ค.

$ aws configure # ์ธ์ฆ ์ ๋ณด ์ค์
AWS Access Key ID [None]: AKIAYXPEPKI7CO4LIV67
AWS Secret Access Key [None]: ***********************
Default region name [None]: ap-northeast-2
Default output format [None]: json
$ aws configure list # ์ค์ ํ ์ธ์ฆ ์ ๋ณด๋ฅผ ํ์ธ
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************IV67 shared-credentials-file
secret_key ****************pVnu shared-credentials-file
region ap-northeast-2 config-file ~/.aws/config
์ค์ ์ ์๋ฃํ๊ฒ ๋๋ฉด, ํ์ฌ ํฐ๋ฏธ๋์ ์๋ ๋์ ์๊ฒฉ์, ๋ฐฉ๊ธ ๋ฃ์ access key์ ๋ํ๋๋ IAM ์ ์ ๊ฐ ๋๋ ๊ฒ์ด๋ค.
aws configure ์ ๋ณด๋ฅผ ๋ฑ๋กํ๊ฒ ๋๋ค๋ฉด,
.aws ๋ผ๋ ํด๋์ config์ credentials ํ์ผ์ด ์์ฑ๋๊ฒ ๋๋ค. ( $ ll .aws ๋ช ๋ น์ด ์คํ)
์ฌ๊ธฐ์ ์ธ์ฆ์ ๋ณด๊ฐ ์ ์ฅ๋๋, ์ธ์คํด์ค๋ฅผ ์ฌ๋ถํ ํด๋ ์ธ์ฆ์ ๋ณด๊ฐ ๊ณ์ ์ธ์คํด์ค์ ์ ์ง๋๊ฒ ๋๋ค.
๋ง์ผ ํฐ๋ฏธ๋์ ์ ๋ ฅํ access key์ ๋ํ๋๋ IAM์ ์ ๊ฐ ๋ง์ผ ๋ฃจํธ ์ด๋๋ฏผ ๊ถํ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ์๊ฒฉ์ configureํ๋ฉด ์ด์ ๋ง์น ์ด๋๋ฏผ์ฒ๋ผ AWS ์๋น์ค ์ด๋ฆฌ์ ๋ฆฌ ์์ธ์คํ๊ฑฐ๋ ์์ ํ ์ ์๊ฒ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์์์ IAM์ ์์ฑํ์๋ ์ ์ ์๊ฒ assumerole ์ด์ธ์ ์๋ฌด๋ฐ ๊ถํ์ ์ฃผ์ง ์์๋ค.
๋ฐ๋ผ์ S3 ๋ช ๋ น์ด๋ฅผ ์คํํด๋ AccessDenied ๋ผ๋ ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ ํ์๋๊ฒ ๋๋ค.
$ aws s3 ls # S3์ ์๋ ๋ฒํท๋ค์ ๋์ดํ๋ ๋ช
๋ น์ด

7. AWS CLI์์ AssumeRole ํ๊ธฐ

์ด์ ์๊น ์์ฑํ์๋ S3์์ธ์ค๊ถํ์ ๊ฐ์ง๊ณ ์๋ IAM Role(s3-assume-role)์ ํ์ฌ ํฐ๋ฏธ๋ ์๊ฒฉ(IAM beggar ์ ์ )์๊ฒ ๋ถ์ฌํด๋ณผ ๊ฒ์ด๋ค.
$ aws sts assume-role ๋ช
๋ น์ด์ --role-arn ์ต์
์ผ๋ก ์์์ ์์ฑํ IAM Role์ ARN๊ฐ์ ๋ฃ๊ณ --role-session-name ์ ํตํด ์ธ์
์ด๋ฆ์ ์๋ฌด๊ฑฐ๋ ์ ํด์ค๋ค.
$ aws sts assume-role \
> --role-arn arn:aws:iam::600163963454:role/s3-assume-role \
> --role-session-name MySessionName

๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด json๊ฐ์ ๋ฐํํ๋๋ฐ, ์ด๊ฒ์ด ๋ฐ๋ก ์์ ์๊ฒฉ ์ฆ๋ช ์ ์ด๋ค.

{
"AssumedRoleUser": {
"AssumedRoleId": "AROAYXPEPKI7AELVXXQGV:MySessionName",
"Arn": "arn:aws:sts::600163963454:assumed-role/s3-assume-role/MySessionName"
},
"Credentials": { // ์์ ์๊ฒฉ ์ฆ๋ช
์
"SecretAccessKey": "zbNCsHHT1MhUpuxEy1tGzI75UERZko0cHWSOE+lB",
"SessionToken": "IQoJb3JpZ2luX2VjELT//////////wEaDmFwLW5vcnRoZWFzdC0yIkgwRgIhAIB2NRQ1xUtPGbOkA46XWf7n+gEOVb23hk2i9QleIcsBAiEApBihsYumSlviN0hFZwJ901MMlQhOwiJZuMxRrCMCMzcqmgIIXRAAGgw2MDAxNjM5NjM0
NTQiDC7cpzBNqWEFbrf36Sr3AQaqaEIxgaiGUcBCtpnz3mL0lX2hjteJ3guZckdyeWw8DTuu2OuRaFcbJgbJa41JUYQYytONj1VQvRTh8O/d1LeQYtwGO46ccKYAqBezMHml+hu7KX82ioaGl1QzWPMqzNVblnPJw3xxsSynyOO3qj+x5HSvhxYSO3HpfR//IJWqk5VTs
AjC0FFBpNj40a/hLiJ6+3QvLSfYGc1vMdzXJc7PUdf9F5Y5wooJWSrNsIjRbLWmeIknPAxvmUh6yurVNIurr/7T6KXr9fl3tbBrPO5aU+mr2pzJNyZt6XRh2HugxlvX2Q3mflfWAyePzGlF/5cGyTwOK2ww2O/akgY6nAE508MVZO81dKWKVLSUZwk0k5xy+PL7mKafgd
9iLDXGnGlusIyTmOVgjsJK/nChQ9tP0hrVFAj6LNbxod0KGIWrqzN6RhQZo4nrKAbIuI4clWqXtCbqmENNCZzOcvx5M06EKNnCN3nkn9A2Cyhba36Qg7jBZwGN6SqDaxkajO9LFV9EaamiBSO1ckxqyC5DNZgBmX3jfXgebxYzVmk=",
"Expiration": "2022-04-13T12:45:28Z", // ํ ํฐ ๋ง๋ฃ ์๊ฐ
"AccessKeyId": "ASIAYXPEPKI7MQO6G6MO"
}
}
์ด์ ๋ฐ๊ธ๋ฐ์ ํค ๋ฌธ์์ด์ ํ์ฌ ํฐ๋ฏธ๋ ์๊ฒฉ์ ์ฌ๋ฑ๋ก์ ํด์ค๋ค.
AWS_ACCESS_KEY_ID ํ๊ฒฝ๋ณ์์ ์์์ ๋ฐ๊ธ ๋ฐ์ ์์ ์ฆ๋ช ์์ ํค๋ค์ ๋ฃ์ด ํฐ๋ฏธ๋์ ์๊ฒฉ ์ฆ๋ช ํ๊ฒฝ ์ค์ ์ ํ๋ ๊ฒ์ด๋ค.
$ aws configure set aws_access_key_id <AccessKeyId ๋ฌธ์์ด>
$ aws configure set aws_secret_access_key <SecretAccessKey ๋ฌธ์์ด>
$ aws configure set aws_session_token <SessionToken ๋ฌธ์์ด>
๊ทธ๋ฆฌ๊ณ s3๋ฅผ ์กฐํํด๋ณด๋ฉด ๋ฒํท๋ช ๊ณผ ํ์ผ๋ค์ด ๋์ค๋๊ฑธ ํ์ธ ํ ์ ์๋ค.
๋ฐ๊ธ ๋ฐ์ IAM Role์ ์์ ์๊ฒฉ ์ฆ๋ช ์์๋ S3๋ฅผ์์ธ์ค ํ๋ ๊ถํ์ด ๋ค์ด์์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๊ฒ์ด๋ค.
$ aws s3 ls # ๋ฒํท ๋์ด
$ aws s3 ls <๋ฒํท๋ช
> # ํด๋น ๋ฒํท์ ์๋ ํ์ผ๋ค ๋์ด
์์ ์๊ฒฉ ์ฆ๋ช ์ ๋ฐ๊ธ ๊ณผ์ ์ ๋ฆฌ
์ง๊ธ๊น์ง์ ์ฆ๋ช ์ ๋ฐ๊ธ ์์๋ฅผ ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋๋ค.
- AWS CLI์ access key์ secret access key๋ฅผ ๋ฃ์ด IAM ์ ์ ์๊ฒฉ(์ฅ๊ธฐ ์๊ฒฉ ์ฆ๋ช ์)์ ํฐ๋ฏธ๋์์ ํ๋
$ aws sts assume-role๋ช ๋ น์ด๋ฅผ ํตํด IAM Role์ ๋ถ๋ฌ์ ์์ ์๊ฒฉ ์ฆ๋ช ์๋ฅผ ํ๋ (๋จ์ฐํ IAM ์ ์ ์๊ฒ๋ assumrole์ ํํ ์์๋ ๊ถํ์ด ์ฃผ์ด์ ธ ์์ด์ผ ํ๋ค)- ๋ฐ๊ธ๋ฐ์ ์์์๊ฒฉ ์ฆ๋ช ์์ ํค์ ํ ํฐ๋ค์ CLI์์ ๋ค์ configure ํ๋ค.
- ๊ทธ๋ฌ๋ฉด ์ผ์ ๊ธฐ๊ฐ๋์ IAM Role์ ์๋ ๊ถํ์ ๊ตฌํํ ์ ์๊ฒ ๋๋ค.
# ์ฐธ๊ณ ์๋ฃ
https://www.youtube.com/watch?v=pLlX-uxhsXg&t=1040s
์ด ๊ธ์ด ์ข์ผ์ จ๋ค๋ฉด ๊ตฌ๋ & ์ข์์
์ฌ๋ฌ๋ถ์ ๊ตฌ๋
๊ณผ ์ข์์๋
์ ์์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค.