Skip to content

dbwltmd95/aws_devops

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

     ___        ______     ____ _                 _  ___  
    / \ \      / / ___|   / ___| | ___  _   _  __| |/ _ \ 
   / _ \ \ /\ / /\___ \  | |   | |/ _ \| | | |/ _` | (_) |
  / ___ \ V  V /  ___) | | |___| | (_) | |_| | (_| |\__, |
 /_/   \_\_/\_/  |____/   \____|_|\___/ \__,_|\__,_|  /_/ 

All AWS DevOps 환경 구축

목차

  1. CDK 배포
  2. 쿠버네티스 대시보드 접속
  3. 빌드 환경 수정
  4. 파이프라인 설정

요구사항

  • Cloud9 (IDE)
  • Slack 채널의 Web Hook URL



CDK 배포

1. Cloud9에 접속

Cloud9

2. AWS 임시 자격증명 해제

image

설정 → AWS Settings → Credentials → AWS managed temporary credentials 체크 해제

3. AWS IAM 사용자 추가

aws configure

image

AWS IAM → 사용자 → 보안 자격 증명탭을 확인하면 액세스 키를 발급 받을 수 있다.

profile 설정

#aws configure --profile [name]
aws configure --profile noose

위 aws configure 설정값과 동일하게 입력한다.



4. 환경변수 세팅

sudo yum install -y jq
export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account)
export AWS_REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region')
echo "export ACCOUNT_ID=${ACCOUNT_ID}" | tee -a ~/.bash_profile
echo "export AWS_REGION=${AWS_REGION}" | tee -a ~/.bash_profile
aws configure get default.region # region 확인



5. kubectl 설치

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.17.0/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl help



6. CDK 환경을 위한 라이브러리 설치

sudo yum install -y npm
npm install -g aws-cdk@1.30.0 --force
npm install -g typescript@latest



7. CDK 빌드

git clone https://github.com/n00s3/aws_devsecops
cd aws_devsecops/cdk
cdk init
npm install
npm run build
cdk ls



8. CDK 배포

cdk synth --profile [name]
cdk bootstrap aws://$ACCOUNT_ID/$AWS_REGION --profile [name]
cdk deploy --profile [name]

cdk deploy

스택 생성을 하는데 클러스터 생성 과정이 포함되어 있어 15~20분 정도 소요된다.

명령어 설명
cdk synth AWS CDK 애플리케이션을 AWS CloudFormation 템플릿으로 컴파일합니다. (cdk.out 디렉터리에 출력)
cdk bootstrap AWS CDK 앱을 환경 (계정/리전)에 배포하기 위해서는 먼저 bootstrap stack이라는 것을 설치해야 한다.
cdk deploy CDK 배포


9. 스택 생성 확인

cdk

  • CdkStackDevops : 배포된 스택
  • CDKToolkit : 부트스트랩 스택

AWS::EKS::Cluster는 Kubernetes 리소스에 대한 기본 제어 권한이 없다.
그렇기 때문에 Lambda 함수나 IAM 역할 등이 포함된 중첩 스택이 별도로 설치된다.



10. kubeconfig 업데이트

Cloud9 환경의 쿠버네티스와 EKS와 매핑하는 작업이다.

Cloudformation → 스택 선택 → 출력
CdkStackDevops 스택의 출력값을 확인하면 ClusterConfigCommand의 값을 복사 후 실행한다.

aws eks update-kubeconfig --name <Cluster_NAME> --region ap-northeast-2 --role-arn <ROLE_ARN>

노드 확인

kubectl get nodes



10. sh 스크립트를 사용해 컨테이너 배포와 인그레스 설치

Route53 도메인 또는 도메인이 있는 경우

자신의 도메인에 맞게 yaml파일의 호스트를 수정한다.

cd ../docker-app/k8s/k8s_backup
vi devopsALBIngress_query1.yaml
cd ..
chmod +x setup2.sh
INSTANCE_ROLE=$(aws cloudformation describe-stack-resources --stack-name CdkStackDevOps | jq .StackResources[].PhysicalResourceId | grep CdkStackDevOps-ClusterDefaultCapacityInstanceRol | tr -d '["\r\n]')
CLUSTER_NAME=$(aws cloudformation describe-stack-resources --stack-name CdkStackDevOps | jq '.StackResources[] | select(.ResourceType=="Custom::AWSCDK-EKS-Cluster").PhysicalResourceId' | tr -d '["\r\n]')
echo "INSTANCE_ROLE = " $INSTANCE_ROLE 
echo "CLUSTER_NAME = " $CLUSTER_NAME
./setup2.sh $AWS_REGION $INSTANCE_ROLE $CLUSTER_NAME

setup2.sh 스크립트를 통해 Blue, Green, ARX_API서버, Sonarqube 컨테이너가 생성되고 로드밸런서가 생성된다.

로드밸런서 확인

image image 호스트를 기반으로 라우팅한다.

Route53 도메인 설정

image

  1. ALB의 DNS 주소를 복사한다.
  2. Route53의 레코드를 CNAME 유형으로 리스너 규칙에 맞게 등록한다.



Route53 도메인 또는 도메인이 없는 경우

도메인이 없는 경우 쿼리 파라미터를 기반으로 라우팅 한다.

kubectl apply -f devopsALBIngress_query.yaml



11. 클러스터 보안 그룹 수정

image

ClusterDefaultCapacityInstanceSecurityGroup의 인바운드에 80포트(HTTP)를 열어준다.

12. 접속 확인

image image image image

13. SecurityHub, Guardduty 활성화

SCA, SAST, DAST 보고서를 받을 수 있도록 대시보드에서 활성화 한다.



쿠버네티스 대시보드 접속

Cloud9 → Tools → Preview Running Application → 브라우저
브라우저에 주소 입력
Cloud9_URL/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

# 토큰 확인
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')





빌드 환경 수정

1. 빌드 요구사항

빌드를 하기에 앞서 자신의 환경에 맞게 몇가지를 수정해야 한다.

2. Lambda 코드 수정

Cloudformation의 CdkStackDevOps 스택 출력값 확인

  • S3Bucket
  • lambdaSecurityHub
  • lambdaSlack

image

lambdaSecurityHub, lambdaSlack 함수명을 확인하고 각 AWS Lambda에서 함수를 수정한다.

### import_findings_security_hub.py
#s3bucket = "myfirstbucket" 
s3bucket = cdkstackdevops-myfirstbucketb8884501-1wki5u8hkln10 #S3Bucket 출력값으로 수정한다.
### slack.py
#url = "https://hooks.slack.com/services/"
url = 'Slack 채널의 Web Hook URL'



3. CodeBuild SAST 프로젝트 환경변수 수정

Sonarqube 프로젝트에 맞게 환경변수 값을 세팅해야 한다.
image

  1. 자신의 sonarqube 주소로 접속
  2. admin/admin 로그인
  3. 'Create new project' 클릭
  4. 'Project Key' 입력
    환경변수 SonarQube_Project의 값과 같아야 한다.
    만약 Sonarqube Project Key를 'test'로 만들었다면 SonarQube_Project 값도 'test'로 동일하게 변경한다.
  5. token을 생성하고 제공되는 token값을 복사 한다.
  6. 복사한 token 키값을 SonarQube_Access_Token 값에 입력한다.
  7. SonarQube_URL 값은 자신의 sonarqube URL로 입력한다.

4. CodeBuild DAST 프로젝트 환경변수 수정

동적분석 수행 대상을 설정해야 한다.

  1. AWS CodeBuild 접속
  2. DAST 프로젝트 선택 후 편집
  3. 환경 클릭
  4. hostname 값을 자신의 테스트 서버 URL로 수정한다.





파이프라인 설정

CodeCommit 요구사항

image

CodeCommit 레포지토리에 Push

git remote add codecommit https://git-codecommit.$AWS_REGION.amazonaws.com/v1/repos/CdkStackDevOps-repo
git push codecommit master

Push시 unable to access 에러가 발생하는 경우 아래와 같은 명령어를 입력한다.

git config --global --unset credential.helper

CodeCommit Access key는 AWS IAM → 사용자 → 보안 자격 증명탭에서 발급 받을 수 있다.

트리거가 작동하며 파이프라인이 실행된다.

image



CDK 삭제

kubectl delete svc/devops-svc-alb-blue svc/devops-svc-alb-green svc/devops-svc-alb-api svc/devops-svc-alb-sonarqube -n devops-alb

kubectl delete deploy/devops-deploy-alb-blue deploy/devops-deploy-alb-api deploy/devops-deploy-alb-sonarqube deploy/devops-deploy-alb-green -n devops-alb

kubectl delete ingress alb-ingress -n devops-alb

kubectl delete deploy alb-ingress-controller -n kube-system

kubectl delete deployment,service kubernetes-dashboard -n kube-system

cdk destroy --profile [name]





CDK 스택 수정

cd cdk/lib
vi cdk-stack.ts # stack 수정

# 재배포
cd ..
npm run build
cdk synth --profile [name]
cdk diff --profile [name]
cdk deploy --profile [name]

image cdk diff 명령어를 수행하면 삭제/추가 되는 리소스를 확인 가능하다.

  1. 전체적인 인프라를 구성하는 스택을 변경하고 싶다면 cdk-stack.ts을 수정
  2. 자신의 빌드 환경에 맞게 구성하고 싶으면 buildspec.yaml 파일을 수정

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published