클라우드의 장점 중에 하나는 GUI에서 클릭으로 할 수 있는 방안이라고 생각됩니다.
CLI로 대량의 작업을 한번에 할 수 있는 방안도 있지만
간단하게 필요할때 화면에 나오는 설명을 따라서 설정해서 할 수 있다는 것은 크나큰 장점이라 생각됩니다.
다만 위에 쓴대로 대량의 작업을 한번에 하는건 GUI로는 힘듭니다.
이번 스크립트는 GCP의 Secret Manager 서비스에 있는 리소스들을 프로젝트 단위에서 삭제하는 방안을 작성하였습니다.
해당 삭제 스크립트를 만들게 된 계기는 다음과 같습니다.
GCP에서 프로젝트가 필요없게 되면 정리를 해야되는데 결제계정을 빼면 모든 리소스가 정지되게 되며, 아예 프로젝트를 삭제하는 방안도 있습니다.
다만 여러 이유로 프로젝트가 존재할 필요가 있을때는 비용이 발생되는 리소스를 지워야하는데, Cloud Asset으로 살펴보면 참 다양한 리소스가 존재합니다.
그중 Secret Manager에도 API 키, 비밀번호, 인증서등을 저장하기 위해 사용도 하고, GCP의 Cloud Build 서비스를 사용한다면
기본적으로 만들어지게 됩니다.
삭제할려면 아래와 같이 하나씩 삭제 클릭 -> 확인의 반복을 거쳐야 하는데 이러한 부분을 한번에 삭제하기 위해서 만들게 되었습니다.
CSP에서 제공하는 CLI명령이나 REST API를 통해 자동화를 할 수 있습니다.
- GUI에서 삭제 진행시 방안


2. gcloud+쉘스크립트를 통한 삭제

#!/bin/bash
# 1. 사용자로부터 프로젝트 ID와 필터 이름 접두사 입력 받기
read -p "삭제를 진행할 Google Cloud 프로젝트 ID를 입력하세요: " PROJECT_ID
# 사용자 입력이 없는 경우 스크립트 종료
if [ -z "$PROJECT_ID" ]; then
echo "오류: 프로젝트 ID가 입력되지 않았습니다."
exit 1
fi
read -p "삭제할 보안 비밀 이름의 시작 부분 또는 포함된 문자열 (필터링 키)을 입력하세요 (예: cloudbuild-bitbucket-): " FILTER_NAME_KEY
# 사용자 입력이 없는 경우 스크립트 종료
if [ -z "$FILTER_NAME_KEY" ]; then
echo "오류: 필터링 키가 입력되지 않았습니다."
exit 1
fi
echo ""
echo "-------------------------------------"
echo "대상 프로젝트: $PROJECT_ID"
echo "사용할 필터 키: $FILTER_NAME_KEY"
echo "-------------------------------------"
echo ""
# 2. 삭제할 대상 목록 확인 (입력받은 값 사용)
echo "삭제 대상 목록 확인:"
# !!!! 중요 !!!!: 아래 명령어를 터미널에서 직접 실행해서 삭제될 목록이 정확한지 반드시 먼저 확인하세요!
gcloud secrets list --project="$PROJECT_ID" --filter="name:$FILTER_NAME_KEY" --format='value(name)'
LIST_RESULT=$? # 명령어 실행 결과 저장
# 목록 조회 실패 시 종료 (권한, 프로젝트 ID, 필터 키 오류 등)
if [ $LIST_RESULT -ne 0 ]; then
echo "오류: '$PROJECT_ID' 프로젝트에서 '$FILTER_NAME_KEY' 필터로 보안 비밀 목록을 조회하는 데 실패했습니다."
echo "프로젝트 ID, 필터 키가 올바른지, 또는 계정에 충분한 권한이 있는지 확인하세요."
exit 1
fi
echo "-------------------------------------"
echo ""
# 3. 최종 확인 및 실행 대기
echo "위 목록의 보안 비밀들이 '$PROJECT_ID' 프로젝트에서 삭제될 예정입니다."
echo "스크립트를 계속 진행하려면 Enter 키를 누르세요. 중단하려면 Ctrl+C를 누르세요."
read -p "Enter를 누르면 5초 후 삭제가 시작됩니다..." dummy_var
echo "5초 후 삭제를 시작합니다..."
sleep 5
# 4. 목록을 반복하며 삭제 실행
echo "삭제 작업을 시작합니다..."
SECRET_COUNT=0
# 목록 조회 명령어 다시 실행하여 최신 상태 반영 (실제 삭제 루프용)
for SECRET_NAME in $(gcloud secrets list --project="$PROJECT_ID" --filter="name:$FILTER_NAME_KEY" --format='value(name)'); do
SECRET_COUNT=$((SECRET_COUNT + 1))
echo "삭제 시도 중: $SECRET_NAME (프로젝트: $PROJECT_ID)"
gcloud secrets delete "$SECRET_NAME" --project="$PROJECT_ID" --quiet
if [ $? -eq 0 ]; then
echo " -> 성공적으로 삭제됨: $SECRET_NAME"
else
echo " -> 삭제 실패: $SECRET_NAME (오류 코드: $?)"
fi
echo "---- 다음으로 넘어갑니다 ----"
done
echo ""
# 삭제 대상이 없었을 경우 메시지 추가
if [ $SECRET_COUNT -eq 0 ]; then
echo "삭제할 대상이 없습니다 ('$FILTER_NAME_KEY' 필터 기준, '$PROJECT_ID' 프로젝트)."
fi
echo "스크립트 완료."
'Cloud > GCP' 카테고리의 다른 글
[GCP] Cloud SQL 사용 현황, GUI보다 빠르고 정확하게 파악하기 (gcloud & Shell Script 활용) (0) | 2025.05.03 |
---|---|
GCP 전체 Cloud storage 사용량 조회 (0) | 2025.04.22 |
[GCP] VM기준으로 방화벽 내용을 조회 하는 스크립트 (0) | 2025.04.19 |
GCP Asset Inventory로 내부 자산인 GCE(VM) 확인하기 (0) | 2025.04.09 |
[GCP] STS(Storage Transfer Service) Agent 설치, 설정 (0) | 2025.03.14 |
On-premise 환경에서 GCP의 Private Google Access(PGA) 사용하기 – DNS Forward 방안 (2) | 2025.03.03 |
On-premise 환경에서 GCP의 Private Google Access(PGA) 사용하기 – DNS 설정 가이드 (0) | 2025.02.26 |