공부하기싫어
article thumbnail

 

1. CodeBuild Error

1.1 CodeBuild error

AWS Pipeline(v2) 를 통해 CI/CD Pipeline을 구축하던 도중 아래와 같은 에러가 발생했다.

 

CLIENT_ERROR: error while downloading key Pipeline-DEV-Autotra/SourceArti/NmHlUdn, error: RequestError: send request failed caused by: Get "https://codepipeline-ap-northeast-2-123456879.s3.ap-northeast-2.amazonaws.com/Pipeline-DEV-Autotra/SourceArti/NmHlUdn": dial tcp 12.34.56.78:443: i/o timeout for primary source and source version arn:aws:s3:::codepipeline-ap-northeast-2-
123456879
/Pipeline-DEV-Autotra/SourceArti/NmHlUdn

 

아티팩트가 저장되어있는 s3 bucket으로의 접속에 실패하고있다.

v2로 넘어오면서 필요로 하는 보안이 강화된 것 같다.

 

1.2 VPC설정 검증

ID가 vpc-0a4899ec71628571a인 VPC가 인터넷에 연결되지 않았을 수 있습니다. ID가 subnet-0c11a819e8438f61a인 제공된 서브넷이 퍼블릭이기 때문입니다. 대상 NAT 게이트웨이에 대해 0.0.0.0/0 대상의 프라이빗 서브넷을 제공하고 다시 시도하십시오.

 

기본 subnet을 사용했었는데, 프라이빗 서브넷을 만들고 NAT Gateway를 생성하여 접속하라고 한다.

하지만 NAT는 프로비저닝 요금이 발생한다.

 

 

2. Error Handling

VPC 엔드포인트를 사용하여 S3 버킷에 접근할 수 있습니다. 이를 통해 VPC 내부에서 S3 버킷에 안전하게 접근할 수 있으며, NAT 게이트웨이를 사용하지 않으므로 추가 비용이 발생하지 않습니다.

2.1 VPC Endpoint 생성

  • 서비스 이름 : com.amazonaws.ap-northeast-2.s3
  • 유형 : Gateway
  • 정책 : 전체 엑세스

endpoint를 생성해준다

 

2.2 버킷 정책 수정

  • S3 콘솔로 이동: S3 콘솔에 로그인합니다.
  • 버킷 선택: 해당 S3 버킷을 선택합니다.
  • 권한 탭: "Permissions" 탭을 클릭합니다.
  • 버킷 정책 추가: 아래의 예시와 같이 VPC 엔드포인트를 통한 접근을 허용하는 정책을 추가합니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::your-bucket-name"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpce": "vpce-1234567890abcdef0"
                }
            }
        }
    ]
}

2.3 결과

 

 

 

3. ㅅㅂ;

AWS CodeBuild의 설정 방식이 변경된 이유는 보안 및 네트워크 격리를 강화하기 위해서입니다. 예전에는 기본 서브넷에서 직접 인터넷을 통해 AWS 서비스에 접근할 수 있었지만, 이제는 VPC의 프라이빗 서브넷에서 네트워크 트래픽을 제한하고 NAT 게이트웨이를 사용하여 외부 인터넷에 접근하도록 설정이 변경되었습니다.

보안 강화: VPC 내에서의 모든 트래픽이 AWS 네트워크 내에만 머물도록 하여 보안을 강화했습니다. 이로 인해, CodeBuild는 프라이빗 서브넷에서 실행되며, 외부 인터넷 접근을 위해 NAT 게이트웨이를 사용해야 합니다​ (Amazon AWS Docs)​​ (Amazon Web Services, Inc.)​.
NAT 게이트웨이 필요성: CodeBuild는 퍼블릭 IP 주소를 할당받지 않기 때문에, 프라이빗 서브넷에서 인터넷에 접근하려면 NAT 게이트웨이가 필요합니다. NAT 게이트웨이는 프라이빗 서브넷의 인스턴스가 외부 인터넷과 통신할 수 있도록 하며, 외부에서는 프라이빗 서브넷으로의 직접 접근을 허용하지 않습니다​ (Amazon AWS Docs)​​ (Stack Overflow)​.

 

CodeBuild를 사용하려면 Private Subnet에서의 NAT GW를 구성하거나 위처럼 VPC Endpoint를 하나씩 뚫어줘야하는데 이 부분 요금이 상당하다.

그냥 gitlab-ce를 로컬에 설치해서 사용해야겠다

'AWS > CI CD' 카테고리의 다른 글

Codebuild + awscli : lambda image update  (0) 2023.08.16
AWS CodeBuild - push to Github  (0) 2023.08.10
AWS CodeBuild demo with ECR  (0) 2023.08.10
AWS CodeCommit demo  (0) 2023.08.09