AWS/Project

여러 Account 및 VPC에서 하나의 CodePipeline 공유

jih0ssang 2024. 7. 13. 08:00

참고 자료: https://youtu.be/F5ZPD3Z53so?si=DOOXLH6oAMIRY1yp

여러 Account 및 VPC에서 여러 CodePipeline 구성

 

Account 및 VPC 갯수가 많은 대규모 시스템일 경우, 

환경별 CodePipeline을 구성하고 Sync하는 방식으로 진행하는 것이 옳을 것 같다.

하지만 비용 및 공수가 환경별로 들며, 푸시를 환경별로 해야하는 부담이 있다.

 

여러 Account 및 VPC에서 하나의 CodePipeline 구성

Account 및 VPC 갯수가 많지 않은 시스템을 구성하고 있을 경우,

하나의 코드파이프라인을 환경별 계정에서 공유하는 방식을 권장한다. 

Cloud A 계정에 CodePipeline을 구성하고, 환경별 Account(Dev, Product) 및 VPC가 해당 파이프라인을 공유하는 방식으로 구성하겠다. 해당 구성은 환경별 배포 파이프라인을 구축하는 것보다 비용 및 공수가 적으며, 소스코드들을 한번에 관리하기 용이하다.

 

CodePipeline(CodeCommit  CodeBuild) Flow           ( → : 트리거)

  1. 사용자가 소스 Push  →  CodeCommit
  2. CodeCommit   →  CodePipeline에서 CodeBuild에게 빌드시작 요청(명령)
  3. CodeBuild가 미리 정의된 빌드 인스턴스(CodeBuild instance) 생성
  4. CodeBuild instance는 CodeCommit에 접근해서 소스코드 가져와 빌드와 유닛테스트 진행.
  5. 결과물을 S3에 업로드

403 Error! CodeBuild가 가지고 있는 권한 중 KMS과 S3 접근권한 있는지 확인 !!

 

CodePipeline(CodeBuild  CodeDeploy) Flow           ( → : 트리거)

사전환경: 배포 그룹(Deploy Target) 내 CodeDeploy-agent가 깔려있는 상태

  1. Cloud A 계정의  CodePipeline이 Cloud Dev 계정의 EC2 내 CodeDeploy-agent에게 배포 요청(명령)

이때, 다른 환경의 EC2는 보이지 않을 것이다. 왜냐하면 콘솔환경에서는 지원하지 않고, CLI 환경에서만 지원한다.

파이프라인 config 파일(json 파일 형태) 다운받은 후, 가장 하단부에 CodeDeploy arn을 박으면

환경별 CodeDeploy-agent CodePipeline을 바라보게 된다.

   2. 환경별 CodeDeploy-agent는 Cloud A 계정의 S3 에 접근해 빌드된 파일을 가져와 ELB를 통해 배포

 

Cloud A 및 환경별 계정(Cloud Dev, Product)이 필요한 권한

CodePipeline

Role1. 각 환경별(Cloud Dev, Product) 계정 접근 권한

A 계정의 CodePipeline에게 Dev, Product 계정의 접근 권한(AdministratorAccess) 부여

 임시로 Admin 권한 주었으나, 이후 범위 축소 요망

 

환경별 CodeDeploy-agent에게 명령을 내리기 위해 환경별 계정 접근 권한을 부여한다.

 

Role2. CodeDeploy 실행 권한

환경별 CodeDeploy-agent에게 명령을 내리기 위한 CodeDeploy 실행 권한을 부여한다.


CodeBuild

Role1. S3 접근 권한

Codebuild에게 S3 접근 권한(AmazonS3FullAccess) 부여
CodeBuild에서 빌드 프로젝트 생성시 활용

CodeBuild에서 빌드 및 테스트 완료한 파일을 S3에 업로드하기 위해 S3 접근 권한을 부여한다.

 

Role2. KMS Key

S3에 파일을 올릴 때, KMS Key가 필요하다.

여러 계정으로 쪼개져있는 경우, 고객 관리형 키로 발급받아서 계정별로 공유해야한다.


EC2

Role1. S3 접근 권한

모든 EC2에 IAM 프로파일(역할)을 연결하여 권한 적용

환경별 EC2들이 A 계정의 S3 내 아티팩트를 가져오기 위해 S3 접근 권한을 부여한다.

 

Role2. KMS Key 복호화 및 암호화

KMS Key를 가지고 있어야 S3 내 암호화된 아티팩트를 가져와 읽을 수 있다.


CodeDeploy

Role1. Cloud A 계정의 S3 접근 권한

환경별 EC2 내 설치된 CodeDeploy-agent들이 Cloud A 계정의 S3 접근하기 위해 권한을 부여한다.

Role2. CodeDeploy 실행  권한(AWSCodeDeployRole)

CodeDeploy-agent가 S3에서 다운로드한 config 파일에서 역할 부여 설정


EC2 내 CodeDeploy-Agent 설치

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/getting-started-codedeploy.html

1단계: 설치 방식(2가지)

  1. SSM을 통해 Agent 설치 (CodeDeploy 생성시 선택 가능)
    https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ssm.html

  2. CLI 통해 Agent 설치 (직접 수동 설치)
    https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-cli.html

 

IAM 권한 설정

  1. IAM User의 Access Key 및 Secret Key
  2. IAM Role (임시보안 자격증명 Secuirty Token Service:STS)
    https://blog.hbsmith.io/%EC%A1%B0%EA%B8%88%EC%9D%80-%ED%8A%B9%EC%9D%B4%ED%95%9C-%EC%98%A8%ED%94%84%EB%A0%88%EB%AF%B8%EC%8A%A4%EC%99%80-aws-codedeploy-%EC%97%B0%EB%8F%99%EA%B8%B0-3-sts-%EC%84%B8%EC%85%98-%EC%A0%84%EC%B2%B4-%EB%B0%B0%ED%8F%AC%EC%99%80-%EB%B6%80%EB%B6%84-%EB%B0%B0%ED%8F%AC-d511e631e613

2단계: CodeDeploy에 대한 서비스 역할 생성

3단계: CodeDeploy 사용자 권한 제한

4단계: Amazon EC2 인스턴스에 대한 IAM 인스턴스 프로파일 만들기

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/getting-started-create-iam-instance-profile.html#getting-started-create-iam-instance-profile-cli

이미 필요한 권한 인스턴스에 연결해두었다면 VM 내부에서 json 형식의 텍스트 파일 생성해서 진행하면 된다.