안녕하세요. 오늘은 System Manager의 Run Command라는 서비스를 사용하여 Linux 내부에서 보안 스크립트를
실행하고, 실행한 결과 파일을 S3로 Export 해보도록 하겠습니다.
Run Command라는 녀석은.. 저도 아직 파악 중입니다만, 약간 앤서블 비슷한 녀석인 것 같아요.
'AWS Instance를 중앙에서 관리할 수 있고 중앙에서 모든 Instance에 동일한 명령을 실행해주는 녀석!'
이라고 제 나름대로 정의를 내려놓고 사용해보고 있습니다.
우선 이 Run Command라는 녀석을 쓰기 위해서는 사전 준비가 몇 가지 필요한데요. 바로 진행해보겠습니다.
Test 환경은 Amazon Linux 2를 사용하며, 결과를 저장할 S3 Bucket을 생성했다고 가정합니다.
먼저 Instance에 System Manager를 사용할 수 있는 권한과 S3에 Export 할 수 있도록 적절한 권한을 주어야 합니다.
- AWS Web Console - IAM - Roles - Create role - Choose use case == EC2
- S3FullAccess, AmazonSSMManagedInstanceCore Policy 선택
다음은 위에서 생성한 Role을 EC2 Instance에 Attach(부착) 하도록 하겠습니다.
- AWS Web Console - EC2 - Instances - Select - Actions - Instance settings - Attach/Replace IAM Role
이렇게 하면 AWS에서의 사전 준비는 완성입니다.
저는 이후 Instance 내부에 /SecureCheck라는 디렉터리에 스크립트를 위치시켰습니다.
위 스크립트는 실행하게 되면 다음과 같이 스크립트가 실행이 되고, Result Files를 생성합니다.
이러한 과정을 OS 내부에서가 아닌 Run Command를 사용하여 진행하겠습니다.
먼저 System Manager의 Run Command로 이동합니다.
- AWS Web Console - System Manager - Run Command - Run Command
클릭하게 되면 AWS에서 제공하는 많은 Document가 있는데요 이중에는 앤서블 플레이북, PowerShell 등..
아주 다양하게 있지만 저희는 RunShellScrip를 사용해서 Linux 환경에 명령어를 보내겠습니다.
1. RunShellScript
2. Command
./Secure.sh
aws s3 cp "/SecureCheck/" s3://BUCKET_NAME/ --recursive --exclude "*" --include "Result*" --storage-class STANDARD
3. Targets = Choose Instances manChoose instances manually 로도 수동으로 선택하셔도 되지만,
저는 Instance에 Tag를 Key == SeureShell, Value == Run으로 지정하여 Tag 기반으로 Targeting 했습니다.
4. Working Derectory == /SecureCheck
위 s3 명령어에서 궁금증이 있으실 것 같은데요.
--recursive : 이 옵션을 사용하면 지정된 디렉터리 또는 접두사 아래의 모든 파일 또는 객체에 대해 명령이 수행됩니다.
--exclude : 이 옵션을 사용하면 명령에서 지정된 문자열을 제외합니다.
--include : 이 옵션을 사용하면 명령에서 지정된 문자열을 포함합니다.
주의할 점은 --exclude와 –include 옵션은 지정된 순서대로 적용됩니다.
즉, --include 옵션 뒤에 --exclude 옵션을 사용하며 Wildcard(*)를 사용하면 모든 문자열이 제외됩니다.
이렇게 설정하시고 실행을 하시면!!!
아래와 같이 Command 성공 여부가 나타나게 됩니다.
또한, S3 Bucket을 확인해보면 아래와 같이 Result Files가 Export 된 것을 확인하실 수 있습니다.
물론 위에서 Test 환경이기에 EC2 Instance의 Role에 불필요하게 많은 권한을 허용해주었는데요,
환경에 따라 특정 Bucket에만 Upload를 할 수 있게 정책을 짜시면 좋을 것 같습니다 ^^
또한, 위에서는 예제로 간단하게 스크립트를 실행하고, 결과 파일을 S3로 Export 했지만,
활용법은 굉장히 무궁무진할 것 같습니다.
예를 들면, 트랜잭션이 적은 야간시간대에 Mysql Dump를 뜨고, Dump파일을 S3로 Export 하여
Local(EBS)에 보관하는 것이 아닌 내구성이 높은 S3에 보관하는 등 많은 활용법이 존재할 것 같습니다.
더더욱 좋은 것은! 이러한 Run Command는 CloudWatch Event를 설정하여 Cron 형식으로도 실행 가능합니다!!
그럼 Run Command를 잘 활용하여 인프라 관리자들이 좀 더 편하게 근무하시길 바라며,
이만 글 마치겠습니다.
질문은 언제나 환영합니다!!
'AWS > System Manager' 카테고리의 다른 글
Session Manager를 사용하여 OS 내부로 접속하기 (0) | 2021.02.17 |
---|