gcp-projects
Cloud Resource Manager API로 Google Cloud 프로젝트를 검색합니다.
문법
옵션
- profile=STRING
- 선택 옵션. Google Cloud 접속 프로파일 식별자. 쉼표로 여러 개를 지정하면 프로파일마다 차례로 조회하고 profile 필드로 구분합니다. 생략하면 사용 권한이 있는 모든 Google Cloud 접속 프로파일로 조회합니다. 조회 중 한 프로파일에서 오류가 나면 그때까지 출력한 결과는 남고, 나머지 프로파일은 조회하지 않은 채 쿼리가 오류로 끝납니다.
- scope=STRING
- 선택 옵션.
folders/폴더번호또는organizations/조직번호. 바로 아래 프로젝트만 조회하며 하위 폴더의 프로젝트는 제외합니다. 생략하면 서비스 계정이 접근할 수 있는 모든 프로젝트를 조회하며, 다른 조직의 프로젝트도 포함될 수 있습니다. - query=STRING
- 선택 옵션. Resource Manager 검색식. 예:
state:ACTIVE,id:my-project*,labels.env:prod. 필드 없이 단어만 쓰는 검색은 지원하지 않습니다. 검색식 문법은 projects.search 문서의 query 항목을 참고합니다. - limit=INT
- 선택 옵션. 프로파일별 최대 출력 건수. 1 이상의 정수. 생략하면 전체를 조회합니다.
출력 필드
| 필드 | 타입 | 이름 | 설명 |
|---|---|---|---|
| profile | 문자열 | 프로파일 | 접속 프로파일 이름 |
| project_id | 문자열 | 프로젝트 ID | 사용자가 지정한 프로젝트 ID. 예: my-project-123456 |
| display_name | 문자열 | 표시 이름 | 프로젝트 표시 이름 |
| state | 문자열 | 상태 | ACTIVE 또는 DELETE_REQUESTED |
| parent | 문자열 | 상위 자원 | folders/{번호} 또는 organizations/{번호} |
| project_number | 문자열 | 프로젝트 번호 | 시스템이 발급한 프로젝트 번호. 예: 345678901234 |
| labels | 맵 | 라벨 | 사용자 정의 라벨 |
| create_time | 날짜 | 생성 시각 | 프로젝트 생성 시각 |
| update_time | 날짜 | 수정 시각 | 프로젝트 최종 수정 시각 |
| delete_time | 날짜 | 삭제 요청 시각 | 프로젝트 삭제가 요청된 시각 |
오류 코드
파싱 오류
| 오류 메시지 | 원인 | 해결 |
|---|---|---|
| 사용 가능한 Google Cloud 프로파일이 없습니다. | 프로파일 식별자가 틀렸거나 사용 권한이 없음 | profile 옵션에 접속 프로파일 식별자 입력, 프로파일 사용 권한 확인 |
| scope 형식이 올바르지 않습니다: {scope} | scope 형식 오류, 또는 projects/를 지정함 | folders/폴더번호 또는 organizations/조직번호 입력 |
| limit은 양의 정수여야 합니다: {limit} | limit이 0 이하이거나 숫자가 아님 | 1 이상의 정수 입력 |
런타임 오류
| 오류 메시지 | 원인 | 해결 |
|---|---|---|
| HTTP 403: PERMISSION_DENIED - The caller does not have permission | scope로 지정한 폴더·조직에 권한이 없음 | 해당 범위에 탐색자 역할 부여 |
| HTTP 403: PERMISSION_DENIED - Cloud Resource Manager API has not been used in project ... | 서비스 계정 프로젝트에서 Cloud Resource Manager API 미사용 설정 | 서비스 계정이 속한 프로젝트에서 Cloud Resource Manager API 사용 설정 |
| HTTP 400: INVALID_ARGUMENT - field [query] has issue [...] | 검색식 문법 오류, 지원하지 않는 필드, 필드 없는 단어 검색 | 필드:값 형식으로 수정. 예: name:my-project* |
| token exchange failed, HTTP 400: Invalid grant | JSON 키 오류, 서비스 계정·키 삭제 | 새 키를 발급해 접속 프로파일 수정 |
설명
Cloud Resource Manager API v3의 projects:search로 서비스 계정이 resourcemanager.projects.get 권한을 가진 프로젝트를 검색합니다. 권한이 없는 프로젝트는 오류 없이 결과에서 빠집니다. 결과가 0건이면 서비스 계정에 탐색자 역할이 있는지 gcp-check-permissions로 확인합니다.
scope를 지정하면 그 폴더·조직의 바로 아래 프로젝트만 나옵니다. Resource Manager의 검색이 직속 상위(parent) 일치만 지원하기 때문입니다. 하위 폴더 안까지 포함한 조직 전체 프로젝트는 gcp-assets에 types=cloudresourcemanager.googleapis.com/Project를 지정해 조회합니다.
query와 scope를 함께 지정하면 query는 Google Cloud로 전달하고 scope는 결과에서 거릅니다. Resource Manager 검색식은 조건을 여러 개 쓰면 하나라도 맞는 것을 돌려주기 때문입니다.
프로젝트 정보는 gcp-assets에 types=cloudresourcemanager.googleapis.com/Project를 지정해도 조회할 수 있습니다. 상황에 따라 다음과 같이 선택합니다.
| 상황 | 권장 명령어 |
|---|---|
| 조직 하나의 전체 프로젝트를 소속 폴더·태그와 함께 조회 | gcp-assets (조직 수준 Cloud 애셋 뷰어 역할 필요) |
| 조직이 없거나 여러 조직에 걸친 프로젝트를 한 번에 조회 | gcp-projects (scope 생략) |
| 서비스 계정이 접근할 수 있는 프로젝트 확인, 삭제 요청 시각 확인 | gcp-projects |
사용 예
예시: 접근 가능한 프로젝트 목록
상황: 서비스 계정이 조회할 수 있는 프로젝트와 소속을 확인합니다.
gcp-projects profile=gcp
| fields project_id, project_number, display_name, parent, state, create_time
예상 결과:
| project_id | project_number | display_name | parent | state | create_time |
|---|---|---|---|---|---|
| my-project-123456 | 345678901234 | My Project | organizations/123456789012 | ACTIVE | 2026-10-06 14:42:46+0900 |
| test-project-234567 | 456789012345 | Test Project | folders/234567890123 | ACTIVE | 2026-10-15 11:22:13+0900 |
결과 해석: parent로 프로젝트가 조직 직속인지 폴더 아래인지 알 수 있습니다.
예시: 폴더 바로 아래의 활성 프로젝트
상황: 특정 폴더 바로 아래에서 활성 상태인 프로젝트만 봅니다.
gcp-projects profile=gcp scope=folders/234567890123 query="state:ACTIVE"
| fields project_id, display_name, state
결과 해석: 삭제 요청된(DELETE_REQUESTED) 프로젝트는 빠집니다. 하위 폴더의 프로젝트는 나오지 않습니다.