GCP - Cloud Build Enum
기본 정보
Google Cloud Build는 소프트웨어 빌드 및 릴리스 프로세스를 자동화하는 관리형 CI/CD 플랫폼으로, 소스 코드 저장소와 통합되며 다양한 프로그래밍 언어를 지원합니다. 개발자들은 코드를 자동으로 빌드, 테스트 및 배포할 수 있으며 빌드 단계와 워크플로를 사용자 정의할 수 있습니다.
각 Cloud Build 트리거는 Cloud 저장소와 관련이 있거나 외부 저장소(Github, Bitbucket 및 Gitlab)와 직접 연결됩니다.
여기나 Cloud 저장소에서 Github/Bitbucket 토큰을 도용할 수 있는 방법을 볼 수 없었습니다. 왜냐하면 저장소가 다운로드될 때 https://source.cloud.google.com/ URL을 통해 액세스되며 Github는 클라이언트에 의해 액세스되지 않기 때문입니다.
이벤트
Cloud Build는 다음 경우에 트리거될 수 있습니다:
브랜치로 푸시: 브랜치 지정
새 태그로 푸시: 태그 지정
풀 리퀘스트: PR을 받는 브랜치 지정
수동 호출
Pub/Sub 메시지: 토픽 지정
웹훅 이벤트: HTTPS URL을 노출하고 요청은 비밀로 인증되어야 함
실행
3가지 옵션이 있습니다:
yaml/json을 사용하여 실행할 명령을 지정합니다. 일반적으로:
/cloudbuild.yaml
웹 콘솔 및 CLI에서 "인라인"으로 지정할 수 있는 하나
가장 일반적인 옵션
인증되지 않은 액세스에 관련이 있음
빌드할 Dockerfile
빌드할 Buildpack
SA 권한
서비스 계정에는 cloud-platform
스코프가 있으므로 모든 권한을 사용할 수 있습니다. SA가 지정되지 않은 경우(제출할 때와 같이) 기본 SA <proj-number>@cloudbuild.gserviceaccount.com
이 사용됩니다.
기본적으로 권한이 부여되지 않지만 쉽게 부여할 수 있습니다:
승인
Cloud Build를 구성하여 빌드 실행에 대한 승인을 요구할 수 있습니다(기본적으로 비활성화됨).
PR 승인
트리거가 PR인 경우 누구나 공개 저장소에 PR을 수행할 수 있기 때문에 어떤 PR이든 트리거 실행을 허용하는 것은 매우 위험할 수 있습니다. 따라서 기본적으로 실행은 소유자 및 협력자에게만 자동으로 이루어지며, 다른 사용자의 PR로 트리거를 실행하려면 소유자 또는 협력자가 /gcbrun
을 코멘트해야 합니다.
연결 및 저장소
연결은 다음을 통해 생성할 수 있습니다:
GitHub: 권한을 요청하는 OAuth 프롬프트가 표시됩니다. Github 토큰을 가져올 수 있는 권한을 요청하며 이는 Secret Manager에 저장됩니다.
GitHub Enterprise: GithubApp을 설치하라는 요청이 표시됩니다. GitHub Enterprise 호스트에서 인증 토큰이 생성되어 이 프로젝트에 Secret Manager 시크릿으로 저장됩니다.
GitLab / Enterprise: API 액세스 토큰 및 Read API 액세스 토큰을 제공해야 하며 이는 Secret Manager에 저장됩니다.
연결이 생성되면 Github 계정이 액세스할 수 있는 저장소를 연결할 수 있습니다.
이 옵션은 다음 버튼을 통해 사용할 수 있습니다:
이 방법으로 연결된 저장소는 2세대를 사용하는 트리거에서만 사용 가능합니다.
저장소 연결
이는 **연결
**과는 다릅니다. 이는 Github 또는 Bitbucket 저장소에 액세스하는 다양한 방법을 제공하지만 연결 객체를 생성하지 않고 저장소 객체(1세대)를 생성합니다.
이 옵션은 다음 버튼을 통해 사용할 수 있습니다:
저장소
가끔 Cloud Build는 트리거용 파일을 저장할 새로운 저장소를 생성할 수 있습니다. 이는 예를 들어 GCP가 제공하는 예제에서 발생합니다.
쉘 획득
클라우드 빌드 내에서 gcloud를 설치합니다:
열거
빌드 구성 및 로그에서 민감한 정보를 찾을 수 있습니다.
권한 상승
pageGCP - Cloudbuild Privesc인증되지 않은 액세스
pageGCP - Cloud Build Unauthenticated Enum사후 공격
pageGCP - Cloud Build Post Exploitation最終更新