CodeCommiit/CodeBuild에서 ECR Push로 전환할 때 Private 환경에 있는지 확인하는 중요 사항
10137 단어 AWSECRCodeCommitCodeBuildtech
네트워크를 거치지 않고 파이프를 만들 수 있습니까?
우선 인터넷을 거치지 않고 파이프를 만들 수 있느냐는 의문이 있다.아래 자료의 p.58도 있습니다. 이것에 관해서는 YES입니다.
VPC 단말기를 경유하면 인터넷에 접속하지 않아도 서비스와 합작할 수 있다.
AWS CodeCommiit, AWS CodeBuild, AWS CodeDeploy는 VPC 엔드포인트에 적합
고객 터미널에서 VPC 엔드포인트를 통해 AWS CodeCommiit로 전송됩니다.
AWS CodePipeline 내에서는 AWS 서비스 간 관계로 인해 폐역망을 통해 협력하게 된다.
이번 보도의 목적
이번엔 이 구성과 완전히 다르지만 같은 구성을 이용하고 싶어요.그리고 인터넷에 접속하지 않는 동시에 인터넷에서 더 이상 접속되지 않는지에 대한 관점에서 CodeCommiit, CoduBuild, ECR을 총괄하고 싶습니다.
어떤 처리·구성이 될까요?
전체 구성을 논의하다.처리 프로세스로 EC2 Instance에서 CodeCommiit Push에 이르면 CodeBuild가 시작되어 구축됩니다.구문 프로세스 중에 Docker 이미지를 ECR로 복사한다고 가정합니다.
사용된 서비스
나는 AWS
CodeCommit
,CodeBuild
,CodeDeploy
,CodePipeline
를 이용하여 Elastic Container Registry(ECR)
를 이용하여 인터넷에 없는 CI/CD 파이프라인을 구축하고 싶다.CodeCommiit에 대한 PushEC2
를 수행하거나 설계 목적지ECS
로 사용할 수 있습니다.그러나 이번 기사에서는 제목과 같이 CodeCommiit+CodeBuild+ECR에 초점을 맞추겠습니다.
구성도
구성도는 이런 느낌.CodeBuild는 VPC 내에서 중요한 요소입니다.이번 설명의 범위는 붉은 선의 부분이다.
정말 Private 환경인가요?
CodeCommit, CodeBuild, ECR
에서 나는 확인하고 고려해야 할 항목을 열거했다.CodeCommit
먼저 CodeCommiit 액세스에 대해 살펴보겠습니다.CodeCommiit 는 다음 사항을 고려해야 합니다.
VPCエンドポイントを利用すること
네트워크에 없는 폐쇄 통신을 할 수 있다.그림을 구성하는 EC2 Instance에서git-codecommiit를 따릅니다.하지만 ComdeCommiit로 창고를 만들면 다음 명령이 표시됩니다.CodeCommiit에는 창고 정책과 Security Group 등 접근을 제한하는 기구가 없기 때문에 ②의 경우 외부에서 통신할 수 있다.git clone https://git-codecommit.<Region>.amazonaws.com/v1/repos/<RepogitoryName>
CodeCommiit 창고에 액세스하려면 인증 정보가 필요합니다.따라서 https
통신은 가능하지만 인증 단계에서는 실제 창고 방문을 방지할 수 있다.CodeCommiit 창고는 Giit 기반의 Giit 인증 정보를 포함하는 Giit의 기본 기능을 지원하기 때문에 CodeCommiit에서 작업할 때 IAM 사용자를 사용하는 것을 권장합니다.다른 ID 유형으로 CodeCommiit에 액세스할 수 있지만 다른 ID 유형에는 다음과 같은 제한이 있을 수 있습니다.
결과적으로 인증 설정이 좋으면 사적인 환경이라고 할 수 있다.
CodeBuild
CodeBuild에 대해서는 다음을 고려해야 합니다.
AWS CodeBuild는 클라우드에서 실행되는 완전한 관리 방식의 구축 서비스입니다.CodeBuild는 소스 코드를 컴파일하고 유닛 테스트를 수행하여 즉시 설계할 수 있는 위상을 생성합니다.
CodeBuild를 통한 작업은 파일
buildspec.yml
을 통해 지정할 수 있습니다.그런 다음 결과가 나오는 파일(위영)을 S3에 저장하거나 ECR에 밀어 넣습니다.기본적으로 AWS 서비스 간의 협력으로 VPC 내의 자원에 접근하지 않으면 VPC 이외의 자원으로 사용해도 문제가 없을 것이다.다만, 실제로 구축할 때의 조작 상황에 따라 다르다.
예를 하나 들다.다음은 Docker 이미지를 구축 출력으로 생성하고 Docker 이미지를 ECR 저장소로 밀어내는 것입니다.
buildspec.yml
version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
- docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker image...
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
Dockerfile
FROM golang:1.12-alpine AS build
#Install git
RUN apk add --no-cache git
#Get the hello world package from a GitHub repository
RUN go get github.com/golang/example/hello
WORKDIR /go/src/github.com/golang/example/hello
# Build the project and send the output to /bin/HelloWorld
RUN go build -o /bin/HelloWorld
FROM golang:1.12-alpine
#Copy the build's output binary from the previous build container
COPY /bin/HelloWorld /bin/HelloWorld
ENTRYPOINT ["/bin/HelloWorld"]
이 Docker file은 Golang의 이미지 파일을 지정합니다.buildspec.yml에서 docker build
실행하지만, 이 명령을 실행할 때 로컬에 그림 파일이 없으면 Docker Hub에서 가져옵니다.여기서 조금 번거로운 부분에서는 VPC 이외의 자원으로 쓰이면 어느새 인터넷에 접속하게 된다.그러나 이를 VPC 내의 자원(인터넷이 없는 경우)으로 삼으면 의외의 인터넷 통신을 방지할 수 있다.따라서 최종 시점에서 VPC 내 리소스인 VPC 외부의 액세스를 제어하는 것이 좋습니다.
Elastic Container Registry(ECR)
ECR 의 고려 사항은 다음과 같습니다.
2020년re:Invent는 컨테이너 이미지를 퍼블릭 갤러리에 공개할 수 있는 ECR을 공개등록표로 발표했다.
그리고 창고에 공공을 설치할 수도 있다.공공 창고와 개인 창고의 차이는 공식 FAQ가 비교적 이해하기 쉽다는 데 있다고 생각한다.
개인 창고는 콘텐츠 검색 기능을 제공하지 않으며 이미지 조합을 허용하기 전에 AWS 계정 인증 정보를 사용하는 Amazon IAM 기반 인증이 필요합니다.공용 창고에는 설명적인 내용이 있어 AWS 계정이 필요 없고, IAM 인증 정보를 사용하지 않더라도 누구나 임의의 곳에서 이미지를 인용할 수 있다.ECR 공중 갤러리에서도 공중 창고의 이미지를 얻을 수 있다.
이처럼 공개 범위를 통제할 필요는 있지만, 개인이라면 외부의 통신을 막을 수 있기 때문에 이번에는 개인이 설정하는 게 좋다는 취지다.
총결산
당분간 세 가지 서비스에 대해 개인적인 환경이라는 관점으로 확인해 봤다.결론적으로 CodeCommiit 및 ECR은 IAM 기반 인증이 있으므로 외부에서 액세스 제어가 가능합니다.다만, ECR은 등록 창고를 공개하지 않도록 주의해 주십시오.
CodeBuild는 구축 작업을 할 때 무심코 외부로 통신할 수 있기 때문에 VPC 내 자원으로서 비교적 안전하다고 생각합니다.
다른 서비스들을 포함한 구성도 설명하고 싶었는데 길어 보이기 때문에 이번에는 범위를 조금 잘라 기사로 정리했다.
Appendix:빌드 시 고려 사항
CodeBuild에서 ECR에 액세스하려면 다음 끝점을 생성해야 합니다.
S3와 logs가 없어 다친 경우도 있으니 주의해야 한다.
Reference
이 문제에 관하여(CodeCommiit/CodeBuild에서 ECR Push로 전환할 때 Private 환경에 있는지 확인하는 중요 사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/chittai/articles/20210204-cicd-in-private텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)