AWS SSM ์์ด์ ํธ๋ก ํ๋ผ์ด๋น EC2 ์ธ์คํด์ค์ ์ฐ๊ฒฐํ๊ธฐ
์ค๋์ ์๋ง์กด ์น ์๋น์ค์์ ์ ๊ณตํ๋ SSM(System Session Manager) ์์ด์ ํธ๋ฅผ ํตํด์ ํผ๋ธ๋ฆญ IP๋ฅผ ํตํ SSH ์ ์์ด ์๋ HTTPS ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํด์ ํ๋ผ์ด๋น ์๋ธ๋ท์ ์์นํ๋ ์ธ์คํด์ค์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ณ ์ ํฉ๋๋ค.
์ธํฐ๋ท์์ ์ ๊ทผํ ์ ์๋ ์์ดํผ ์ฃผ์๊ฐ ํ ๋น๋์ง ์๋ ํ๋ผ์ด๋น ์๋ธ๋ท์ ์์นํ๋ ํ๋ผ์ด๋น EC2 ์ธ์คํด์ค์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ํผ๋ธ๋ฆญ IP๊ฐ ํ ๋น๋๋ ํผ๋ธ๋ฆญ ์๋ธ๋ท์์ ์คํ๋๋ ๋ฐฐ์ค์ฒ ํธ์คํธ๊ฐ ํ์ํ๋ฉฐ ์ด ๋ฐฐ์ค์ฒ ํธ์คํธ๋ผ๋ ์๋ฒ๋ฅผ ๊ฒฝ์ ํ์ฌ ๋ด๋ถ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ํตํด ํ๋ผ์ด๋น ์ธ์คํด์ค๋ก ์ ๊ทผํ ์ ์๋๋ก ๊ตฌ์ฑํ๊ฒ ๋ฉ๋๋ค. SSH ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํด์ ๋ฐฐ์ค์ฒ ํธ์คํธ์ ์ ์ํ๊ธฐ ์ํด์๋ ํผ๋ธ๋ฆญ DNS ๋๋ ํผ๋ธ๋ฆญ IP ์ฃผ์๋ฅผ ๊ฐ์ง๋ ํผ๋ธ๋ฆญ ์ธ์คํด์ค์ด์ด์ผํ๋ฏ๋ก ๋ฐฐ์ค์ฒ ํธ์คํธ๋ฅผ ๊ตฌ์ฑํ๋ค๋ ์๋ฏธ๋ ๋ถํ์ํ๊ฒ ์ธ์คํด์ค๋ฅผ ์ ์งํ์ฌ ๋น์ฉ์ด ๋ฐ์ํ๋ค๋ ๋ฌธ์ ์ ๋ด๋ถ ์ธ์คํด์ค์ ์ ๊ทผํ๊ธฐ ์ํ ํค ํ์ด๊ฐ ๋ฐฐ์ค์ฒ ํธ์คํธ์ ์๋ค๋ ๋จ์ ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
AWS Systems Manager
HTTPS ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํด์ ์ธํฐ๋ท๊ณผ ์ฐ๊ฒฐ๋์ง ์๋ ํ๋ผ์ด๋น ์๋ธ๋ท์ ์ ๊ทผํ ์ ์๋๋ก ๊ด๋ฆฌํ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ์๋ง์กด ์น ์๋น์ค์ Systems Manager ์๋น์ค๋ฅผ ํตํด์ SSM ์์ด์ ํธ๊ฐ ์ค์น๋ EC2 ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ ์ธ์คํด์ค๋ก ๋ฑ๋กํ์ฌ ๊ด๋ฆฌ๋๋๋ก ๊ตฌ์ฑํด์ผํฉ๋๋ค.
ํธ์คํธ ๊ด๋ฆฌ ๊ธฐ๋ฅ ํ์ฑํ
AWS Systems Manager์ ๋น ๋ฅธ ์ค์ ๊ธฐ๋ฅ ์ค Host Management ๊ตฌ์ฑ์ ํตํด ์ฝ๊ฒ EC2 ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ ์ธ์คํด์ค๋ก ๋ฑ๋กํ๊ธฐ ์ํ ์์ ์ ํ์ฑํ ํ ์ ์์ต๋๋ค. ํ์ต ๋จ๊ณ์ด๋ฏ๋ก ๊ฐ๋จํ๊ฒ ํ์ฌ ๋ฆฌ์ ์ ๋ํ ๋ชจ๋ ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ๋๋ก ์ ํํ๊ณ ์์ฑํ์๊ธฐ ๋ฐ๋๋๋ค.
๊ด๋ฆฌํ ์ธ์คํด์ค ์กฐ๊ฑด ๊ฒํ
Systems Manager์์ EC2 ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ ์ธ์คํด์ค๋ก ๋ฑ๋กํ๊ธฐ ์ํด์๋ ๋ค์์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ด์ผํ๋ฏ๋ก ์ด๋ฅผ ๊ฒํ ํด์ผํฉ๋๋ค.
- SSM ์์ด์ ํธ ์ค์น : EC2 ์ธ์คํด์ค์ SSM ์์ด์ ํธ๊ฐ ์ค์น๋์ด์์ด์ผ ํฉ๋๋ค.
- SSM ์๋ํฌ์ธํธ ์ฐ๊ฒฐ : SSM ์๋น์ค๊ฐ SSM ์์ด์ ํธ๋ก ํต์ ํ ์ ์์ด์ผ ํฉ๋๋ค.
- SSM IAM ์ญํ ์ฐ๊ฒฐ : AmazonSSMManagedInstanceCore ์ ์ฑ ์ ํฌํจํ๋ IAM ์ญํ ์ ์ฐ๊ฒฐํด์ผํฉ๋๋ค.
SSM ์์ด์ ํธ๋ฅผ ์ํ VPC ์๋ํฌ์ธํธ ๊ตฌ์ฑ
SSM ์์ด์ ํธ๋ SSH ํ๋กํ ์ฝ์ด ์๋ HTTPS ์๋ํฌ์ธํธ๋ฅผ ํตํด์ ์ธ์คํด์ค ์ ๊ทผ์ ์ ๊ณตํ๊ธฐ์ ์์ ํธ์คํธ ๊ด๋ฆฌ ๊ตฌ์ฑ์ ํตํด ํ์ฑํ๋ SSM ์์ด์ ํธ๊ฐ VPC ๋ด ํ๋ผ์ด๋น ์๋ธ๋ท์ ์ ๊ทผํ ์ ์๋๋ก AWS PrivateLink๋ก ๊ตฌ๋๋๋ VPC ์ธํฐํ์ด์ค ์๋ํฌ์ธํธ๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
VPC DNS ํธ์คํธ ์ด๋ฆ ํ์ฑํ
๋จผ์ VPC ์๋ํฌ์ธํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ VPC์ ๋ํ ์์ฑ๋ค ์ค์์ DNS ํธ์คํธ ์ด๋ฆ์ ํ์ฑํํด์ผํฉ๋๋ค.
VPC ์๋ํฌ์ธํธ ์์ฑ
VPC์ DNS ํธ์คํธ ์ด๋ฆ์ด ํ์ฑํ๋์์์ ํ์ธํ์๋ค๋ฉด EC2์ SSM ์๋น์ค์ ๋ํ VPC ์๋ํฌ์ธํธ๋ฅผ ์์ฑํฉ๋๋ค.
EC2 ์ธ์คํด์ค ํ๋กํ์ผ ์ง์
๋น ๋ฅธ ์ค์ ๊ธฐ๋ฅ์ ํธ์คํธ ๊ด๋ฆฌ ๊ตฌ์ฑ์ ์ํํ๊ธฐ์ AmazonSSMRoleForInstancesQuickSetup์ด๋ผ๋ IAM ์ญํ ์ด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ์ด์ EC2 ์ธ์คํด์ค๋ฅผ ์คํํ ๋ AmazonSSMRoleForInstancesQuickSetup IAM ์ญํ ์ ์ง์ ํ๋ฉด AWS Systems Manager๊ฐ SSM ์์ด์ ํธ์ ํต์ ํ์ฌ ๊ด๋ฆฌํ ์ธ์คํด์ค๋ก ๋ฑ๋ก๋ฉ๋๋ค.
AWS Systems Manager๊ฐ ๊ด๋ฆฌํ ์ธ์คํด์ค๋ก ๋ฑ๋กํ๋๋ฐ์ ์ฝ๊ฐ์ ์๊ฐ์ด ์์๋ ์ ์์ด ์ ์ ๊ธฐ๋ค๋ฆฌ์ ์ผํ๋ฉฐ ๋ง์ฝ์ AmazonSSMRoleForInstancesQuickSetup IAM ์ญํ ์ด ์๋์ผ๋ก ๋ง๋ค์ด์ง์ง ์์๋ค๋ฉด AmazonSSMManagedInstanceCore ์ ์ฑ ์ ์ง์ ํ IAM ์ญํ ์ ์ง์ ์์ฑํ์๊ธฐ ๋ฐ๋๋๋ค.
IAM ์ญํ
๋ค์์ IAM ์ญํ ์ด ์ง์ ๋์ง ์์ ์ธ์คํด์ค๋ ๋ด๋ถ์ ์ผ๋ก SSM ์์ด์ ํธ๊ฐ ์ค์น๋์ด์์ด๋ SSM ์์ด์ ํธ๊ฐ ํต์ ํ ์ ์๋ ๊ถํ์ด ์์ผ๋ฏ๋ก ์๋์ ๊ฐ์ด ์น ์ฝ์์์ Session Manager๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๋ง์ฝ, IAM ์ญํ ์ด ์ง์ ๋์ง ์์์์ ํ์ธํ๋ค๋ฉด AmazonSSMRoleForInstancesQuickSetup ์ญํ ์ ์ง์ ํ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
HTTPS ์ธ๋ฐ์ด๋ ํธ๋ํฝ ํ์ฉ
AmazonSSMRoleForInstancesQuickSetup ์ญํ ์ ์ง์ ํ์์ผ๋ Session Manager๋ฅผ ํตํด ์ธ์คํด์ค ์ฐ๊ฒฐ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด VPC๋ฅผ ๊ตฌ์ฑํ๋ ํ๋ผ์ด๋น ๋คํธ์ํฌ ์ฃผ์ ๋ฒ์์ ๋ํด์ HTTPS์ ๋ํ ์ธ๋ฐ์ด๋ ํธ๋ํฝ์ ํ์ฉํ๋๋ก ํด์ผํฉ๋๋ค. SSM ์์ด์ ํธ๋ HTTPS ์๋ํฌ์ธํธ๋ก ํต์ ํ์ฌ ์ธ์คํด์ค ์ ๊ทผ์ ์ ๊ณตํ๋ค๋ ์ ์ ์ธ์งํ์ ์ผ ํฉ๋๋ค.
Session Manager ํ์ฑํ
์ ๋ฐ๋ผ์ค์ จ๋ค๋ฉด SSM ์์ด์ ํธ์์ ํต์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ด๋ฃจ์ด์ง๊ณ Systems Manager๊ฐ ๊ด๋ฆฌํ ์ธ์คํด์ค๋ก ๋ฑ๋กํ๋ค๋ฉด EC2 ์น ์ฝ์์ ํตํด์ ํ๋ผ์ด๋น ์ธ์คํด์ค์ ๋ฐฐ์ค์ฒ ํธ์คํธ ์์ด๋ ์ง์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
AWS SSM CLI
SSM ์๋น์ค์ ๋ํ ๊ถํ์ ๊ฐ์ง๋ IAM ํ๋กํ์ผ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด AWS CLI์ ssm ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ํ๋ผ์ด๋น ์ธ์คํด์ค์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ง์ฝ, AWS CLI์ด ์ค์น๋์ง ์์ ์ํ๋ผ๋ฉด ์๋์ ๊ฐ์ด ์ฌ์ฉ์ค์ธ ์ด์์ฒด์ ์ ๋ง๋ ๋ฐฉ๋ฒ์ผ๋ก AWS CLI๋ฅผ ์ค์นํ์๊ธฐ ๋ฐ๋๋๋ค.
SSM ์ธ์ ์์ํ๊ธฐ
AWS CLI์ ์ฌ์ฉํ๊ธฐ ์ํ์ฌ AmazonSSMManagedInstanceCore
์ ์ฑ
์ด ๋ถ์ฌ๋ ํฌ๋ ๋ด์
์ ํ๋กํ์ผ๋ก ๋ฑ๋กํ ํ AWS SSM CLI์ start-session
๋ช
๋ น์ด๋ก ๊ด๋ฆฌํ ์ธ์คํด์ค์ ๋ํ ์ธ์
์ ์์ํ ์ ์์ต๋๋ค.
SSM ํฌํธ ํฌ์๋ฉ
SSM ์์ด์ ํธ๋ ํฌํธ ํฌ์๋ฉ ์ธ์ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ํฌํธ ํฌ์๋ฉ์ ๋ํ ๋ํ๋จผํธ์ ํจ๊ป ๊ด๋ฆฌํ ์ธ์คํด์ค์ ํฌํธ ๋ฒํธ(portNumber) ์ ๋ก์ปฌ ํธ์คํธ์ ํฌํธ ๋ฒํธ(localPortNumber) ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ ๊ณตํ๋ฉด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ๋ผ์ด๋น ์ธ์คํด์ค์ 8080 ํฌํธ์ ๋ํด์ ๋ก์ปฌ ํธ์คํธ์ 5000 ํฌํธ๋ก ์ฐ๊ฒฐํ๊ณ ์ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋ฉ๋๋ค.
aws ssm start-session \
--profile mambo \
--target $instance_id \
--document-name AWS-StartPortForwardingSession \
--parameters '{"portNumber":["8080"], "localPortNumber":["5000"]}'
Starting session with SessionId: $session_id
Port 5000 opened for sessionId $session_id
Waiting for connections...
SSH ์ฐ๊ฒฐ ํ์ฑํ
๊ธฐ๋ณธ์ ์ผ๋ก SSM ์์ด์ ํธ๋ HTTPS ์๋ํฌ์ธํธ๋ฅผ ํตํด์ ํต์ ํ๋ฏ๋ก SSH ์ ์์ ๋ํ 22๋ฒ ํฌํธ์ ๋ํ ๋ณด์ ๊ทธ๋ฃน ์ค์ ์ด ํ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋, SCP์ ๊ฐ์ ๋์์ ์ํด์ SSH ์ฐ๊ฒฐ ํ์ฑํ๋ฅผ ๊ตฌ์ฑํ์ฌ SSM์ ํตํด์ SSH ์ฐ๊ฒฐ์ ์ํํ ์ ์์ต๋๋ค.
~/.ssh/config
# SSH over Session Manager
host i-* mi-*
ProxyCommand C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters portNumber=%p"
๋ด๋ถ์ ์ผ๋ก SSH ํ๋กํ ์ฝ์ ์ฌ์ฉํ ํฐ๋๋ง์ ์ํํ๋ค๋ ์ ๊ณผ SSM ์์ด์ ํธ๋ฅผ ํตํด SSH ์ฐ๊ฒฐ์ ์๋ํ๋ฉด ๋ก๊น ๊ธฐ๋ฅ์ ํ์ฑํ๋์ง ์๋๋ค๋ ์ ์ ๊ฐ์ํ์๊ธฐ ๋ฐ๋๋๋ค.
Interactive CLI - Gossm
์ ๋ ์ฌ์ฉํ์ง๋ ์๊ณ ์์ง๋ง AWS SSM ์ด์ฉํด EC2 ์ ์ํ๋ CLI ๊ฐ๋ฐ์์ ์๊ฐํ๋ gossm์ AWS SSM CLI์ ๋ถํธํจ์ ๋ณด์ํ์ฌ ์ข ๋ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ ๊ณตํ๋ ํ์ฉํด๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
์ฐธ๊ณ
- Setting up Session Manager
- AWS SSM์ผ๋ก EC2 ์ธ์คํด์ค์ ์ ๊ทผํ๊ธฐ (SSH ๋์ฒด)
- AWS Session Manager: A better way to SSH
๊ฐ์ฌํฉ๋๋ค.