GCP github actions 연동

github actions 는 이미 알고 있다는 전제하에서 따로 설명하지 않고 진행을 함.

github actions 와 GCP 연동.

처음에는 서비스 계정을 이용하여 먼저 테스팅을 해보는 것이 쉬움.

서비스 계정을 만들고 https://github.com/google-github-actions/setup-gcloud 에서 example-workflows 를 참고하여 github actions 실행을 해봄. (gce.yaml)

 

github actions 에서 gcp 와 인증을 할 때  서비스 계정의 JSON 키를 이용하는 방식도 있지만  Workload Identity Federation 를 추천하고 있음.

https://github.com/google-github-actions/auth

 

서비스계정 생성 test-tj-cloud-storage@sample-dev.iam.gserviceaccount.com . 테스팅하고 삭제하였음.

project="sample-dev" service_account="test-tj-cloud-storage" gcloud iam service-accounts create $service_account \ --description="test" \ --display-name="cloud storage test for github" \ --project=$project

 

서비스계정에 ROLE 할당. cloud storage sample-gw-tm-operation-dev 버킷의 저장소 개채관리자 권한 부여 하였음.

gsutil iam ch serviceAccount:test-tj-cloud-storage@sample-dev.iam.gserviceaccount.com:objectAdmin gs://sample-gw-tm-operation-dev

 

서비스계정 KEY 생성하여 github actions 테스팅을 해봄. 서비스계정의 key 정보를 github actions 의 secrets 에 등록을 해줌. (https://docs.github.com/en/actions/security-guides/encrypted-secrets )

https://github.com/sampleCorp/gcp_operations/settings/secrets/actions 에서 등록하면 됨. (현재는 테스팅하고 삭제)

jobs: job_id: # ... steps: - uses: 'actions/checkout@v2' - id: 'auth' name: 'Authenticate to Google Cloud' uses: 'google-github-actions/auth@v0' with: credentials_json: '${{ secrets.GOOGLE_CREDENTIALS }}'

Workload Identity Federation 세팅

https://cloud.google.com/iam/docs/workload-identity-federation

일반적으로 Google Cloud 외부에서 실행되는 애플리케이션이 Google Cloud 리소스에 액세스하려면 서비스 계정 키를 사용합니다. 서비스 계정 키는 강력한 사용자 인증 정보이며 제대로 관리하지 않을 경우 보안상 위험할 수 있습니다.

ID 제휴를 사용하면 ID 및 액세스 관리(IAM)를 통해 서비스 계정을 가장하는 기능이 포함된 IAM 역할을 외부 ID에 부여할 수 있습니다. 이렇게 하면 단기 액세스 토큰을 사용하여 리소스에 직접 액세스할 수 있고 서비스 계정 키와 관련된 유지보수 및 보안 부담이 사라집니다.

 

워크로드 아이덴티티 풀을 사용하여 외부 ID를 구성 및 관리할 수 있습니다.

프로젝트에는 여러 워크로드 아이덴티티 풀이 포함될 수 있으며 각 풀은 다양한 리소스에 액세스할 수 있습니다. 이를 통해 동일한 풀에서 관련 ID를 그룹화한 후 리소스에 대한 세분화된 액세스 권한을 부여하여 최소 권한의 원칙을 따를 수 있습니다.

일반적으로 개발, 스테이징, 프로덕션 환경과 같은 Google Cloud 리소스에 액세스해야 하는 Google Cloud 이외의 환경마다 새로운 풀을 만드는 것이 좋습니다.

 

세팅방법 : https://github.com/google-github-actions/auth#setup

 

설정내용 스크립트

scripts/gcp/workload-identity-pools.sh at main · taejoonmoon/scripts

 

github actions 예제파일

main branch에 push, pull_request 했을 때 실행을 하거나 수동으로 실행(workflow_dispatch) 할 수 있음.

 

upload-cloud-storage 를 이용해서 업로드를 할 때 github 에서 삭제한 파일은 cloud storage 에서 자동으로 삭제가 되지 않는다. 현재 github 에 있는 파일만을 업로드하고 동기화를 해주는 것은 아니다. 아래와 같이 해당 서비스 계정에 권한을 부여하고 gsutil 을 이용하여 삭제 코드를 넣어주어도 storage.objects.list 권한이 없다고 나온다. 아마도 google-github-actions/auth 를 이용하여 인증처리를 하는 경우에는 인증 부분이 달라지는 것이 있어서 그런가???

https://github.com/google-github-actions/auth 문서를 보면 gsutil 에서는 아직 Workload Identity Federation 을 지원하지 않는다. gsutil 을 쓰러면 서비스 계정을 사용을 해야 한다고 나와있다. “The bq and gsutil tools do no currently support Workload Identity Federation! You will need to use traditional service account key authentication for now.”

아무튼 필수적으로 처리해야 하는 부분은 아니어서 아래 부분은 추가를 하지 않는다.

github actions 에서 에러

참고

gcp cloud storage : GitHub - google-github-actions/upload-cloud-storage: A GitHub Action for uploading files to a Google Cloud Storage (GCS) bucket.