ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS cloudformation , codedeploy 를 활용한 프로비저닝 관리
    AWS 2016. 8. 3. 16:03

    West Florida 대학교에서 작성한 Automated AWS Provisioning and Deployment Using CloudFormation and CodeDeploy 튜토리얼을 정리한 내용입니다. 

    먼저 기본적으로 사용하는 서비스는 아래와 같습니다. 

     
    - 인증 및 권한 관리 : IAM
    - main service : CloudFormation
    - Code Deploy : S3
    -  Linux AMI 를 통해 Linux 인스턴스를 배포하고 인스턴스마다 AWS CLI 가 설치되어 있어야함 
     
    1. Basic Mechanism
     




    1) 맨 위 레이어는 우리가 가진 build server 
     - deploy.sh 은 bash script 이며 아래와 같은 커맨드들을 포함하고 있음 
      . 모든 application 을 압축해서 S3 로 전송
      . CloudFormation 에게 EC2 인스턴스를 프로비저닝 할 것을 전달 
      . CodeDeploy 에게 어떠한 인스턴스에 어떤 어플리케이션이 있는지 전달
     
    2) CloudFormation Template file (cfTemplate.json) 
      . 인스턴스와 네트워크 환경과 같은 CloudFormation 서비스에 대해 정의함 
      . User Data 영역의 Bash script 를 가지고 있고 인스턴스가 기동 시 CodeDeploy Agent 를 설치하고 기동함 
     
    3) A directory (/myApp)
       . application 설치를 위해 필요한 모든 내용을 담고 있음 
       (예제에서는  python 기반의 HTTP 서버를 띄워서 간단한 web site 를 구성할 것임)
       . web site 는 single index.html 테스트 페이지가 있는데 CodeDeploy 를 사용하기 위해서 
       서버를 기동하고 CodeDeploay Agent 구성 요소로 사용하는 appspec.yml 을 startApp.sh script 에 추가해야 한다. 
     
    두번째 레이어는 AWS 서비스를 보여줌 
     1) Cloudformation 은 자동으로 프로비저닝 하고 EC2 가상 하드웨어(Insatnaces, LB, Virtual Networks)를 구성하기 위한 AWS 의 서비스 
     
     2) CodeDeploy 는 서비스와 agent 로 구성된 deployment service
     Build server 는 application이 deployment 가능한 상태가 되었을 때 CodeDeploy 서비스에 전달
     인스턴스의 CodeDeploy Agent 는 주기적으로 배포할 job 이 있는지 CodeDeploy 서비스를 쿼리함 
     
     3) S3 스토리지 서비스는 CodeDeploy Agent 가 설치를 위해 필요한 패키지와 application 압축 파일을 가지고 있음 
     
     
    2. Authentication and Authorization Issues
     
    만약 cloudformation 과 codedeploy 가 H/W 와 application 을 배포할 수 있다면, 잠재적인 공격자는 악성 코드를 배포하는데 이용할 수 있다. 이러한 공격을 방지하기 위해서 자격 증명은 각 배포 프로세스 단계마다 확인해야 한다. AWS 는 IAM (Identity and Access Management) 서비스와 STS(simple token service)를 통해 필요한 자격증명을 생성/관리할 수 있다. 
     
    authentication / authorization 진행 과정
     
     1) 인스턴스는 S3 에 접근하여 CodeDeploy Agent 패키지를 가져오고 사용자의 응용 프로그램 zip 파일을 읽는다. 이 때 cloudformation 은 새로운 인스턴스에 IAM 인스턴스 프로파일을 첨부한다. 
     그 프로파일은 S3 에 접근할 수 있는 IAM EC2 role 을 포함하고 있고 EC2 서비스의 역할을 가정할 수 있는 신뢰 관계를 갖는다. 인스턴스에 기동되어 있는 어떠한 프로세스든 STS 를 부르기 위해 EC2 role 을 사용하고 S3 를 호출하기 위한 임시 토큰을 발급받는다. 
     
     2) CodeDeploy 서비스는 어떤 spec 의 인스턴스에 어떤 application 이 배포되어야 하는지 사용자의 EC2 인스턴스를 스캔하고 태그를 확인한다. 이러한 접근을 위해 IAM service role 을 만들고 인스턴스 목록을 만들고 태그를 읽는것을 허용한다. service role의 신뢰 관계는 CodeDeploy 서비스가 역할을 가정 할 수 있다. 
     
     3) cloudformation,Codedeploy,S3 의 자격증명을 통해 deploy.sh 스크립트가 수행된다. 이 자격증명 역시 서비스에 의해 상속된다. 예를들어 IAM 인스턴스 프로파일을 새로운 인스턴스에 전달하기 위해서는 IAM user 를 정책에 맞게 생성하고 IAM user 의 자격증명 (secret access key and access key id) 을 스크립트 기동 시 제공한다. 
     
     두가지 보안 원칙 
     1) 자격증명은 최소 인원이 만들고 접근해야한다. 
     IAM role 과 IAM user 는 Administrator 로 구성하고 운영중에는 변경하지 않도록 한다. (자격증명은 주기적으로 변경해야한다.)
     생성된 자격증명은 스크립트에 하드코딩하면 안되고 코드 저장소에 대한 읽기 권한을 갖는 사람만 접근할 수 있어야 한다.
     
     2) 자격증명에는 최소한의 권한만 부여되어야 한다. 필요하지 않는 작업에 대해서는 허용되지 않아야 한다. 
     
     
     3. SETTING UP AUTHENTICATION AND AUTHORIZATION
     
     1) IAM EC2 Role / IAM 인스턴스 프로파일 설정
     - S3 접근을 통해 인스턴스를 프로비저닝 하는 방법 / CodeDeploy 에이전트와 응용 프로그램 zip 파일을 포함하는 버킷에 대한 읽기 권한 부여 
     
     2) IAM Service Role 설정 
     - IAM service role 을 codedeploy 서비스에서 사용자의 EC2 목록을 가져오고 tag 를 읽을 수 있도록 허용하고 업데이트가 필요한 인스턴스를 확인할 수 있어야 함 
     
     3) IAM User 설정 
     - IAM user 는 build server 에서 deploy.sh 을 수행하는데 사용된다. 
     
     4) 식별할 태그 선택 
     - 앞에서도 얘기했지만 CodeDeploy 는 설치된 application 확인을 위하 인스턴스를 스캔하고 tag 는 key/value 로 구성되어 있다. 
     
     5) Key Pair 생성 
     - 필수 옵션 아니지만 인스턴스 로그인 할 때 필요하다. 
     
     
     4. SETTING UP ON YOUR BUILD SERVER
     1) AWS CLI 를 통한 Build Server 프로비저닝 
     - EC2 Linux 인스턴스 프로비저닝 
     
     2) SETTING UP YOUR Application
     - 앞에서 얘기한대로 index.html 테스트 페이지만 있는 웹사이트를 만들 예정이고 서버와 CodeDeploy 에이전트에 대한 지침과 함께 appspec.yml 파일을 시작하는 startApp.sh 스크립트를 추가해야 CodeDeploy를 사용할 수 있음 
     
    ==>> startApp.sh
    #!/bin/bash
    # Start python HTTP server to show test page on port 8000
    # Run in background discarding output
    cd /var/myApp/appData/
    nohup python -m SimpleHTTPServer &>/dev/null &
     
     
    ==>> appspec.yml 
    # appspec.yml file to install myApp using CodeDeploy
    version: 0.0
    os: linux
    # Copy all files to /var/myApp
    files:
    - source: /
    destination: /var/myApp
    hooks:
    ## After files have been copied, run the startApp.sh script
    ApplicationStart:
    - location: scripts/startApp.sh
    timeout: 300
     
     
     4) SETTING UP CloudFormation 
     CloudFormation 서비스는 템플릿에 정의된 가상 H/W 의 stack 을 배포한다. 
     인스턴스 SPEC, Security  Group 및 rule, AZ, DNS, Public IP, H/W 생성 후 수행되어야 하는 커맨드, 스크립트 에 대해서 템플릿을 정의함 
     
     
     
    5. THE SCRIPTS AND HOW TO USE THEM
     1) deploy.sh script
     - Build 서버에서 deploy.sh 수행하면 기존에 수행되다 남아있는 작업을 제거하는 스크립트가 수행되고 (이건 deploy.sh 에 정의하기 나름) 앞에서 정의한 cloudformation 템플릿을 통해 EC2 인스턴스를 생성하고 startApp.sh 이 기동되면서 HTTP server 가 기동됨 



    위 게시글은 아래 튜토리얼 스터디를 통해 작성되었습니다. 

    (http://uwf.edu/nwilde/codeDeployTutorial/CodeDeployTutorial.pdf)

    반응형

    댓글

Designed by Tistory.